В этом посте разбираемся, как заставить обычный (но яркий) 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)


  1. Zara6502
    29.10.2023 15:27
    +2

    Вопрос - а что это даёт? Пока я вижу что полностью пропали все детали фильма, всё темное.

    Это "HDR":

    Hidden text

    Это SDR:

    Hidden text

    Ну или так более заметно:

    И я предпочту SDR вариант, я же кино смотрю чтобы видеть изображение, а не приглядываться к темноте. Да самоя суть HDR - high dynamic range, то есть по сути некоторая форма нормализации изображения, когда яркое темнее, а темное светлее.


    1. gfx_pro Автор
      29.10.2023 15:27
      +3

      Вам нужно сравнить картинку слева на полной (и указанной) яркости монитора с картинкой справа на яркости 100-200 нит - слева, например, света будут действительно светиться Дополнено: кроме того, сработает только если видео HDR, или конвертируется в HDR с помощью inverse-tone-mapping


      1. Zara6502
        29.10.2023 15:27

        то есть для просмотра этого контента мне нужно будет купить отдельный SDR монитор/ТВ и настроить его под этот контент? Это очень странный способ обхода ограничений SDR, тогда у проще купить HDR ТВ. Или я опять чо-то не понимаю?

        кроме того, сработает только если видео HDR, или конвертируется в HDR с помощью inverse-tone-mapping

        то есть онлайн просмотр отпадает? это уже убивает 80% смысла всей суеты.


        1. gfx_pro Автор
          29.10.2023 15:27

          то есть для просмотра этого контента мне нужно будет купить отдельный SDR монитор/ТВ и настроить его под этот контент?

          Не обязательно - можно просто один раз указать максимальную яркость и поднимать её до такого значения каждый раз перед просмотром фильма (а после опускать до нормальной)

          то есть онлайн просмотр отпадает?

          mpv может проигрывать онлайн-стримы и даже YouTube через yt-dlp - для второго укажите script-opts=ytdl_hook-ytdl_path=/path/to/yt-dlp


          1. Zara6502
            29.10.2023 15:27

            Не обязательно - можно просто один раз указать максимальную яркость и поднимать её до такого значения каждый раз перед просмотром фильма (а после опускать до нормальной)

            меня регулировка громкости задалбывает, а вы хотите чтобы я еще и с яркостью игрался?

            mpv может проигрывать онлайн-стримы и даже YouTube через yt-dlp

            я это знаю, просто как это коррелирует с необходимостью конвертации контента?


            1. gfx_pro Автор
              29.10.2023 15:27

              я это знаю, просто как это коррелирует с необходимостью конвертации контента?

              Конвертация через inverse-tone-mapping работает и для онлайн видео. Кроме того, можно запускать HDR стримы с YouTube


  1. AlB80
    29.10.2023 15:27

    Что-то я плохо понимаю пользу действия.

    HDR мониторы имеют не только шире динамический диапазон, но и большую разрядность для передачи полутонов в этом широком диапазоне. Соответственно, из простых способов конвертации в SDR есть только два варианта:

    1. Обрезание динамического диапазона. Надо смириться с насыщением яркости и потерей деталей в ярких и тёмных местах.

    2. Сжатие динамического диапазона. Вся картинка станет блеклой, потеря контраста. И так почти всегда и везде.

    Имхо, правильный только первый. Второе сойдёт для специальных постановочных фоток.

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


    1. Zara6502
      29.10.2023 15:27

      Все уже привыкли, что звук со всех источников и на всех каналах нормализован по громкости

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

      Опять же имхо, HDR надоедает своей яркостью

      Мне кажется с современным HDR проблема такая же как и со становлением шейдеров в видеокартах и началом эры 3D - пихают везде и всюду и при этом просто не умеют пользоваться самой технологией. Я пересмотрел много HDR контента и специальных HDR роликов и по сути, хороший HDR и качественный изначально SDR не будут сильно отличаться (отличия будут но для определенных сцен, то есть по сути правильно выставленный свет у контента и качественная аппаратура для съемки совсем не требует HDR как такового).


    1. gfx_pro Автор
      29.10.2023 15:27

      Сжатие динамического диапазона. Вся картинка станет блеклой, потеря контраста. И так почти всегда и везде.

      Можно сжать только света до необходимого верхнего уровня, а остальное (в диапазоне воспроизводимой монитором яркости) показать "как есть". В этом посте как раз указан способ увеличения того самого верхнего уровня


  1. Nishi
    29.10.2023 15:27

    а в Dolby Vision он умеет?


    1. gfx_pro Автор
      29.10.2023 15:27

      Насколько я знаю, поддержка пока только у Nightly сборок, но у Dolby Vision есть разные профили, как минимум один основан на HLG, и с ним проблем не будет даже в стабильной версии


  1. r3dfx
    29.10.2023 15:27

    А зачем подобное вообще нужно если есть madVR? Там и графический интерфейс и возможностей настроек больше, в т.ч. 3dlut и прочих калибровок

    Сам игрался таким на IPS, пусть даже и профессиональном, NEC PA301. Ужасно, даже на 180нит черный как серая масса, особенно заметно в темноте (где обычно фильмы и смотрят). Любая backlit/edgelit неорганика неспособна в нормальный HDR без local dimming ну или на крайняк управления всей подсветкой сразу. Уровни черного не позволяют что либо увидеть в темных местах, потому что их тупо нет)


    1. gfx_pro Автор
      29.10.2023 15:27

      А зачем подобное вообще нужно если есть madVR?

      madVR нет на Linux и macOS, у него закрытый исходный код

      возможностей настроек больше, в т.ч. 3dlut и прочих калибровок

      mpv может подгружать профиль монитора или 3DLUT для применения к видео

      На счёт остального, тут суть не добиться уровня HDR OLED дисплея, а улучшить картинку по сравнению с обычной, что, на мой взгляд, получается (как минимум, если дисплей не тусклее 400 нит)