Определите битрейт видео с помощью ffmpeg

8782
user2528012

Я пытаюсь определить битрейт видео (для транскодирования) с помощью команды ffmpeg, я попробовал следующую команду.

ffmpeg -i 28572615.wmv 

и он производит следующий вывод

 Input #0, asf, from '28572615.wmv': Metadata: major_brand : isom minor_version : 1 compatible_brands: isomavc1 encoder : Lavf57.36.100 Duration: 00:02:50.92, start: 0.000000, bitrate: 1982 kb/s Stream #0:0: Video: wmv2 (WMV2 / 0x32564D57), yuv420p, 640x360, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn, 1k tbc Stream #0:1: Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, 2 channels, fltp, 128 kb/s At least one output file must be specified 

Если я использую другое видео

ffmpeg -i with_out_sound.mp4 

тогда я получаю следующий вывод

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'with_out_sound.mp4': Metadata: major_brand : dash minor_version : 0 compatible_brands: iso6avc1mp41 creation_time : 2015-04-21 05:14:57 Duration: 00:00:27.86, start: 0.000000, bitrate: 500 kb/s Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 622x480 [SAR 1:1 DAR 311:240], 100 kb/s, 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc (default) Metadata: creation_time : 2015-04-21 05:14:57 handler_name : VideoHandler At least one output file must be specified 

Дело в том, что я запутался в том, что я должен искать в строке метаданных Duration или в строке метаданных Video Stream (Stream # 0: 0) битрейт видео?

11
Для 2-го файла, какой размер файла? Gyan 8 лет назад 0
@Mulvya 2-й размер видеофайла составляет 1,66 МБ user2528012 8 лет назад 0
Таким образом, оба показания неверны - фактический битрейт составляет 61 кбит / с. Это, вероятно, потому что это сегмент DASH. Gyan 8 лет назад 0
[Как ffmpeg определяет битрейты отдельных потоков?] (Http://superuser.com/q/694062/615410) объясняет, как определяются скорости. creidhne 8 лет назад 0

1 ответ на вопрос

9
Gyan

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

Если битрейт видео отсутствует, то грязный способ получить это значение - вычитать битрейт всех других потоков из общего битрейта.

Если это не жизнеспособно, громоздким методом является запуск ffprobe для отображения размеров пакетов и длительности потока, а затем вычисление скорости передачи битов путем суммирования всех строк, кроме последней, и деления на значение в последней строке.

ffprobe -select_streams v -show_entries packet=size:stream=duration -of compact=p=0:nk=1 video.mp4 

Выход:

4199  2627  1792  3921  2993  ...  2301  3076 2879 1543.00000 

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

Похожие вопросы