Игорь Градов
Игорь Градов
6 мин
ai

Auro 3D без дорогого ресивера: как декодировать объёмный звук на обычном ПК

Формат, который прячет объёмный звук в «шуме» обычного файла, наконец разобран до винтика: вот как это устроено и как декодировать 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 часов на первый прогон

Пошаговая инструкция

  1. Извлеките аудиодорожку из видеофайла или образа диска. Нужен именно 24-битный PCM. Используйте ffmpeg:
ffmpeg -i input.mkv -map 0:a:0 -c:a pcm_s24le -rf64 auto output_24bit.wav
  1. Разделите многоканальный файл на отдельные каналы. Это нужно, чтобы работать с LSB каждого канала независимо:
ffmpeg -i output_24bit.wav -filter_complex "channelsplit=channel_layout=5.1" -c:a pcm_s24le ch_%d.wav
  1. Напишите 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
  1. Найдите синхрослово. Ищите последовательность из 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
  1. После нахождения синхрослова разберите заголовок. Он содержит layout, размер блока метаданных и параметры carrier-каналов. Центральный канал и LFE (низкочастотный канал для сабвуфера) могут не содержать метаданные.

  2. Проверьте контрольную сумму CRC16-CCITT по блоку. Если не сходится, сдвигайтесь дальше и ищите следующее синхрослово.

  3. Извлеките 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 нарушает права правообладателя. Для личного исследования и обучения ограничений нет.

Мнение редакции dzen.guru

Это редкий случай, когда реверс-инжиниринг по-настоящему полезен обычному человеку. Формат Auro 3D годами оставался «чёрным ящиком»: маркетинговые сайты обещали объёмный звук, но без ресивера за 2-3 тысячи долларов услышать его было нельзя. Сам подход (спрятать высотные каналы в шумовых битах обычного файла) изящен и напоминает стеганографию. По моим наблюдениям, LLM в 2025 году действительно почти ничего не знают о внутренностях Auro 3D, так что ручной разбор с помощью нейросетей для реверса бинарников пока единственный рабочий путь. Если вы автор технического контента, это золотая тема: конкуренция в русскоязычном сегменте нулевая, а интерес аудитории к объёмному звуку растёт с каждым релизом Dolby Atmos на стриминговых платформах.

Генератор идей для Дзена

Нашли свою нишу в аудиотехнологиях? Проверьте, какие темы вокруг звука и ИИ сейчас набирают просмотры, и получите готовый план публикаций.

Попробовать бесплатно

Объёмный звук, который годами был заперт за платным декодером, теперь можно разобрать и услышать с помощью ffmpeg и сотни строк на Python. Код открыт, метод понятен, а тема для контента на Дзене практически свободна.

Поделиться:TelegramVK
Игорь Градов
Игорь Градов

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

Комментарии

Читайте также

Большие языковые модели пропускают джейлбрейки: какие риски это создаёт и как защититься
ai

Большие языковые модели пропускают джейлбрейки: какие риски это создаёт и как защититься

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

6 мин
Self hosted LLM vs облако: год в Selectel показал, когда своя модель выгоднее API
ai

Self hosted LLM vs облако: год в Selectel показал, когда своя модель выгоднее API

Контекст — это не про IQ модели, а про безопасность данных: если код нельзя отправить наружу, выбор делается не между «лучшей» и «худшей» моделью, а между…

5 мин
ai

OpenAI впервые остановила новую модель: та научилась взламывать системы без человека

OpenAI второго июня приостановила внутреннюю разработку новой модели Astra, которая по результатам собственных проверок компании может обладать критическими…

4 мин