У меня есть файл h264, который извлекается из формата YUV с помощью программного обеспечения SVC. Теперь я хочу вычислить размер каждой GOP в файле h264. Мы знаем, что размер GOP — это расстояние между двумя ближайшими I-кадрами. здесь. Не могли бы вы предложить мне, как вычислить размер GOP данного файла h264. Лучше, если мы реализуем это на C/C++. Спасибо.
Как рассчитать размер GOP файла H264
Ответы (3)
Что ж, просто анализировать битовый поток, чтобы найти каждый I-кадр, немного сложно; среди прочего, порядок кодирования может отличаться (или не отличаться) от порядка отображения. Одним из решений является использование http://www.ffmpeg.org/ffprobe.html из пакета ffmpeg. -люкс.
Пример:
ffprobe -show_frames input.bin | grep key_frame
key_frame=1
key_frame=0
key_frame=0
key_frame=0
key_frame=0
key_frame=0
...
из вывода вы можете легко вычислить длину GOP
Другим решением является исправление эталонной реализации, найденной по адресу http://iphome.hhi.de/suehring/tml/
Дайте мне знать, если вам нужна помощь с этой частью :-)
person
Fredrik Pihl
schedule
03.06.2014
Большое спасибо. Но в моем случае я использовал SVC для извлечения YUV в битовый поток h264. Очень сложно определить, какой кадр является ключевым. У вас есть другое решение?
- person user3677103; 03.06.2014
Во-первых, что такое SVC? Вы кодируете файл YCbCr в бипоток H.264 и хотите получить длину GOP из этого файла или любого другого H.264, если уж на то пошло?
- person Fredrik Pihl; 03.06.2014
SVC — масштабируемое кодирование видео. Вот так. Моя цель - получить длину GOP из потока H264.
- person user3677103; 04.06.2014
Кто-то на самом деле использует SVC? :-) Если вам не нравится решение ffmpeg, взгляните на справочную программу, на которую я ссылался в своем ответе. Двоичный файл
ldecod.exe
выводит тип фрейма на стандартный вывод. Также было бы довольно просто добавить счетчик в src-code для подсчета разницы номеров кадров между IDR (I)-кадрами.
- person Fredrik Pihl; 06.06.2014
Лично я предпочитаю фильтрацию по pict_type:
ffprobe -show_frames input.h264 | grep pict_type
Это покажет вам структуру кадра:
pict_type=I
pict_type=P
pict_type=P
pict_type=P
pict_type=P
pict_type=P
...
person
mysteryegg
schedule
17.05.2016
используйте команду типа:
ffprobe -show_entries frame=pict_type mp4_sample.mp4 -of flat | grep I
и вы увидите результат, как:
frames.frame.0.pict_type="I"
frames.frame.384.pict_type="I"
frames.frame.764.pict_type="I"
frames.frame.1027.pict_type="I"
frames.frame.1164.pict_type="I"
frames.frame.1544.pict_type="I"
frames.frame.1944.pict_type="I"
frames.frame.2183.pict_type="I"
frames.frame.2324.pict_type="I"
person
bluesky
schedule
20.11.2019