O que os números e cores representam para -vismv e vis_mb_type no ffmpeg?

0

Após o comando -vismv , vi diversos valores diferentes fornecidos. Não consigo encontrar nenhuma explicação sobre o que o número faz e de mudar isso - não vejo nenhuma diferença!

Além disso, estou trabalhando com o comando -debug vis_mb_type e posso visualizar os tipos de bloco. Vermelho sendo novo, mas o que o verde e o incolor representam? Eu também vi roxo em alguns arquivos quando em um quadro I!

Exemplo de comando em um arquivo MP4:

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

Editar: Fazendo um pouco mais de escavação nisso ... Acredito que os blocos verdes são previstos, mas não movidos e, em seguida, os blocos monocromáticos incolores são inalterados a partir do quadro I. Ainda não consegue descobrir o vermelho / roxo embora!

    
por Spreadys 26.12.2013 / 20:15

1 resposta

3

vismv options

Não há números a serem passados para -vismv como argumentos. Apenas estes são suportados:

  • pf - MVs de previsão antecipada de frames P
  • bf - MVs de previsão antecipada de quadros B
  • bb - MVs atrasados de quadros B

Suponho que, se você usar inteiros, eles serão mapeados para 1, 2 e 3, respectivamente.

vis_mb_type

Analisei o código e encontrei a parte correspondente em mpegvideo.c , a partir da linha 2029. Ela converte os valores COLOR(theta, r) em valores U e V em um Espaço de cor YUV usando a seguinte função:

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

Aqui estão os valores das cores por tipo de macrobloco, incluindo seus valores UV e a cor RGB correspondente em Y = 128 .


  • COLOR(120,48),UV(104,169.57),RGB(184,107,86)
    Condição:IS_PCM(==MB_TYPE_INTRA_PCM)


  • COLOR(30, 48), UV(169.57, 152), RGB(160, 97, 200)
    Condição: IS_INTRA && IS_ACPRED) || IS_INTRA16x16


  • COLOR(90,48),UV(128,176),RGB(193,94,128)
    Condição:IS_INTRA4x4


  • COLOR(150, 48), UV(86.43, 152), RGB(160, 125, 55)
    Condição: IS_DIRECT


  • COLOR(170,48),UV(80.73,136.34),RGB(139,138,46)
    Condição:IS_GMC&&IS_SKIP


  • COLOR(190, 48), UV(80.73, 119.66), RGB(116, 149, 46)
    Condição: IS_GMC


  • COLOR(240,48),UV(104,86.43),RGB(71,165,86)
    Condição:!USES_LIST(mb_type,1))


  • COLOR(0, 48), UV(176, 128), RGB(128, 111, 211)
    Condição: !USES_LIST(mb_type, 0))


  • COLOR(300,48),UV(152,86.43),RGB(71,148,169)
    Condição:USES_LIST(mb_type,0)&&USES_LIST(mb_type,1))-esteéumassert,portantopodeounãoabortaraexecuçãodoprogramaquandoaasserçãofalhar.

Eunãotesteiisso,masparececertoparamim.InformaçõessobreoscomutadoresdedepuraçãoecoresdomacroblocotambémsãoexplicadasnowikidoFFmpeg.

    
por 27.12.2013 / 10:27

Tags