Ich möchte Videos als explizit bt.601 und nicht als "nicht spezifiziert" kennzeichnen. Ich weiß, dass Spieler normalerweise bt.601 als Standard für Videos mit einer Breite von weniger als 1280 Pixel auswählen, aber ich möchte deutlich machen, dass bt.601 die richtige Farbmatrix für ein Video ist.
Der Knackpunkt ist, dass es keine bt601
Option für ffmpeg oder libx264 gibt, nur für bt709 und einige andere.
Ich habe einige Videos, die von HD verkleinert wurden und sich noch in BT7070 befinden, aber nicht richtig markiert sind. Wenn ich mir ein Video ansehe , muss ich meinen Player manchmal manuell auf BT7070 umschalten . Das explizite Markieren als bt.601 wird zukünftigen Zuschauern (z. B. mir selbst) mitteilen, dass es sich definitiv um bt.601 handelt und nicht um ein falsch getaggtes bt.709-Video, wenn ich es mir ansehe mediainfo
.
Ein weiterer Anwendungsfall hierfür wäre, wenn Sie ein bt.601-Video auf 1280 oder höher hochskaliert hätten, ohne eine Colormatrix-Konvertierung (mit -vf colormatrix
) durchzuführen. Spieler würden bt.709 fälschlicherweise annehmen, wenn Sie die Farbinformationen nicht spezifiziert hätten.
Der colormatrix
Videofilter von FFMpeg unterstützt zwar bt601
eine Eingabe- oder Ausgabefarbmatrix, setzt jedoch keine Tags. (Da es nicht den Nebeneffekt hat, die Farboptionen von ffmpeg einzustellen, weigert es sich, überhaupt mit src zu arbeiten und dasselbe zu destieren, wie z -vf colormatrix=bt601:bt601
. B. )
ffmpg in -color_primaries bt709 -color_trc bt709 -colorspace bt709 out
markiert das ausgegebene Video mit bt.709 für yuv <-> rgb. Die Tags landen im Video-Bitstream selbst, nicht nur im Container (da dies eine Codec-spezifische Sache zu sein scheint, keine Containersache, zumindest für MP4- und MKV-Container).
zB mediainfo
Ausgabe:
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
Bt.709 ist also einfach zu markieren. Das Problem ist, ich sehe bt.601 nirgendwo. Ist einer der anderen Namen ein Alias dafür oder gibt es wirklich keine Möglichkeit, ihn explizit anzugeben?
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
zeigt die gleichen Optionen für die Farboptionen, die der -c:v libx264
Videocodec von ffmpeg an x264 weitergibt. Ist einer von diesen ein Alias für bt.601 oder hat er eine numerisch äquivalente Farbmatrix?
quelle
-color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m
. B. NTSC ).Antworten:
PAL und NTSC haben also unterschiedliche Farbprimäre
NTSC = SMPTE 170M = BT 601 525
PAL = BT 470 BG = BT 601 625
Siehe die Zeilen für die Werte 5 und 6 in der Tabelle auf Seite 387 des aktiven H.264- Standards .
Die richtigen Argumente für ffmpeg sind also:
NTSC:
KUMPEL:
-color_trc
akzeptiert nichtbt470bg
,ffmpeg -h full
zeigt aber , dassgamma28
dies "BT.470 BG" für diese Option bedeutet.-colorspace
ist die wichtigste Option; Die anderen machen für Software-Player wiempv
unter Linux keinen sichtbaren Unterschied .quelle