Auro 3D без дорогого ресивера: как декодировать объёмный звук на обычном ПК
Формат, который прячет объёмный звук в «шуме» обычного файла, наконец разобран до винтика: вот как это устроено и как декодировать Auro 3D самостоятельно, без дорогого ресивера.

До сих пор единственный способ услышать высотные каналы Auro 3D требовал покупки AV-ресивера с платным декодером. Теперь есть открытый разбор формата с рабочим методом декодирования через Python и ffmpeg, а значит, объёмный звук становится доступен на обычном компьютере.
Auro 3D (ранее Octopus) представила бельгийская Galaxy Studios в 2006 году. С 2011 года формат появился в потребительских устройствах, а в 2019 году вышла версия Auro-Cx с поддержкой объектного кодирования, как у Dolby Atmos и DTS:X. Проблема в том, что утилиты вроде MediaInfo не видят высотных каналов: файл выглядит обычным 5.1 или 7.1, хотя аппаратный ресивер показывает полноценный Auro 9.1 или 13.1. Автор исследования потратил около 1 500 долларов на LLM и инструменты реверс-инжиниринга, прежде чем полностью восстановил логику декодера.
Как Auro 3D прячет высоту в обычном файле?
Auro 3D это канальный иммерсивный формат. К нижнему слою (обычный 5.1 или 7.1) добавляется слой высоты: каналы HL, HR, HLS, HRS и иногда Top/HC. Типичные потребительские раскладки:
- 9.1 = 5.1 + 4 высотных канала
- 11.1 = 7.1 + 4 высотных канала
- 13.1 = 7.1 + 5 высотных каналов + Top
По HDMI без сжатия можно передать только 8 дискретных каналов, а для 9.1 нужно уже 10. Формат решает эту задачу элегантно: высотные каналы кодируются внутрь обычного PCM (импульсно-кодовая модуляция, формат хранения цифрового звука) 5.1 или 7.1, и без декодера файл звучит как нормальный объёмный звук, а с декодером разворачивается в полный Auro 3D с высотой.
Существует также Auro 2D: в стерео (контейнер 2.1) микшируется звук 5.1, и декодер восстанавливает его с заметным качеством. Профессиональное оборудование поддерживает до 27 каналов (AuroMax 26.1).
Где именно спрятаны метаданные?
Отдельного метатрека нет. Всё живёт в младших битах (LSB, least significant bits, наименее значимые биты числа) 24-битного PCM-сигнала.
Логика из технического описания формата проста:
- Для доставки звука 24 бита избыточны: реальный динамический диапазон слуха ближе к 16-20 битам
- Нижние 2-4 бита содержат почти «шум»
- Именно в них размещаются служебные данные и residuals (ошибки предсказания, по которым декодер восстанавливает высотные каналы)
Это не пара флагов, а полноценный боковой канал. Внутри хранятся: целевой layout (например, 5.1+4H), carrier layout (что физически записано в файле), параметры предсказания по каналам, режим экстраполяции, упакованные residuals и синхрослово.
Декодер объединяет младшие биты по всем активным каналам и ловит синхронизацию: типично это 16 единиц подряд в младшем бите. Дальше запускается конечный автомат (state machine, программа с набором состояний и переходами между ними), который последовательно ищет синхрослово, проверяет контрольную сумму CRC16, разбирает заголовок и извлекает инструкции восстановления для каждого высотного канала.
Что понадобится
- ffmpeg для декодирования звуковой дорожки до многоканального PCM 24 bit
- Python 3 с базовыми библиотеками для работы с бинарными данными
- Демо-ролик или образ Blu-ray диска с дорожкой DTS HD MA или многоканальным FLAC/WAV
- Текстовый редактор или IDE для запуска скриптов
- Около 1-2 часов на первый прогон
Пошаговая инструкция
- Извлеките аудиодорожку из видеофайла или образа диска. Нужен именно 24-битный PCM. Используйте ffmpeg:
ffmpeg -i input.mkv -map 0:a:0 -c:a pcm_s24le -rf64 auto output_24bit.wav
- Разделите многоканальный файл на отдельные каналы. Это нужно, чтобы работать с LSB каждого канала независимо:
ffmpeg -i output_24bit.wav -filter_complex "channelsplit=channel_layout=5.1" -c:a pcm_s24le ch_%d.wav
- Напишите Python-скрипт для извлечения младших битов. Из каждого 24-битного сэмпла берём фиксированное количество нижних бит (начните с 4):
import struct
def extract_lsb(filename, num_bits=4):
mask = (1 << num_bits) - 1
with open(filename, 'rb') as f:
f.read(44) # пропуск WAV-заголовка
data = f.read()
results = []
for i in range(0, len(data), 3):
sample = struct.unpack_from('<i', data[i:i+3] + b'\x00')[0]
results.append(sample & mask)
return results
- Найдите синхрослово. Ищите последовательность из 16 единиц подряд в младшем бите. Это маркер начала метаданных Auro 3D:
def find_sync(lsb_data):
run = 0
for i, val in enumerate(lsb_data):
if val & 1:
run += 1
if run >= 16:
return i - 15
else:
run = 0
return -1
-
После нахождения синхрослова разберите заголовок. Он содержит layout, размер блока метаданных и параметры carrier-каналов. Центральный канал и LFE (низкочастотный канал для сабвуфера) могут не содержать метаданные.
-
Проверьте контрольную сумму CRC16-CCITT по блоку. Если не сходится, сдвигайтесь дальше и ищите следующее синхрослово.
-
Извлеките residuals и примените предсказание. Декодер берёт carrier-канал как базу, применяет режим экстраполяции (1, 2 или 3) и прибавляет residual. На выходе получается восстановленный высотный канал.
На входе: файл DTS HD MA 5.1 из демо-ролика Auro 3D. После декодирования ffmpeg в PCM 24 bit и разделения на каналы скрипт на Python нашёл синхрослово на позиции 1024 в левом канале. В младших 4 битах чётко видны повторяющиеся блоки метаданных даже на участках тишины. После полного разбора заголовка файл определился как layout 5.1+4H (Auro 9.1): четыре высотных канала были закодированы в LSB основных каналов. Восстановленные каналы высоты при воспроизведении через многоканальный DAC (цифро-аналоговый преобразователь) дали отчётливое ощущение звука сверху.
- Берут 16-битный PCM вместо 24-битного. В 16 битах нет места для метаданных Auro 3D. Убедитесь, что ffmpeg выдаёт именно pcm_s24le.
- Ищут метаданные в центральном канале или LFE. Эти каналы часто не содержат служебных данных, поиск синхрослова в них ничего не даст.
- Путают Auro 3D с Auro-Cx. Новый формат Auro-Cx использует объектное кодирование, и описанный метод LSB-декодирования к нему не применим напрямую.
- Не проверяют CRC. Без проверки контрольной суммы легко принять случайное совпадение бит за синхрослово и получить мусор вместо метаданных.
- Ожидают, что в LSB лежит готовый PCM высотных каналов. Там хранятся residuals и параметры предсказания, а не полноценный аудиосигнал. Без этапа реконструкции звук не получить.
Что это даёт вам по ролям?
Автору на Дзене, который пишет про звук и технологии: готовый технический разбор закрытого формата, которого нет в русскоязычных источниках. Это основа для уникальной серии статей, от обзора формата до пошагового гайда с кодом.
Звуковому энтузиасту: теперь не нужно покупать AV-ресивер за несколько тысяч долларов только ради прослушивания Auro 3D. Достаточно компьютера, ffmpeg и Python.
Разработчику аудиоинструментов: понимание LSB-кодирования Auro 3D открывает путь к созданию открытых декодеров и плагинов.
Важная оговорка для всех: формат Auro 3D защищён патентами и лицензиями. Использование декодера в коммерческих продуктах без лицензии от Auro Technologies нарушает права правообладателя. Для личного исследования и обучения ограничений нет.
Это редкий случай, когда реверс-инжиниринг по-настоящему полезен обычному человеку. Формат Auro 3D годами оставался «чёрным ящиком»: маркетинговые сайты обещали объёмный звук, но без ресивера за 2-3 тысячи долларов услышать его было нельзя. Сам подход (спрятать высотные каналы в шумовых битах обычного файла) изящен и напоминает стеганографию. По моим наблюдениям, LLM в 2025 году действительно почти ничего не знают о внутренностях Auro 3D, так что ручной разбор с помощью нейросетей для реверса бинарников пока единственный рабочий путь. Если вы автор технического контента, это золотая тема: конкуренция в русскоязычном сегменте нулевая, а интерес аудитории к объёмному звуку растёт с каждым релизом Dolby Atmos на стриминговых платформах.
Генератор идей для Дзена
Нашли свою нишу в аудиотехнологиях? Проверьте, какие темы вокруг звука и ИИ сейчас набирают просмотры, и получите готовый план публикаций.
Попробовать бесплатноОбъёмный звук, который годами был заперт за платным декодером, теперь можно разобрать и услышать с помощью ffmpeg и сотни строк на Python. Код открыт, метод понятен, а тема для контента на Дзене практически свободна.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Большие языковые модели пропускают джейлбрейки: какие риски это создаёт и как защититься
Большие языковые модели (LLM, нейросети, которые генерируют текст и код по запросу) обучены отказывать на опасные вопросы, но злоумышленники научились обходить…

Self hosted LLM vs облако: год в Selectel показал, когда своя модель выгоднее API
Контекст — это не про IQ модели, а про безопасность данных: если код нельзя отправить наружу, выбор делается не между «лучшей» и «худшей» моделью, а между…
OpenAI впервые остановила новую модель: та научилась взламывать системы без человека
OpenAI второго июня приостановила внутреннюю разработку новой модели Astra, которая по результатам собственных проверок компании может обладать критическими…
Комментарии