Что означают подробности потока вывода видео из ffmpeg?

10

Когда вы запускаете ffmpeg -iвидеофайл в качестве входного параметра, ffmpeg возвращает некоторые детали типа потока, такие как кодек, битрейт и разрешение. Что означают другие данные - «tbr», «tbn» и «tbc»? Из приведенных ниже примеров видно, что они сильно различаются.

Stream #0.0(und): Video: h264, yuv420p, 1280x720, 25 tbr, 25 tbn, 50 tbc

Stream #0.0(eng): Video: h264, yuv420p, 640x480, 22050 tbr, 22050 tbn, 44100 tbc

Stream #0.1: Video: wmv3, yuv420p, 1280x720, 4000 kb/s, 29.97 tbr, 1k tbn, 1k tbc

Вторичный вопрос: почему не всегда отображается битрейт?

Nilzor
источник

Ответы:

6

То, что вы видите, является обратной величиной баз меток времени, используемых в FFmpeg и en / decoders. Я не могу объяснить это лучше, поэтому только со ссылкой на список рассылки FFmpeg :

Я думаю, что tbn - это временная база в AVStream, пришедшая из контейнера. Используется для всех отметок времени AVStream.

tbc - это временная база в AVCodecContext для кодека, используемого для определенного потока. Он используется для всех AVCodecContext и связанных отметок времени.

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

В конце концов, вы хотите взять tbr в качестве значения, которое чаще всего называют «частотой кадров».

Битрейт не всегда отображается, поскольку видеопотоки могут содержать переменный битрейт - в этом случае вы не сможете реально оценить битрейт. Для потоков с постоянным битрейтом обычно отображается битрейт. В некоторых случаях используются переменные битрейты, и FFmpeg показывает среднее - по крайней мере, для видео h.264 это иногда работает.

Video: h264, yuv420p, 640x480, 22050 tbr, 22050 tbn, 44100 tbc кажется, больше похоже на аудиопоток.

slhck
источник