touch MAX

получи максимум — личный блог "тыж программиста"

Возможно впервые в мире тестовый файл с отключением\включением налету Dolby Atmos

На днях приснилось(!) — «а что если сделать тестовый файл с Dolby Atmos, в котором динамически включалась\отключалась бы мета об объектах». Хотелось понять Atmos это все таки маркетинг или реальная технология улучшающая звуковое восприятие сцены (сам то я давно знал что не маркетинг). Подумалось, сделалось. 🧐

Сначала немного теории

Dolby Atmos может находится в трех форматах (по популярности):

  1. Dolby Digital Plus 5.1\7.1 (стрим сервисы, рипы с них)
  2. Dolby True HD (blu-ray диски, рипы с них)
  3. Dolby MAT (игровые приставки и PC)

Вкратце как это все работает: Звукорежиссер при работе, например, над фильмом, располагает целым набором звуковых файлов, от отдельно записанных голосов актеров и звуков записанных в непосредственно при съемке на площадке, до звуковых эффектов. Это если сильно упрощенно — он их «раскидывает» в монтажной программе в 3D и «двигает» объектами в зависимости от сцены в фильме.

Потом он сохраняет полученный звук в мастер формате со всеми объектами, например, 128 (макс количество). А дистрибьютеры, в зависимости от платформы, конвертируют эту дорожку, например, для стрим сервисов типа Netflix, в формат с потерями Dolby Digital Plus 5.1 with Atmos уже с 16 группами\кластерами объектов или в формат без потерь TrueHD with Atmos для blu-ray дисков с теми же самыми 16ю группами объектов (см Spatial coding).

Ну и основная фишка при воспроизведения дорожки с Атмосом это рендеринг звука в реальном времени в зависимости от оборудования пользователя, а в идеале и с учетом местоположения слушателя(!), будь то наушники (получится бинауральный звук), полноценная 7.1.4 аудио система или саундбар 7.1.4 (оборудование конечно же должно поддерживать Atmos, иначе, по обратной совместимости, будет получен классический многоканальный звук). То есть оборудование с поддержкой Atmos «знает» и о количестве доступных каналов, и об их расположении в пространстве, и о положении слушателя (для этого есть отдельная процедура калибровки с помощью микрофонов). Итого при классическом многоканале звук может воспроизводится спереди, слева где-то впереди, справа где-то впереди, где-то сзади слева, где-то сзади справа, а в случае Атмос, переходы звука из одного канала в другой будут плавнее (чем больше физ. каналов, тем точнее будет позиционироваться звук), звук может «подниматься» вверх и «приближаться» к пользователю.

Реализация

Идея состояла в следующем: взять тестовый файл со звуком в Dolby Digital Plus with Atmos, выкинуть из него мету, сделать другой тестовый видео файл с дорожкой Dolby Digital Plus (без Atmos). Нарезать первый и второй файлы на равные отрезки и склеить их в третий, новый файл с чередованием кусков из первого и второго.

Берем и делаем: первым делом избавляемся от меты (простых способов просто взять и отключить атмос нет), извлекаем из видео, аудио стрим и видео, я использую tsMuxer, декодируем Dolby Digital Plus (DD+) Atmos в 7.1 PCM

ffmpeg.exe -i "00006 ATMOS+EAC+DD.track_4.ac3" out_7.1.wav 

Избавились от Atmos. Потом пытаемся тем же самым ffmpeg закодировать в Dolby Digial Plus

ffmpeg.exe -i out.wav out.eac3

И получаю косяк — ffmpeg не умеет кодировать DD+ в конфигурации 7.1, только в 5.1, это нам не походит, так как Атмос дорожка у нас в 7.1. Ищем и (где надо 🏴‍☠️) находим кодировщик от Dolby и классную обертку для нее deew и тут я понимаю, что предыдущие шаги можно было не делать, ведь при кодировании звука deew сам, под капотом, сначала декодирует звук в PCM, а потом сжимает в DD+

deew.exe -i ATMOS+EAC+DD.track_4.ac3 -b 1280 -dn -29 -o outDD+withoutAtmos.eac3

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

С помощью mkvtoolnix делаем новый видео файл, в который добавляем видео из исходного демо файла, а звук из новой дорожки.

Теперь нарезаем на одинаковые части (у меня по 10 сек) два видео файла (в одном звук Dolby Digital Plus Atmos, в другом Dolby Digital Plus)

ffmpeg -i "DDP.mkv"-ss 00:00:40 -c copy part5_ddp.mkv
ffmpeg -i "DDP.mkv"-ss 00:00:30 -t 00:00:10 -c copy part4_ddp.mkv
ffmpeg -i "DDP.mkv"-ss 00:00:20 -t 00:00:10 -c copy part3_ddp.mkv
ffmpeg -i "DDP.mkv"-ss 00:00:10 -t 00:00:10 -c copy part2_ddp.mkv
ffmpeg -i "DDP.mkv"-ss 00:00:00 -t 00:00:10 -c copy part1_ddp.mkv

И второй

ffmpeg -i "ATMOS+EAC+DD.mkv"-ss 00:00:40 -c copy part5_atmos.mkv
ffmpeg -i "ATMOS+EAC+DD.mkv"-ss 00:00:30 -t 00:00:10 -c copy part4_atmos.mkv
ffmpeg -i "ATMOS+EAC+DD.mkv"-ss 00:00:20 -t 00:00:10 -c copy part3_atmos.mkv
ffmpeg -i "ATMOS+EAC+DD.mkv"-ss 00:00:10 -t 00:00:10 -c copy part2_atmos.mkv
ffmpeg -i "ATMOS+EAC+DD.mkv"-ss 00:00:00 -t 00:00:10 -c copy part1_atmos.mkv

Делаем текстовый файл для удобства file_listAtmosFirst.txt в котором чередуем куски из первого файла и из второго:

file 'part1_atmos.mkv'
file 'part2_ddp.mkv'
file 'part3_atmos.mkv'
file 'part4_ddp.mkv'
file 'part5_atmos.mkv'

Склеиваем в новый видео тестовый файл

ffmpeg -f concat -safe 0 -i file_listAtmosFirst.txt -c copy Test_DolbyAtmosOnOff_(Atmos_first).mkv

Готово! Файл получился немного дерганным из-за неточной обрезки по времени и синхронизации стримов. Так как формат DD+ потоковый, то нам ничего не мешает его пускать «как есть» и софт плееры могут даже ничего не знать, что внутри у нас дорожка «переключается», но вот железо для воспроизведения четко должно сигнализировать о переключении дорожек с DD+ на DD+ Atmos.

Теперь можете сами оценить как в одном видео появляется и исчезает мета с Атмос и как это влияет на звук.

Получившиеся файлы можно скачать тут. Для удобства я вшил в видео текст с отображением Atmos. Бонусом записал вторую дорожку — стерео с верхних Top каналов в конфигурации 7.1.2

Мира!

,