Dolby Vision

Материал из wolfram
Перейти к навигации Перейти к поиску

"Новый формат качества изображения" - почему в кавычках? Ему уже 5 лет. В какой то момент началось противостояние Dolby Vision с HDR10+, в итоге со вторым так и не вышло не одного диска.

В чем особенность всех эти HDR-ов - в том, что управление по яркость ТВ полностью передается видео. В HDR при запуске фильма, файл видео передал требуемы пределы по яркости, цветовому пространству, гамме ТВ. Но наступила эра динамичного HDR. Как раз эти 2 формата упомянутых выше в противостоянии, и занялись этим. Суть динамики в том, что данные для параметров яркости и производных могут меться от кадра к кадру. У Dolby Vision есть инструментарий для ручной творческой настройки. У конкурента же HDR10+, алгоритм автотипический.

Dolby Vision - победил, причин много, но основные: отличная среда для создания контента. Студиям попросту было интересно и удобно с этим работать.


Ну а теперь к фактам. Что мы имеем на данный момент. Появилось 3 основных версии данного стандарта. 5-тый, 7-й и 8-й стандарты.

На ТВ старше 19 года был 5-тый стандарт.

На ТВ после 19 года преимущественно 8-й.

Blu-ray - имеет двухслойный поток 7-й профиль.

Источником всех форматов для ТВ является Blu-ray. Из него уже получают однослойные комбинированные потоки. За 4 года нет прогресса по части работы с данными форматами. Все инструменты совершенно не приветливы, работают из под командной строки.

На данную тему есть 2 русскоязычных форма где обсуждаются темы связанные с Dolby Vision: webos-forums и forum.ixbt.


Стремится мы будем к 8-му профилю, так как большинство новых ТВ с ним работают хорошо, так же немаловажным фактом является совместимость с обычным HDR. То есть даже если ТВ не знает о DV, он интерпретирует его как HDR.

Первый вариант развития событий:

У нас имеется Remux в m2ts, MP4 или MKV с двумя видеопотоками. Для преобразования этого дела в 8-мой профиль потребуется несколько шагов преобразований:

TsMuxer пример распаковки

Распаковка контейнера

Распаковать контейнер удобнее всего в tsMuxer. Скачать утилиту можно на github.

К счастью у данной утилиты есть интерфейс.

Закидываем в Окно нужный нам контейнер,

Отмечаем требуемые треки в списке Tracks.

В Output отмечаем Demux

Указываем место для сохранения.

Готово, далее мы будем иметь дело именно с дорожками в чистом виде в форматах: hevc, dts, ac3, thd, sup.

На выходе мы получаем в нужной папке 2 файла с расширением: hevc или h265.

Переименуем их для удобства восприятия

- Тот что по тяжелее это основной поток BL

BL.hevc

- Более лёгкий это метаданные EL_RPU.

EL_RPU.hevc

Преобразование BL + EL_RPU в BL+RPU

Есть два способа это сделать:

Первый - dovi_tool

Скачать утилиту можно на github.

Исполняемый файл dovi_tool.exe лучше всего разместить в папке с треками.

Запускаем командную строку в этой папке, выполняем действия от имени dovi_tool.exe

Извлекаем RPU из BL+RPU, файл меньшего размера.

.\dovi_tool.exe -m 2 extract-rpu -i .\EL_RPU.hevc -o .\RPU.bin

Вставляем получившийся RPU в BL

.\dovi_tool.exe inject-rpu -i .\BL.hevc --rpu-in .\RPU.bin -o .\BL_RPU.hevc

На выходе мы имеем комбинированный трек BL_RPU.hevc, который несет в себе информацию о файлах BL и RPU (без EL).

Этот файл можно уже укладывать в контейнер MP4.

Второй - Скрипт от какого го человека

Скачиваем файл с облака.

Внутри архива BAT файлы, Запускаем MUX_AND_CONVERT_TO_PROFILE_81.bat.

Командная строка попросит пометить BL.hevc файл в окно, затем нажать ENTER.

Командная строка попросит поместить EL_RPU.hevc файл в окно, затем нажать ENTER.

На выходе в папке с BAT файлами получим файл BL_RPU.hevc

Теперь его так же можно упаковывать в контейнер MP4.


Упаковка в контейнер MP4

Выполняется это при помощи утилиты mp4muxer. Скачать её можно со страницы githab.

Исполняемый файл из папки BIN лучше всего разместить рядом с BL_RPU.hevc.

Выполняем простую команду:

.\mp4muxer.exe -i BL_RPU.hevc --dv-profile 8 --dv-bl-compatible-id 1 -o BL_RPU.mp4

Всё файл запакован в контейнер с 8-мым профилем. Можно даже попробовать его воспроизвести на ТВ, чтобы понять всё ли хорошо.

Теперь можно наполнять контейнер MP4 различными дорожками.


Формирование конечного контейнера

У фильма наверняка есть куча аудио дорожек и субтитров.

Я на момент написания статьи предпочитаю использовать звук в формате ac3 с битрейтом 640. Причин несколько: ТВ не поддерживает DTS, нет оборудования для качественного воспроизведения звука, что не дает возможности услышать разницу, размер.

Поэтому я конвертирую все звуковые дорожки в ac3. Способов много:

- UsEac3To

- XviD4PSP

Описание перекодирования Аудио, это отдельная тема.

Тоже самое касается субтитров. При экспорте из m2ts или MKV, субтитры имеют формат sup. И даже этот формат является контейнером. В любом случае это формат представляет из себя картинки с текстом, нам же нужно преобразовать это в текст. Использовать для этого лучше всего.

- Subtitle Edit

По части оглавления. после экспорта из mkv главы в формате xml, нам нуен oog.txt. Чтобы его конвертировать нам подойдёт:

- chapterEditor

А теперь к самому процессу создания фильма.

Для этого используется утилита mp4box входящая в состав GPAC. Скачать его можно с официального сайта.

Команда выглядит так:

.\mp4box.exe -add BL_RPU.hevc:fps=23.976:dvp=8.hdr10:hdr=none -add audio1.ac3:lang=ru:name="название" track.srt:lang=ru:name="название" -add chapters.txt:fps=23.976 -new video_out.mp4

К аудио дорожке добавляются через двоеточие параметры:

:name="любой текст"

:lang=ru (язык дорожки ru, en)

:delay=20 (задержка в миллисекундах)


После этого будет сформирован конечный файл, со звуком и субтитрами, готовый к использованию.


Второй вариант развития событий

Получен файл в формате MKV, в нем один поток. Но рано радоваться, это не тот же поток который мы делаем для контейнера MP4. Этот поток содержит в себе BL, RPU и EL. Это хорошо в целом, в MKV научились засовывать исходный поток с Blu Ray. Но воспроизводить такое видео может ограниченное число ТВ боксов. Моя задача, чтобы DV работал нативно на ТВ.

Поэтому задача состоит в том чтобы из этой комбинации BL, RPU и EL вытащить BL и RPU, потоки, затем объединить их.

- Распаковываем tsMuxer, как описано выше в первом развитии событий. Видео дорожку лучше назвать BL_EL_RPU.hevc.

Разделяем BL EL RPU на BL поток и EL RPU. Используется уже знакомый dovi_tool.

.\dovi_tool demux --input BL_EL_RPU.hevc --bl-out BL.hevc --el-out EL_RPU.hevc

Дальше развитие событий следует по первому