Есть ли способ использовать ffprobe или аналогичные инструменты командной строки для определения битрейта видео на GOP?

ffprobe, похоже, выводит только общую скорость передачи битов для всего видео, но не для пакетов.

ffprobe -i video.mp4 -show_entries packets

я думаю, это группа картинок.

[PACKET]
codec_type=video
stream_index=0
pts=126976
pts_time=9.920000
dts=126464
dts_time=9.880000
duration=512
duration_time=0.040000
convergence_duration=N/A
convergence_duration_time=N/A
size=6229
pos=5648590
flags=__
[/PACKET]

1 ответ1

1

Пакет не является группой изображений - в зависимости от контейнера пакет представляет собой только один кадр или может также содержать только часть кадра.

Вместо этого вы должны посмотреть, есть ли у вас пакет, содержащий ключевой кадр. Проверьте атрибут flags . Если вы получите K в этом, это начало GOP. Запомните пакет DTS и суммируйте атрибут size пока не дойдете до следующего ключевого кадра, разделив эту сумму на дельту в метках времени или, альтернативно, на сумму duration_time .

Это даст вам битрейт на GOP, включая издержки на пакетирование.

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