Превращаем SDR монитор в псевдо-HDR в видеоплеере mpv

599985857ae5f2728f07d37286bcbf42

В этом посте разбираемся, как заставить обычный (но яркий) SDR монитор показывать HDR видео с максимальным сохранением широкого диапазона яркости и цвета

Установка

Подойдёт как последняя на данный момент стабильная версия mpv (0.36), так и nightly/git сборки. Я рекомендую использовать вторые, так как в них есть последние исправления и улучшения для HDR видео, а также некоторые новые параметры конфигурации, которые могут Вам понадобиться.

Вот официальная страница установки. Для Windows рекомендую ставить git-сборки от shinchiro (x64, x64 v3), для macOS установить из Homebrew, а для Linux взять из Вашего репозитория. Если Вы сами компилируете приложение с Git, не забудьте до этого поставить библиотеку libplacebo, открывающую доступ к новым алгоритмам внутри плеера. Например, на Arch Linux можно сначала установить libplacebo-git, а затем mpv-git из AUR.

Настройка

В mpv параметры можно применять двумя путями — через консольные аргументы при запуске, либо же через файл конфигурации mpv.conf. Второй способ более удобен, так как позволяет легко сохранять настройки. Сам файл необходимо создать по следующему пути:

Windows:

%appdata%\mpv\mpv.conf

macOS/Linux:

~/.config/mpv/mpv.conf

У плеера очень подробное руководство пользования с описание всех параметров, но в этом посте я ограничусь лишь теми, что необходимы для нашей задачи. В то же время, я очень рекомендую прочитать это руководство для дальнейшей самостоятельной настройки.

По умолчанию mpv считает, что у нас обычный SDR монитор с яркостью в 203 нита. Если у Вашего монитора более высокие характеристики, их можно указать в файле конфигурации, который mpv автоматически применит при следующем запуске.

Яркость монитора, основная настройка для псевдо-HDR режима. Здесь 400 нит — не забудьте перед просмотром поднять яркость до этого уроня:

target-peak=400

Контрастность монитора. Здесь 1000:1 — это значение будет использоваться для компенсации точки чёрного:

target-contrast=1000

Передающая кривая (гамма) монитора. Здесь sRGB:

target-trc=srgb

Цветовой охват монитора. mpv может использовать весь цветовой охват при конвертации HDR видео, что полезно, если у Вас, например, профессиональный монитор с охватом AdobeRGB. Здесь Rec. 709/sRGB:

target-prim=bt.709

Можно поставить на Adobe RGB или DCI-P3:

target-prim=adobe

target-prim=dci-p3

Параметрами выше мы указали, какой у нас дисплей. Теперь давайте укажем настройки конвертации HDR видео в наш псевдо-HDR.

Во-первых, укажем драйвер вывода. Я рекомендую использовать gpu-next, так как в нём доступны последние исправления и улучшения, а также некоторые новые настройки:

vo=gpu-next

Если приложение было скомпилировано без libplacebo, придётся ограничиться стандартным драйвером:

vo=gpu

Включим аппаратное декодирование видео:

hwdec=auto

Укажем оператор тонмэппинга для конвертации:

tone-mapping=mobius

Этот оператор нравится мне больше всего, так как максимально сохраняет информацию внутри диапазона яркости дисплея, и он же является рекомендацией разработчиков для такого случая, как у нас.

В качестве альтернативы можно попробовать

tone-mapping=spline

tone-mapping=bt.2446a

Оба доступны только в gpu-next, но могут превращать SDR контент в (псевдо-)HDR с помощью опцииinverse-tone-mapping

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

Получившийся mpv.conf (пример)

vo=gpu

hwdec=auto

target-peak=400

target-contrast=1000

target-trc=srgb

target-prim=bt.709

tone-mapping=mobius

На этом всё, спасибо, что прочитали!

© Habrahabr.ru