Имеет ли значение выборка chroma_location при 4:2:0?

Вопрос или проблема

Я правильно понял? В 4:2:0 левая половина 4×2 прямоугольника имеет ту же хрому, так что не имеет значения, какой тип хрома-субсемплинга будет использоваться?

ffmpeg7, кажется, по умолчанию использует chroma_location=topleft, т.е. Chroma Subsampling Type 2 с PAL .dv входом:

0 left, 1 center, 2 topleft, 3 top, 4 bottomleft, 5 bottom, auto дает 2 с .dv входом, пусто неопределенно.

С другой стороны, с входом 4:1:1 разве chroma_location topleft не то же самое, что top, а другие chroma_location образцы различных хром, или выбирают среднее значение двух хром, верно?

PAL .dv, похоже, 4:2:0, а NTSC .dv 4:1:1.

https://en.wikipedia.org/wiki/Chroma_subsampling

https://www.researchgate.net/figure/Figure-E2-Location-of-the-top-left-chroma-sample-when-chroma-format-idc-is-equal-to-1_fig1_327253648

Например, я использовал следующую команду для конвертации 4:3 PAL .dv в .mp4. Установка chroma_location в любое значение, кажется, не имеет значения.

Кажется, ffmpeg автоматически определяет chroma_location на входе, так что пользователю нужно вмешаться только в случае ошибки? И к тому же, с PAL 4:2:0 на входе и .mp4 4:2:0 на выходе это не имеет значения? Так что, возможно, я могу опустить chroma_location из команд ниже, по крайней мере для PAL:

ffmpeg7 -i 4_3_PAL.dv -vf bwdif=1,scale=788:576,crop=768:576:10:0,setsar=sar=1/1,setparams=range=limited:color_primaries=bt470bg:color_trc=bt709:colorspace=smpte170m:chroma_location=topleft -c:v libx265 -crf 18 -preset slow -pix_fmt yuv420p10le -profile:v main10 -timecode 00:00:00:00 -tag:v hvc1 -c:a aac -b:a 128k 4_3_PAL_dv_to_10bit_limited_5-1-6.mp4 

Который среди всех дает более глубокие красные, чем по умолчанию с неотмеченными цветами:

Chroma subsampling : 4:2:0 (Type 2) Глубина бит : 10 бит Диапазон цвета : Ограниченный Основные цвета : BT.601 PAL Характеристики передачи : BT.709 Коэффициенты матрицы : BT.601 

Похожая команда для 4:3 NTSC .dv, где chroma_location в 4:1:1 .dv может иметь значение?

ffmpeg7 -i 4_3_NTSC.dv -vf bwdif=1,scale=648:480,crop=640:480:4:0,setsar=sar=1/1,setparams=range=limited:color_primaries=smpte170m:color_trc=bt709:colorspace=smpte170m:chroma_location=topleft -c:v libx265 -crf 18 -preset slow -pix_fmt yuv420p10le -profile:v main10 -timecode '00:00:00;00' -tag:v hvc1 -c:a aac -b:a 128k 4_3_NTSC_dv_to_10bit_limited_6-1-6.mp4 

ffmpeg4, кажется, не поддерживает установку chroma_location, по крайней мере, таким образом.

Несколько лет назад я использовал похожую команду для PAL .dv, но тогда для 8-бит без цветовых атрибутов и диапазона (что по умолчанию ограничено). Я рассматривал возможность перекодировки, но кажется, что просто добавление цвета может сработать без потерь без перекодировки с командой ниже? (hvc1 и временной код также могут быть добавлены, но, конечно, 8-бит должен быть перекодирован в 10-бит). Также установка диапазона на полный/ограниченный, кажется, работает позже, но я не уверен, что это действительно работает:

ffmpeg -i input.mp4 -c copy -color_range 1 -color_primaries:v bt470bg -color_trc:v bt709 -colorspace:v smpte170m -timecode 00:00:00:00 -tag:v hvc1 output.mp4 

Позиция хрома-образца в целом имеет значение, потому что при увеличении и уменьшении масштабов скейлер должен знать, к какому и от какого местоположения изменять масштаб. Это, если не используется масштабирование ближайшего соседа (точечная выборка). Доступные позиции образцов перемещаются только по полю 4×2 для 4:1:0 (четверть горизонтального и половина вертикального разрешения) хром-выборки, 2×2 пиксельное окно для обычного 4:2:0 (половина горизонтальная, половина вертикальная) выборка и 2×1 пиксельное окно для 4:2:2.

scale по умолчанию использует бикубическое масштабирование, которое включает хром-маcштабирование, zscale по умолчанию использует билинейное.

FFmpeg действительно может читать теги источника из источников без проблем и также переносит тег на кодировщик.

Ответ или решение

Вопрос о значении позиции хроматической выборки в контексте субдискретизации 4:2:0 является очень актуальным для специалистов, работающих с обработкой видео. Чтобы тщательно разобраться в этом вопросе, рассмотрим теоретические основы, примеры и практическое применение этого процесса в реальной работе.

### Теоретическое обоснование

Хроматическая субдискретизация — это метод уменьшения объема данных для хранения цветовой информации, без существенного влияния на визуальное качество изображения. В субдискретизации 4:2:0 каждый набор из 2×2 пикселей делит одну хроматическую выборку, что снижает разрешение цветовой информации в горизонтальном и вертикальном направлениях наполовину.

Позиция выборки хромы (chroma location) означает, где именно находится выбранная хроматическая точка внутри этого блока. Часто доступны различные варианты положения хромы: topleft (верхний левый), top (верх), bottomleft (нижний левый) и так далее. Это положение может иметь значение при масштабировании видео, так как алгоритм должен знать, какую часть каждого блока использовать для интерполяции новой цветовой информации.

### Пример

Для примера рассмотрим использование ffmpeg для обработки видео с PAL форматом 4:2:0. В комментарии упоминается, что ffmpeg по умолчанию выбирает положение хромы “topleft” для PAL, что часто принято в индустрии. Это связано с тем, что PAL .dv изначально закодирован в формате 4:2:0, и выборка хромы в верхнем левом положении обеспечивает хорошую совместимость с большинством устройств и программного обеспечения.

В отличие от 4:2:0, формат 4:1:1 (например, NTSC .dv) имеет более высокую плотность горизонтальной выборки, что делает позицию выборки более значимой. Например, выборка “topleft” может позволить сохранить цветовые переходы более плавными, в то время как смещение выборки в другое положение может привести к нежелательным артефактам.

### Применение на практике

На практике позиция хроматической выборки может не играть заметной роли, если масштабирование производится алгоритмами, поддерживающими интеллектуальную интерполяцию, такими как трехкубическая (bicubic) интерполяция, используемая в ffmpeg по умолчанию. Это позволяет сгладить потенциальные ошибки в выборке. Однако, если точность и несовместимость цветов имеет критическое значение, например, при профессиональной работе с видео, стоит вручную задавать параметр chroma_location для избегания проблем.

Используя ffmpeg, можно также указать настройки цвета, задав такие параметры, как color_primaries, color_trc и colorspace. Это особенно важно при конвертации форматов, например, из PAL в MP4, где поддерживается только определенный набор цветовых пространств и характеристик передачи.

### Заключение

Подведение итога: позиция выборки хроматической информации может иметь значение при обработке видео, особенно когда требуется высокая точность и цветовая однородность. В большинстве бытовых и онлайн-приложений, где результат не требует идеального с точностью до пикселя цветового соответствия, эта настройка может быть упущена. Однако для профессиональной работы, требующей высокой передачи качества, настройка chroma_location становится критической.

В целом, если ffmpeg автоматически определяет параметр chroma_location и качество вас устраивает, вмешательство не требуется. В противном случае, особенно если вы сталкиваетесь с проблемами в передаче цветов или артефактами в результате переработки видео, настройка должна быть пересмотрена. Аналогично этому, важные параметры конфигурации, такие как bit depth и color range, также должны быть учтены для достижения наилучшего качества финального материала.

Оцените материал
Добавить комментарий

Капча загружается...