Je veux marquer la vidéo comme explicitement bt.601, plutôt que "non spécifié". Je sais que les joueurs choisissent généralement bt.601 comme valeur par défaut pour les vidéos de moins de 1280 pixels de large, mais je tiens à préciser que bt.601 est la matrice de couleurs correcte pour une vidéo.
Le problème est qu'il n'y a pas d' bt601
option pour ffmpeg ou libx264, seulement bt709 et quelques autres.
J'ai des vidéos qui ont été réduites de la HD et qui sont toujours en bt.709, mais qui ne sont pas correctement marquées. Donc, lorsque je regarde une vidéo, je dois parfois basculer manuellement mon lecteur sur bt.709 . Marquer explicitement comme bt.601 communiquera aux futurs téléspectateurs (par exemple moi-même) que c'est définitivement bt.601, et pas une vidéo bt.709 mal étiquetée, quand je la regarde avec mediainfo
.
Un autre cas d'utilisation serait que si vous convertissiez une vidéo bt.601 en 1280 ou plus sans faire une conversion colormatrix (en utilisant -vf colormatrix
), les joueurs supposeraient à tort bt.709 si vous laissiez les informations de couleur non spécifiées.
Le colormatrix
filtre vidéo de FFMpeg prend en charge bt601
une matrice de couleurs d'entrée ou de sortie, mais ne définit pas également de balises. (Comme il n'a pas pour effet secondaire de définir les options de couleur de ffmpeg, il refuse même de fonctionner avec src et dest de la même manière -vf colormatrix=bt601:bt601
.)
ffmpg in -color_primaries bt709 -color_trc bt709 -colorspace bt709 out
marquera la vidéo de sortie comme utilisant bt.709 pour yuv <-> rgb. Les balises se retrouvent à l'intérieur du flux vidéo lui-même, pas seulement dans le conteneur (car cela semble être une chose spécifique au codec, pas une chose de conteneur, pour les conteneurs mp4 et mkv au moins).
par exemple mediainfo
sortie:
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
Donc bt.709 est facile à étiqueter. Le problème est que je ne vois bt.601 nulle part. L'un des autres noms est-il un alias ou n'y a-t-il vraiment aucun moyen de le spécifier explicitement?
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
montre le même ensemble d'options pour ses options de couleur, que le -c:v libx264
codec vidéo de ffmpeg transmet à x264. L'un d'entre eux est-il un alias pour bt.601, ou a-t-il une matrice de couleurs numériquement équivalente?
la source
-color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m
).Réponses:
PAL et NTSC ont des couleurs primaires différentes, donc
NTSC = SMPTE 170M = BT 601525
PAL = BT 470 BG = BT 601 625
Voir les lignes pour les valeurs 5 et 6 dans le tableau à la page 387 de la norme H.264 active .
Les bons arguments pour ffmpeg sont donc:
NTSC:
COPAIN:
-color_trc
n'accepte pasbt470bg
, maisffmpeg -h full
montre que celagamma28
signifie "BT.470 BG" pour cette option.-colorspace
est l'option la plus importante; les autres ne font pas de différence visible pour les joueurs commempv
sur Linux.la source