Я хочу отметить видео как явно bt.601, а не "не указано". Я знаю, что игроки обычно выбирают bt.601 по умолчанию для видео с шириной менее 1280 пикселей, но я хочу прямо указать, что bt.601 - это правильная цветовая матрица для видео.
bt601
Камнем преткновения является то, что для ffmpeg или libx264 нет опции, только bt709 и некоторые другие.
У меня есть несколько видео, которые были уменьшены с HD, и все еще находятся в бт.709, но не помечены должным образом. Поэтому, когда я смотрю видео, мне иногда приходится вручную переключать плеер на bt.709 . Явная пометка как bt.601 сообщит будущим зрителям (например, мне), что это определенно bt 601, а не ошибочно помеченное видео bt.709, когда я смотрю на него mediainfo
.
Другим вариантом использования для этого может быть увеличение масштаба видео с bt 601 до 1280 или выше без преобразования (с использованием -vf colormatrix
) цветовой матрицы, игроки неверно примут bt 709, если вы не указали информацию о цвете.
colormatrix
Видеофильтр FFMpeg поддерживает bt601
цветовую матрицу ввода или вывода, но также не устанавливает теги. (Поскольку у него нет побочного эффекта при настройке параметров цвета в ffmpeg, он отказывается даже работать с src и dest так же, как -vf colormatrix=bt601:bt601
.)
ffmpg in -color_primaries bt709 -color_trc bt709 -colorspace bt709 out
пометит выходное видео как использование bt.709 для yuv <-> rgb. Теги оказываются внутри самого потока битов видео, а не только в контейнере (поскольку это, по-видимому, относится к конкретным кодекам, а не к контейнерам, по крайней мере для контейнеров mp4 и mkv).
например, mediainfo
вывод:
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 легко помечать. Проблема в том, что я не вижу bt.601 нигде. Является ли одно из других имен псевдонимом для него или нет способа указать его явно?
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
показывает тот же набор параметров для своих параметров цвета, который -c:v libx264
видеокодек ffmpeg передает x264. Является ли какой-либо из них псевдонимом для bt.601 или имеет численно эквивалентную цветовую матрицу?
источник
-color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m
).Ответы:
PAL и NTSC имеют разные цветовые праймериз, поэтому
NTSC = SMPTE 170M = BT 601 525
PAL = BT 470 BG = BT 601 625
См. Строки для значений 5 и 6 в таблице на странице 387 активного стандарта H.264 .
Итак, правильные аргументы для ffmpeg:
NTSC:
PAL:
-color_trc
не принимаетbt470bg
, ноffmpeg -h full
показывает, чтоgamma28
означает «BT.470 BG» для этой опции.-colorspace
это самый важный вариант; другие не делают видимой разницы для программных плееров, какmpv
на Linux.источник