Как извлечь типы кадров вместе с векторами движения с помощью extract_mvs.c из ffmpeg

Я искал способы получить типы кадров (I, P, B) вместе с данными вектора движения, возвращаемыми из extract_mvs.c в папке примеров в ffmpeg.

Файл extract_mvs.c после компиляции возвращает следующую информацию:

framenum,source,blockw,blockh,srcx,srcy,dstx,dsty,flags
2,-1,16,16,   8,   8,   8,   8,0x0
2, 1,16,16,   8,   8,   8,   8,0x0
2, 1,16,16,  24,   8,  24,   8,0x0
2, 1,16,16,  40,   8,  40,   8,0x0
2, 1,16,16,  56,   8,  56,   8,0x0
2, 1,16,16,  72,   8,  72,   8,0x0
2, 1,16,16,  88,   8,  88,   8,0x0
...
297, 1,16,16, 248, 280, 248, 280,0x0
297, 1,16,16, 264, 280, 264, 280,0x0
297,-1,16,16, 278, 279, 280, 280,0x0
297, 1,16,16, 280, 280, 280, 280,0x0
297, 1,16,16, 296, 280, 296, 280,0x0
297, 1,16,16, 312, 280, 312, 280,0x0
297, 1,16,16, 328, 280, 328, 280,0x0
297, 1,16,16, 344, 280, 344, 280,0x0

Наряду с этой информацией я хотел бы вывести тип кадра, чтобы я знал, что framenum = 2 — это, например, кадр «B».

Я пробовал разные вещи, одна из которых использовала отдельную команду:

ffprobe input.mp4 -show_frames | grep -E 'pict_type|coded_picture_number'

Но проблема с этой командой в том, что она возвращает такие данные, как:

pict_type=I
coded_picture_number=0
pict_type=B
coded_picture_number=2
pict_type=P
coded_picture_number=1
pict_type=B
coded_picture_number=4
pict_type=P
coded_picture_number=3
....
pict_type=P
coded_picture_number=293
pict_type=B
coded_picture_number=297
pict_type=B
coded_picture_number=296

И здесь мало что можно связать между coded_picture_number и framenum. Первый начинает отсчет с 0, а второй — с 2. Я предполагаю, что номер кадра начинается с 2, это означает, что счет этой переменной на самом деле начинается с 1, и он игнорировал 1 в процессе извлечения, поскольку это, возможно, I-кадр, поэтому нет векторов движения.

Итак, как мы можем использовать только extract_mvs.c, чтобы получить не только ту информацию, которую он предоставляет, но и типы фреймов в возвращаемой таблице. Будем признательны за любые подсказки по синтаксису/командам или при редактировании файла c. Заранее спасибо.


person tavalendo    schedule 13.02.2018    source источник


Ответы (1)


Я нашел способ получить кадры, разместил по этому вопросу, где я заменил аргумент flags на frametypes.

person tavalendo    schedule 26.02.2018