2015-09-25 3 views
3

У меня есть два вопроса относительно Группа-из-изображений (GOP) в формате MPEG4 Video (как для MPEG4 Part 2, и H.264):структура GOP с помощью FFmpeg

  1. Как я могу извлечь структуру GOP и размер видеопоследовательности с использованием FFmpeg? Я знаю, что функция av_get_picture_type_char структуры AVPicture дает типы изображений для каждого кадра, но мне интересно, существует ли более прямой метод получения информации GOP?

  2. Как определить, имеет ли последовательность открытые GOP или закрытые GOP, то есть ли B-кадрам из одной GOP разрешено ссылаться на кадры I и P в соседней GOP?

ответ

3

Ничего из этого напрямую не экспортируется в ffmpeg, так что вам придется самому разобраться в этом. Поэтому короткий ответ за 1 - «нет». Если вы разбираете кадры (их не нужно декодировать) и получить тип фрейма, вы должны иметь возможность идентифицировать местоположение в файле (смещение в байтах) в AVPacket.pos. Для каждого I-кадра в последовательности найдите пакеты поиска после него и отметьте AVPacket. pos и AVPacket. pts. Если B (pos)> I (pos), но B (pts) < I (pts), у вас есть открытая GOP, иначе закрытая GOP. Если вы хотите быть более точным, найдите способ экспортировать POC из анализатора h264, который прямо пропорционален метке времени.

Цикл разбора будет только av_read_frame().

+0

Спасибо. Можете ли вы объяснить, почему существует открытая GOP, если B (pos)> I (pos), но B (pts) chronosynclastic

+0

PTS = POC. Если у вас есть кадр, который (в порядке потока бит/кодирования) после I-кадра, но перед ним имеет POC/pts, он почти повсеместно означает, что он использует это как ссылку и, таким образом, открывает GOP. Официальный способ подтвердить, что это разобрать список ссылок из заголовков и убедиться, что я в списке для B, но я сомневаюсь, что вы хотите пойти так далеко (если это не академический характер). –

 Смежные вопросы

  • Нет связанных вопросов^_^