После команды -vismv я видел несколько разных значений. Я не могу найти никакого объяснения того, что делает число, и от его изменения - не вижу никакой разницы!

Также я работаю с командой -debug vis_mb_type и могу визуализировать типы блоков. Красный - новый, но что представляют собой зеленый и неокрашенный? Я также видел фиолетовый в некоторых файлах, когда я на I-кадр!

Пример команды для файла MP4:

ffmpeg -debug vis_mb_type -vismv 1 -i inputfile.mp4 -vcodec mjpeg -q:v 0 output.avi

Редактировать: Делая немного больше копать в этом .... Я считаю, что зеленые блоки предсказываются, но не перемещаются, а затем монохромные неокрашенные блоки остаются неизменными из I-кадра. Тем не менее, не могу понять, красный / фиолетовый, хотя!

1 ответ1

3

варианты vismv

Там нет чисел, которые будут переданы -vismv качестве аргументов. Поддерживаются только они:

  • pf - прогнозируемые в прямом направлении MV P-кадров
  • bf - прогнозируемые в прямом направлении MV MV-кадров
  • bb - прогнозируемые в обратном направлении MV B-кадров

Я предполагаю, что если вы используете целые числа, они отображаются на 1, 2 и 3, соответственно.

vis_mb_type

Я просмотрел код и нашел соответствующую часть в mpegvideo.c , начиная со строки 2029. Он преобразует значения COLOR(theta, r) значения U и V из цветового пространства YUV, используя следующую функцию:

#define COLOR(theta, r) \
    u = (int)(128 + r * cos(theta * 3.141592 / 180)); \
    v = (int)(128 + r * sin(theta * 3.141592 / 180));

Вот значения цвета для каждого типа макроблока, включая их значения UV и соответствующий цвет RGB при Y = 128.


  • COLOR(120, 48), UV(104, 169.57), RGB(184, 107, 86)
    Условие: IS_PCM (== MB_TYPE_INTRA_PCM)


  • COLOR(30, 48), UV(169.57, 152), RGB(160, 97, 200)
    Условие: IS_INTRA && IS_ACPRED) || IS_INTRA16x16


  • COLOR(90, 48), UV(128, 176), RGB(193, 94, 128)
    Состояние: IS_INTRA4x4


  • COLOR(150, 48), UV(86.43, 152), RGB(160, 125, 55)
    Состояние: IS_DIRECT


  • COLOR(170, 48), UV(80.73, 136.34), RGB(139, 138, 46)
    Условие: IS_GMC && IS_SKIP


  • COLOR(190, 48), UV(80.73, 119.66), RGB(116, 149, 46)
    Состояние: IS_GMC


  • COLOR(240, 48), UV(104, 86.43), RGB(71, 165, 86)
    Состояние:USES_LIST (mb_type, 1))


  • !USES_LIST(mb_type, 1))
    Состояние:USES_LIST (mb_type, 0))


  • COLOR(0, 48), UV(176, 128), RGB(128, 111, 211)
    Условие: !USES_LIST(mb_type, 0)) - это COLOR(300,48), UV(152, 86.43), RGB(71, 148, 169) поэтому оно может или не может прервать выполнение программы в случае сбоя утверждения.

Я не проверял это, но мне кажется, что это правильно. Информация о переключателях отладки и цветах макроблоков также объясняется в вики FFmpeg.

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