ffmpeg: явно тег h.264 як bt.601, а не залишати невизначеним?


12

Я хочу позначити відео як явно bt.601, а не "не вказано". Я знаю, що гравці зазвичай вибирають bt.601 за замовчуванням для відео розміром менше 1280 пікселів, але я хочу зробити це явним, що bt.601 - це правильна кольорова матриця для відео.

Важливим моментом є те, що bt601для ffmpeg або libx264 не існує жодного варіанту, лише bt709 та деякі інші.

У мене є кілька відеороликів, які були зменшені з високої чіткості та зберігаються в bt.709, але вони не позначені належним чином. Тому коли я переглядаю відео, мені іноді доводиться вручну переключати програвач на bt.709 . Явно позначивши тег як bt.601, я повідомляю майбутнім глядачам (наприклад, собі), що це безумовно bt.601, а не неправильне теги bt.709, коли я дивлюся на нього mediainfo.

Іншим випадком використання для цього було б, якщо ви збільшили масштаб відео на bt.601 до 1280 або вище, не роблячи перетворення кольорової матриці (використовуючи -vf colormatrix), програвачі неправильно припустили бт.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, або має чисельно еквівалентну кольорову матрицю?


У мене точно така ж проблема. Ви вирішили використати командний рядок, щоб отримати кадри h264 HD з тегом BT.601?
Каспер

@Casper: так, я прийняв відповідь Мульвія, тому що було достатньо інформації для пошуку правильних варіантів. Я зробив редагування, щоб явно включити правильні параметри (наприклад, NTSC є -color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m).
Пітер Кордес

Відповіді:


12

PAL і NTSC мають різні кольорові праймери, тому

NTSC = SMPTE 170M = BT 601 525

PAL = BT 470 BG = BT 601 625

Дивіться рядки для значень 5 і 6 в таблиці на сторінці 387 діючого стандарту H.264 .


Тож правильні аргументи для ffmpeg такі:

NTSC:

# NTSC
ffmpeg -i input  \
 -colorspace smpte170m -color_primaries smpte170m -color_trc smpte170m

mediainfo:
Color primaries                          : BT.601 NTSC
Transfer characteristics                 : BT.601
Matrix coefficients                      : BT.601

PAL:

-color_trcне приймає bt470bg, але ffmpeg -h fullпоказує, що gamma28означає "BT.470 BG" для цієї опції.

# PAL
ffmpeg -i input  \
 -colorspace bt470bg -color_primaries bt470bg -color_trc gamma28

mediainfo:
Color primaries                          : BT.601 PAL
Transfer characteristics                 : BT.470 System B, BT.470 System G
Matrix coefficients                      : BT.601

-colorspaceє найважливішим варіантом; інші не роблять помітної різниці для програмних плеєрів, як mpvв Linux.


Ну звичайно. Я навіть переглядав сторінку вікіпедії bt601, і не добирався до таблиці з двома рядами. Дерп.
Пітер Кордес

Для тих, хто хоче зробити цю саму настройку за допомогою HandBrake, на вкладці Відео, у вікні редагування додаткових параметрів введіть цей рядок: "colorprim = smpte170m: transfer = smpte170m: colormatrix = smpte170m"
pcunite
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.