Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.03.07;
Скачать: CL | DM;

Вниз

Как из видеофайла получить кодек, которым он сжат?   Найти похожие ветки 

 
cosinus   (2009-12-09 04:21) [0]

Необходимо узнать какой видео и аудио кодек используется. То есть в идеале на входе имеем видеофайл, а на выходе получаем
Xvid
Dolby AC3 48000Hz 6ch 320kbps


Куда смотреть?


 
cosinus   (2009-12-09 05:01) [1]

С видеокодеком вроде разобрался (читай - нагуглил). Там просто вроде достаточно 4 байта просто прочитать. С аудио пока затык (((


 
KilkennyCat ©   (2009-12-09 05:03) [2]

в заголовки файла.


 
KilkennyCat ©   (2009-12-09 05:06) [3]


> С видеокодеком вроде разобрался (читай - нагуглил). Там
> просто вроде достаточно 4 байта

это ты очень сильно заблуждаешься. очень.
тебе к этим четырем винда может насильно присобачить (при каких-либо более сложных манипуляций, чем скопировать-удалить файл) RIFF-заголовок и кранты.


 
cosinus   (2009-12-09 05:19) [4]


> KilkennyCat ©   (09.12.09 05:06) [3]

Плохо... А я уже обрадовался. Ну да ладно ))
Правильно ли я понял [2], что просто нужно найти описание формата avi (например), чтобы выдернуть оттуда необходимую мне информацию? RIFF вроде как (судя по "быстрому гуглению") всего-лишь добавляет что-то, то есть просто сдвиг имеем...
Алгоритм следующий - читаем файл, смотрим на присутствие\отсутствие RIFF, читаем нужные куски из заголовка. Или все "глубжее значительно"?
Где можно об этом почитать, желательно, чтобы после прочтения я понял все относительно заголовков видео и подводных камнях в этой области (тот же RIFF), но не знал бы ВСЕ о видео? ))) В том смысле, что не хотелось бы читать что-то ГЛОБАЛЬНОЕ страниц так на 100500 ))


 
cosinus   (2009-12-09 18:50) [5]

Все, что я нашел в интернете - это просто чтение байт из заголовка.
Как правило все примеры частично работают, после определенного момента работать перестают, то есть где то идет чтение "не оттуда, откуда надо". В этом может быть виноват этот многострадальный RIFF?

Вот пример того, что в разных интерпретациях встречается на просторах интернета....
//Проверяем, что это AVI файл
FileSeek(AviFileHandle, 7, 0);
FileRead(AviFileHandle, TEMP_TEST, 5);
if copy(TEMP_TEST, 0, 4) <> "AVI " then
begin
ShowMessage("Невозможно обработать выбранный AVI файл. Операция остановлена!");
exit;
end;

// Определяем размер файла
FileSeek(AviFileHandle,4,0);
FileRead(AviFileHandle, TEMP_SIZE, 4);

//Производим инициализирующие действия, чтобы в дальнешем получить
//информацию об аудио и видео
FileSeek(AviFileHandle,28,0);
FileRead(AviFileHandle, AVI_HEADER_SIZE, 4);
AVI_HEADER_START := 32;

//Значение необходимо для получения fps
FileSeek(AviFileHandle,AVI_HEADER_START,0);
FileRead(AviFileHandle, TEMP_MICROSEC, 4);

//Длина фильма в кадрах
FileSeek(AviFileHandle,AVI_HEADER_START + 16,0);
FileRead(AviFileHandle, TEMP_LENGTHinFRAMES, 4);

//Ширина
FileSeek(AviFileHandle,AVI_HEADER_START + 32,0);
FileRead(AviFileHandle, VWidth, 4);

//Высота
FileSeek(AviFileHandle,AVI_HEADER_START + 36,0);
FileRead(AviFileHandle, VHeight, 4);

FileSeek(AviFileHandle,AVI_HEADER_START + AVI_HEADER_SIZE + 4,0);
FileRead(AviFileHandle, V_HEADER_SIZE, 4);
V_HEADER_START := AVI_HEADER_START + AVI_HEADER_SIZE + 20;

//Видеокодек
FileSeek(AviFileHandle,V_HEADER_SIZE + 3,0);
FileRead(AviFileHandle, TEMP_VCODEC, 5);
A_HEADER_START := V_HEADER_START + V_HEADER_SIZE + 8;
FileSeek(AviFileHandle,AVI_HEADER_START - 4,0);
FileRead(AviFileHandle, A_STRH_SIZE, 5);

//Аудиокодек
FileSeek(AviFileHandle,A_HEADER_START + A_STRH_SIZE + 8,0);
FileRead(AviFileHandle, TEMP_ACODEC, 2);

//Дополнительная информация об аудио
//Mono(1), Stereo(2)
FileSeek(AviFileHandle,AVI_HEADER_START + A_STRH_SIZE + 10,0);
FileRead(AviFileHandle, TEMP_ACHANNELS, 2);
//samplerate
FileSeek(AviFileHandle,AVI_HEADER_START + A_STRH_SIZE + 12,0);
FileRead(AviFileHandle, TEMP_ASAMPLERATE, 4);
//bitrate
FileSeek(AviFileHandle,AVI_HEADER_START + A_STRH_SIZE + 16,0);
FileRead(AviFileHandle, TEMP_ABITRATE, 4);

//Информация прочитана, закрываем файл
FileClose(AviFileHandle);


Куда же все таки копать чтобы выдергивание нужной мне информации работало хотя бы в 95% случаев?


 
DVM ©   (2009-12-09 19:05) [6]


>  после определенного момента работать перестают

это как? Т.е. сначала работает потом перестает для тех же файлов?


 
cosinus   (2009-12-09 19:15) [7]


> DVM ©   (09.12.09 19:05) [6]
>
>

Да сам уже понял, что криво написал )))
В том смысле, что всякие высоту, ширину, битрейт читает нормально, а начиная с чтения видеокодека - читает не там и соответственно на выходе чушь. У меня тут для теста порядка 10 файлов и у всех одно и тоже. Подправить позицию, с которой он читает аудио и видео данные не проблема, насколько я понял, а вот насколько это верно будет... Получится так, что попадись мне другой видео-файл, для которых и заточена эта функция (что странно, кстати, что не на всех работает, в моем случае, так вообще ни на одном) моя подправленная читать не будет.
Странно мне в данном случае то, что люди писавшие эту и похожие почти как две капли воды функции не учитывали вариант, когда читать будет неверно. Или это просто устаревшая функция, а у меня все avi-шки вплоть новые?


 
Медвежонок Пятачок ©   (2009-12-09 19:26) [8]

все это слишком частный случай.
достаточно взять мпег2 файл чтобы обломаться с сигнатурой рифа в начале файла. ее там просто нет


 
DVM ©   (2009-12-09 20:28) [9]


> cosinus

http://www.swissdelphicenter.ch/torry/showcode.php?id=2050

для контейнера AVI

Для других контейнеров (а их немало) методы похожие но требуется описание контейнеров.


 
cosinus   (2009-12-09 20:42) [10]


> Медвежонок Пятачок ©   (09.12.09 19:26) [8]

Это более, чем прозрачно, для начала понять бы с avi.


> DVM ©   (09.12.09 20:28) [9]

Спасибо, действительно полезный модуль. А вы не встречали где-нибудь более менее обобщенной информации по контейнерам? Или придется, с мира по нитке?


 
cosinus   (2009-12-10 15:55) [11]

Нашел идеальный вариант.
Может кому пригодится, вот ссылка http://mediainfo.sourceforge.net/ru
MediaInfo позволяет получать техническую информацию из видео- или аудио- файлов.
Это - свободное программное обеспечение (распространяется бесплатно и с исходным кодом, доступным по лицензии GPL или LGPL)


Для меня плюсы очевидны:
+Поддерживает огромное количество кодеков и форматов и платформ.
+GNU GPL
+Есть вариант, выполненный в виде библиотеки с примерами (что я и буду использовать)

Всем все равно спасибо. Я нашел его только благодаря тому, что искал дополнительную информацию к данной на форуме.


 
KilkennyCat ©   (2009-12-28 08:13) [12]

Тебе тож спасибо, меня тут озадачили мультимедией... ща посмотрим это чудо.



Страницы: 1 вся ветка

Текущий архив: 2010.03.07;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.01 c
2-1261824983
Егорка
2009-12-26 13:56
2010.03.07
Таймер


6-1210590992
little_fish
2008-05-12 15:16
2010.03.07
проблема с Web-Services(HTTPRIO)


1-1239176461
MAcK
2009-04-08 11:41
2010.03.07
TXMLTransformClient


2-1262773465
NewZ
2010-01-06 13:24
2010.03.07
Рабочий стол Windows.


2-1262761116
Igor2100
2010-01-06 09:58
2010.03.07
Потоки+dll