4

Например, у меня есть видео, для которого ffmpeg показывает

  Duration: 00:46:43.72, start: 0.540000, bitrate: 2593 kb/s
    Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x576 [PAR 16:15 DAR 4:3], 9000 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0.1[0x80]: Audio: ac3, 48000 Hz, stereo, s16, 448 kb/s

Размер файла составляет 908843008 байт, поэтому 2593 кбит / с правильные. Но почему он говорит, что битрейт видеопотока составляет 9000 кбит / с?

2 ответа2

4

Потоки MPEG обычно используют кодирование с переменным битрейтом, чтобы сэкономить место в тех разделах видео, которые легко кодировать, что позволяет повысить качество. FFMpeg сообщает о битрейте, сохраненном в заголовке последовательности видеопотока, который является максимальным битрейтом во всем файле (или, во многих случаях, максимальным битрейтом, который был разрешен кодером - фактический файл может не иметь разделов, которые используют такой высокий битрейт, как этот). Значение 9000 кбит / с является типичным для потоков MPEG2 с DVD-дисков (или предназначенных для них): максимальный комбинированный битрейт видео и аудио для DVD составляет 9800 кбит / с, поэтому это позволяет получить ~ 500 кбит / с для аудио и некоторые запасные для навигационных пакетов и других издержек.

2

В общем, ffmpeg использует заголовки файлов для информации, где это возможно (когда он распознает форматы заголовков), и в противном случае возвращается к вычислению его по продолжительности и размеру файла.

Форматы обертки (например, mov, mp4) не имеют собственной битрейт - битрейт является характеристикой отдельных потоков - но он будет иметь продолжительность. Затем ffmpeg может рассчитать битрейт по размеру файла и продолжительности.

Сами потоки, однако, будут иметь битрейт, указанный в заголовках потока, поэтому его можно читать прямо из метаданных. Это означает, что битрейт может быть неверно указан в заголовке, или он может быть 9000kb/s в начале, и уменьшаться до более низкой битрейта, или поток может быть обрезан так, что файл не завершен, следовательно, математика не работает как ожидается.

Если вы извлекаете видеокомпонент (например: ffmpeg -i myfile.mov -vcodec copy -an testfile.m2v , использование зависит от версии программного обеспечения), вы сможете продолжить исследование и выяснить, откуда берется указанный битрейт.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .