Превращаем SDR монитор в псевдо-HDR в видеоплеере mpv
В этом посте разбираемся, как заставить обычный (но яркий) 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
На этом всё, спасибо, что прочитали!