Quero marcar o vídeo como explicitamente bt.601, em vez de "não especificado". Sei que os players geralmente escolhem o bt.601 como o padrão para vídeos com menos de 1280 pixels de largura, mas quero deixar explícito que o bt.601 é a matriz de cores correta para um vídeo.
O ponto de discórdia é que não há bt601opção para ffmpeg ou libx264, apenas bt709 e algumas outras.
Tenho alguns vídeos que foram reduzidos em HD e ainda estão no bt.709, mas não estão marcados corretamente. Então, quando assisto a um vídeo, às vezes tenho que alternar manualmente meu player para bt.709 . Etiquetar explicitamente como bt.601 comunicará aos futuros espectadores (por exemplo, a mim mesmo) que é definitivamente o bt.601, e não um vídeo bt.709 com etiqueta incorreta, quando olhar para ele mediainfo.
Outro caso de uso para isso seria se você escalasse um vídeo bt.601 para 1280 ou superior sem fazer uma conversão de -vf colormatrixmatriz de cores (usando ), os jogadores assumiriam incorretamente o bt.709 se você deixasse as informações de cores não especificadas.
O colormatrixfiltro de vídeo do FFMpeg é compatível bt601com uma matriz de cores de entrada ou saída, mas também não define tags. (Como não tem o efeito colateral de definir as opções de cores do ffmpeg, ele se recusa a operar com src e a destar o mesmo, por exemplo -vf colormatrix=bt601:bt601).
ffmpg in -color_primaries bt709 -color_trc bt709 -colorspace bt709 out
marcará o vídeo de saída como usando bt.709 para yuv <-> rgb. As tags acabam dentro do próprio fluxo de bits de vídeo, não apenas no contêiner (já que isso parece ser algo específico de codec, e não contêiner, para contêineres mp4 e mkv).
por exemplo, mediainfosaída:
Complete name : out.mkv
...
Writing application : Lavf57.14.100
Writing library : Lavf57.14.100
Video
ID : 1
Format : AVC
...
Writing library : x264 core 148 r2638+4 afcf21c
Encoding settings : cabac=1 / ref=8 / ...
Language : English
Default : Yes
Forced : No
Color primaries : BT.709
Transfer characteristics : BT.709
Matrix coefficients : BT.709
Portanto, o bt.709 é fácil de etiquetar. O problema é que não vejo o bt.601 em lugar nenhum. Um dos outros nomes é um alias para ele ou não há realmente nenhuma maneira de especificá-lo explicitamente?
x264 --fullhelp output:
--colorprim <string> Specify color primaries ["undef"]
- undef, bt709, bt470m, bt470bg, smpte170m,
smpte240m, film, bt2020
--transfer <string> Specify transfer characteristics ["undef"]
- undef, bt709, bt470m, bt470bg, smpte170m,
smpte240m, linear, log100, log316,
iec61966-2-4, bt1361e, iec61966-2-1,
bt2020-10, bt2020-12
--colormatrix <string> Specify color matrix setting ["???"]
- undef, bt709, fcc, bt470bg, smpte170m,
smpte240m, GBR, YCgCo, bt2020nc, bt2020c
ffmpeg -h full mostra o mesmo conjunto de opções para suas opções de cores, que o -c:v libx264codec de vídeo do ffmpeg passa para x264. Algum desses nomes é alternativo para bt.601 ou possui uma matriz de cores numericamente equivalente?
-color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m).