Quiero etiquetar el video como explícitamente bt.601, en lugar de "no especificado". Sé que los jugadores suelen elegir bt.601 como predeterminado para videos de menos de 1280 píxeles de ancho, pero quiero dejar en claro que bt.601 es la matriz de color correcta para un video.
El problema es que no hay bt601
opción para ffmpeg o libx264, solo bt709 y algunos otros.
Tengo algunos videos que se redujeron de HD, y todavía están en bt.709, pero no están etiquetados correctamente. Entonces, cuando veo un video, a veces tengo que alternar manualmente mi reproductor a bt.709 . Etiquetar explícitamente como bt.601 comunicará a los futuros espectadores (por ejemplo, a mí mismo) que definitivamente es bt.601, y no un video bt.709 mal etiquetado, cuando lo miro mediainfo
.
Otro caso de uso para esto sería si elevara un video bt.601 a 1280 o superior sin hacer una conversión de matriz de colores (usando -vf colormatrix
), los jugadores asumirían incorrectamente bt.709 si dejaba la información de color sin especificar.
El colormatrix
filtro de video de FFMpeg es compatible bt601
como una matriz de color de entrada o salida, pero tampoco establece etiquetas. (Como no tiene el efecto secundario de configurar las opciones de color de ffmpeg, se niega incluso a operar con src y dest de la misma manera -vf colormatrix=bt601:bt601
).
ffmpg in -color_primaries bt709 -color_trc bt709 -colorspace bt709 out
etiquetará el video de salida como bt.709 para yuv <-> rgb. Las etiquetas terminan dentro del flujo de bits de video en sí, no solo en el contenedor (ya que esto parece ser una cosa específica del códec, no una cosa de contenedor, para contenedores mp4 y mkv al menos).
por ejemplo, mediainfo
salida:
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
Entonces bt.709 es fácil de etiquetar. El problema es que no veo bt.601 en ningún lado. ¿Es uno de los otros nombres un alias para él, o realmente no hay forma de especificarlo explícitamente?
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
muestra el mismo conjunto de opciones para sus opciones de color, que el -c:v libx264
códec de video de ffmpeg pasa a x264. ¿Alguno de estos es un alias para bt.601 o tiene una matriz de color numéricamente equivalente?
fuente
-color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m
).Respuestas:
PAL y NTSC tienen colores primarios diferentes, así que
NTSC = SMPTE 170M = BT 601525
PAL = BT 470 BG = BT 601 625
Vea las filas para los valores 5 y 6 en la tabla en la página 387 del estándar H.264 activo .
Entonces los argumentos correctos para ffmpeg son:
NTSC:
CAMARADA:
-color_trc
no aceptabt470bg
, peroffmpeg -h full
muestra quegamma28
significa "BT.470 BG" para esa opción.-colorspace
es la opción más importante; los otros no hacen una diferencia visible para los jugadores de software comompv
en Linux.fuente