Chcę oznaczyć wideo jako jawnie bt.601, a nie „nieokreślony”. Wiem, że gracze zazwyczaj wybierają bt.601 jako domyślny dla filmów o szerokości mniejszej niż 1280 pikseli, ale chcę wyraźnie powiedzieć, że bt.601 jest prawidłową matrycą kolorów dla wideo.
bt601
Kwestią sporną jest to, że nie ma opcji dla ffmpeg lub libx264, tylko bt709 i niektórych innych.
Mam kilka filmów, które zostały zmniejszone do rozdzielczości HD i nadal są w wersji bt.709, ale nie są odpowiednio otagowane. Więc kiedy oglądam film, czasami muszę ręcznie przełączać odtwarzacz na bt.709 . Bezpośrednie oznaczenie jako bt.601 poinformuje przyszłych widzów (np. Mnie), że to zdecydowanie bt.601, a nie źle oznakowane wideo bt.709, kiedy na niego spojrzę mediainfo
.
Innym przykładem użycia może być to, że przeskalowałeś wideo bt.601 do 1280 lub wyższej bez wykonania konwersji colormatrix (przy użyciu -vf colormatrix
), gracze niepoprawnie przyjęliby bt.709, jeśli nie określisz informacji o kolorze.
Filtr colormatrix
wideo FFMpeg obsługuje bt601
matrycę kolorów wejściowych lub wyjściowych, ale nie ustawia także znaczników. (Ponieważ nie ma efektu ubocznego ustawiania opcji kolorów ffmpeg, odmawia nawet działania z src i dest tego samego, jak -vf colormatrix=bt601:bt601
.)
ffmpg in -color_primaries bt709 -color_trc bt709 -colorspace bt709 out
oznaczy wyjściowe wideo jako za pomocą bt.709 dla yuv <-> rgb. Znaczniki kończą się w samym strumieniu bitów wideo, nie tylko w kontenerze (ponieważ wydaje się, że jest to coś specyficznego dla kodeka, a nie kontenera, przynajmniej dla kontenerów mp4 i mkv).
np. mediainfo
wyjście:
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
Więc bt.709 jest łatwy do tagowania. Problem polega na tym, że nigdzie nie widzę bt.601. Czy jedna z innych nazw jest dla niej pseudonimem, czy też naprawdę nie ma sposobu, aby podać to wprost?
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
pokazuje ten sam zestaw opcji dla opcji kolorów, które -c:v libx264
kodek wideo ffmpeg przekazuje na x264. Czy któryś z nich jest aliasem dla bt.601, czy ma numerycznie równoważną matrycę kolorów?
źródło
-color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m
).Odpowiedzi:
PAL i NTSC mają różne kolory podstawowe, więc
NTSC = SMPTE 170 M = BT 601525
PAL = BT 470 BG = BT 601625
Zobacz wiersze dla wartości 5 i 6 w tabeli na stronie 387 aktywnego standardu H.264 .
Tak więc odpowiednie argumenty dla ffmpeg to:
NTSC:
KUMPEL:
-color_trc
nie akceptujebt470bg
, aleffmpeg -h full
pokazuje, żegamma28
oznacza to „BT.470 BG” dla tej opcji.-colorspace
jest najważniejszą opcją; pozostałe nie mają widocznej różnicy dla odtwarzaczy oprogramowania, takich jakmpv
Linux.źródło