В этом посте разбираемся, как заставить обычный (но яркий) 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
На этом всё, спасибо, что прочитали!
Комментарии (13)
AlB80
29.10.2023 15:27Что-то я плохо понимаю пользу действия.
HDR мониторы имеют не только шире динамический диапазон, но и большую разрядность для передачи полутонов в этом широком диапазоне. Соответственно, из простых способов конвертации в SDR есть только два варианта:
Обрезание динамического диапазона. Надо смириться с насыщением яркости и потерей деталей в ярких и тёмных местах.
Сжатие динамического диапазона. Вся картинка станет блеклой, потеря контраста. И так почти всегда и везде.
Имхо, правильный только первый. Второе сойдёт для специальных постановочных фоток.
зы. Опять же имхо, HDR надоедает своей яркостью. Все уже привыкли, что звук со всех источников и на всех каналах нормализован по громкости. Даже в рекламе. Это сделано чтобы не раздражать слишком громкими звуками. Вот с этими яркими картинками такая же история.
Zara6502
29.10.2023 15:27Все уже привыкли, что звук со всех источников и на всех каналах нормализован по громкости
Это где так? Я с пультом буквально живу, то громче то тише и так без конца, редкий контент правильно сделан по звуку.
Опять же имхо, HDR надоедает своей яркостью
Мне кажется с современным HDR проблема такая же как и со становлением шейдеров в видеокартах и началом эры 3D - пихают везде и всюду и при этом просто не умеют пользоваться самой технологией. Я пересмотрел много HDR контента и специальных HDR роликов и по сути, хороший HDR и качественный изначально SDR не будут сильно отличаться (отличия будут но для определенных сцен, то есть по сути правильно выставленный свет у контента и качественная аппаратура для съемки совсем не требует HDR как такового).
gfx_pro Автор
29.10.2023 15:27Сжатие динамического диапазона. Вся картинка станет блеклой, потеря контраста. И так почти всегда и везде.
Можно сжать только света до необходимого верхнего уровня, а остальное (в диапазоне воспроизводимой монитором яркости) показать "как есть". В этом посте как раз указан способ увеличения того самого верхнего уровня
r3dfx
29.10.2023 15:27А зачем подобное вообще нужно если есть madVR? Там и графический интерфейс и возможностей настроек больше, в т.ч. 3dlut и прочих калибровок
Сам игрался таким на IPS, пусть даже и профессиональном, NEC PA301. Ужасно, даже на 180нит черный как серая масса, особенно заметно в темноте (где обычно фильмы и смотрят). Любая backlit/edgelit неорганика неспособна в нормальный HDR без local dimming ну или на крайняк управления всей подсветкой сразу. Уровни черного не позволяют что либо увидеть в темных местах, потому что их тупо нет)
gfx_pro Автор
29.10.2023 15:27А зачем подобное вообще нужно если есть madVR?
madVR нет на Linux и macOS, у него закрытый исходный код
возможностей настроек больше, в т.ч. 3dlut и прочих калибровок
mpv может подгружать профиль монитора или 3DLUT для применения к видео
На счёт остального, тут суть не добиться уровня HDR OLED дисплея, а улучшить картинку по сравнению с обычной, что, на мой взгляд, получается (как минимум, если дисплей не тусклее 400 нит)
Zara6502
Вопрос - а что это даёт? Пока я вижу что полностью пропали все детали фильма, всё темное.
Это "HDR":
Hidden text
Это SDR:
Hidden text
Ну или так более заметно:
И я предпочту SDR вариант, я же кино смотрю чтобы видеть изображение, а не приглядываться к темноте. Да самоя суть HDR - high dynamic range, то есть по сути некоторая форма нормализации изображения, когда яркое темнее, а темное светлее.
gfx_pro Автор
Вам нужно сравнить картинку слева на полной (и указанной) яркости монитора с картинкой справа на яркости 100-200 нит - слева, например, света будут действительно светиться Дополнено: кроме того, сработает только если видео HDR, или конвертируется в HDR с помощью
inverse-tone-mapping
Zara6502
то есть для просмотра этого контента мне нужно будет купить отдельный SDR монитор/ТВ и настроить его под этот контент? Это очень странный способ обхода ограничений SDR, тогда у проще купить HDR ТВ. Или я опять чо-то не понимаю?
то есть онлайн просмотр отпадает? это уже убивает 80% смысла всей суеты.
gfx_pro Автор
Не обязательно - можно просто один раз указать максимальную яркость и поднимать её до такого значения каждый раз перед просмотром фильма (а после опускать до нормальной)
mpv может проигрывать онлайн-стримы и даже YouTube через yt-dlp - для второго укажите
script-opts=ytdl_hook-ytdl_path=/path/to/yt-dlp
Zara6502
меня регулировка громкости задалбывает, а вы хотите чтобы я еще и с яркостью игрался?
я это знаю, просто как это коррелирует с необходимостью конвертации контента?
gfx_pro Автор
Конвертация через
inverse-tone-mapping
работает и для онлайн видео. Кроме того, можно запускать HDR стримы с YouTube