Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
ВнизКак из видеофайла получить кодек, которым он сжат? Найти похожие ветки
← →
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/ruMediaInfo позволяет получать техническую информацию из видео- или аудио- файлов.
Это - свободное программное обеспечение (распространяется бесплатно и с исходным кодом, доступным по лицензии GPL или LGPL)
Для меня плюсы очевидны:
+Поддерживает огромное количество кодеков и форматов и платформ.
+GNU GPL
+Есть вариант, выполненный в виде библиотеки с примерами (что я и буду использовать)
Всем все равно спасибо. Я нашел его только благодаря тому, что искал дополнительную информацию к данной на форуме.
← →
KilkennyCat © (2009-12-28 08:13) [12]Тебе тож спасибо, меня тут озадачили мультимедией... ща посмотрим это чудо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c