Как определить, является ли аудиодорожка микшированием Dolby Pro Logic II
Я пытаюсь выяснить, есть ли способ определить, кодируется ли аудиодорожка в кодировке AAC данными Dolby Pro Logic II. Есть ли способ проверить файл так, чтобы вы могли видеть эту информацию? Я, например, закодировал мультимедийный файл в Handbrake с (усеченный до аудио параметров) -E av_aac -B 320 --mixdown dpl2
и это выход звуковой дорожки, который mediainfo
показывает:
Audio #1
ID : 2
Format : AAC
Format/Info : Advanced Audio Codec
Format profile : LC
Codec ID : 40
Duration : 2h 5mn
Bit rate mode : Variable
Bit rate : 321 Kbps
Channel(s) : 2 channels
Channel positions : Front: L R
Sampling rate : 48.0 KHz
Compression mode : Lossy
Stream size : 288 MiB (3%)
Title : Stereo / Stereo
Language : English
Encoded date : UTC 2017-04-11 22:21:41
Tagged date : UTC 2017-04-11 22:21:41
но я не могу сказать, есть ли что-то в этом выводе, что бы предполагало, что оно закодировано с данными DPL2.
2 ответа
ТЛ: д-р; это возможно возможно; это может быть проще, если вы программист.
Поскольку закодированная информация является просто стереофонической аналоговой парой, не существует гарантированного способа обнаружения в ней сигнала Dolby Pro Logic II (DPL2), если только вы не храните свои собственные метаданные, говорящие "это файл DPL2". Но вы, вероятно, можете сделать довольно хорошее предположение.
Все старые аналоговые форматы Dolby Surround, включая DPL2, хранят информацию объемного звучания в двух каналах, инвертируя фазу объемного звучания или объемного звучания, а затем смешивая их в исходные левый и правый каналы. Декодеры типа Dolby Surround, включая DPL2, пытаются восстановить эту информацию, инвертируя фазу одного из двух каналов, а затем ищут сходства в этих парах сигналов. Это может быть сделано тривиально, как в Dolby Surround, или же эти сходства искусственно смещены, чтобы их толкали намного дальше влево или вправо или в левое или правое окружение, как в DPL2.
Таким образом, хитрость заключается в том, чтобы определить, хранятся ли важные данные в канале (ах) окружающего звучания. Я нарисую для вас метод, который мог бы работать, и постараюсь выразить его без написания кода, но вам решать, как реализовать и усовершенствовать его по своему вкусу.
- Обрежьте первые N секунд или около того содержимого программы в стереофонический файл, где N - от одного до тридцати. Назовите этот файл Input.
- Микшируйте входные стереоканалы до нового монофайла со скоростью -3 дБ на канал. Позвоните в этот файловый центр.
- Разделите левый и правый каналы ввода на отдельные файлы. Назовите их влево и вправо.
- Инвертировать правый канал. Назовите этот файл RightInvert.
- Смешайте каналы Left и RightInvert в новый монофонический файл со скоростью -3 дБ на канал. Назовите этот файл Surround.
- Определите среднеквадратичное значение и пик в дБ файла Surround.
- Если среднеквадратичная или пиковая база данных файла Surround ниже "допуска", остановитесь; исходный файл является либо моно, либо панорамированием по центру и, следовательно, не содержит объемной информации. Вам придется поэкспериментировать с несколькими источниками DPL2 и не-DPL2, чтобы увидеть, каковы эти допуски, но после примерно дюжины файлов цифры должны стать ясными. Я предполагаю около -30 дБ или около того.
- Инвертировать файл центра в новый файл. Назовите этот файл CenterInvert.
- Смешайте файл CenterInvert с файлом Surround при 0 дБ (как CenterInvert, так и Surround должны быть моно). Назовите этот новый файл SurroundInvert.
- Определите среднеквадратичное значение и пик в дБ файла SurroundInvert.
- Если среднеквадратическое значение и / или пиковое значение дБ SurroundInvert ниже "допуска", остановитесь; Ваш исходный источник содержит панорамированную левую или правую переднюю информацию, а не объемную информацию. Вам придется поэкспериментировать с несколькими источниками DPL2 и не-DPL2, чтобы увидеть, каковы эти допуски, но после дюжины или около того файлов цифры должны стать ясными - я предполагаю около -35 дБ или около того.
- Если вы дошли до этого места, ваш исходный ввод, вероятно, содержит информацию окружающего звучания и, следовательно, является членом семейства кодировок Dolby Surround.
Я написал этот алгоритм так, что вы можете выполнить каждый из этих шагов с определенной командой в sox. Если вы хотите быть более любопытным, вместо того, чтобы делать шаг RMS/ пикового значения в sox, вы можете запустить программу ebur128 и проверить свои уровни в LUFS на соответствие допустимому отклонению. Если вы хотите быть еще более любопытным, после создания файлов Surround и Center вы можете отфильтровать все частоты выше 7 кГц и снять с них акцент, как это сделал бы настоящий декодер DPL2.
Чтобы сохранить этот алгоритм простым, я набросал его полностью в области амплитуды. Расчет файла SurroundLevel, вероятно, будет гораздо более точным в частотной области, если вы знаете, как рассчитать величину и угол бункеров FFT, и используете окна от 30 до 100 мс. Но эта дешевая версия выше должна помочь вам начать.
Последнее предупреждение. AAC - это современный психоакустический кодек, а это значит, что он любит играть в игры со стереофазией и отображением, чтобы добиться его сжатия. Поэтому я считаю вероятным, что простое действие по инкапсуляции DPL2 в поток AAC, вероятно, приведет к созданию некоторой части изображений, присутствующих в DPL2. Откровенно говоря, ни DPL2, ни AAC не принадлежат нигде в этом конвейере. Если вам необходимо сохранить аналоговый поток, изначально закодированный с помощью DPL2, делайте это в формате без потерь, например WAV или FLAC, а не AAC.
На момент написания этой статьи рабочие концепции Dolby Pro Logic (I) уже здесь. Эти основные понятия все еще применяются к DPL2; операционные концепции для DPL2 здесь.
Если файл имеет более одного канала, вы можете с уверенностью предположить, что они используются для целей объемного звучания, хотя они могут быть просто несколькими дорожками. В этом случае это зависит от системы воспроизведения, так как она "думает" лучше всего. (если заголовок файла не говорит, что делать)
Но ваш файл стерео. Если вы хотите узнать, является ли это виртуальный файл объемного звучания, тогда вы посмотрите в заголовке поле кодировщика, чтобы увидеть, какой кодировщик использовался. Это может немного помочь, хотя и не сильно. В основном поле кодера оставлено пустым, а во-вторых, кодер не обязательно должен быть тем же, что и кодировщик, который смешал данные объемного звучания. Т.е. перекодировщик сначала создает необработанные данные PCM, а затем передает их в какой-то кодировщик для создания сжатого файла. (AAC или что-то в этом роде) Кроме того, существует множество приложений и версий, которые могут отличаться, так же как и поле кодировщика, поэтому отслеживание их всех было бы неприятной работой.
Однако вы можете с уверенностью более 60% определить, является ли что-то виртуальным окружающим пространством или нет, изучив данные. Это был бы усовершенствованный DSP, и для скорости может быть задействовано даже машинное обучение. Вы должны выяснить, содержат ли стереосигналы определенные функции HRTF (передаточная функция, связанная с головой). Это может быть достигнуто путем изучения разности интенсивности и характеристик задержки между одинаковыми звуками, появляющимися во временной области, и гармоническими характеристиками (характерные изменения частоты) в частотной области. Вам придется сделать и то, и другое, потому что одно без другого может просто сказать вам, что что-то очень хорошая стереозапись, а не виртуальное окружение. Я не знаю, есть ли уже где-то определенные функции HRTF, или вам нужно было бы сделать это самостоятельно.
Это очень сложное решение, которое требует много времени, чтобы сделать правильно. Также это производительность будет проблематичной.
С помощью этого метода вы также можете разбить стереофоническое микширование на почти оригинальные каналы объемного звучания. Но для преобразования стерео в объемное звучание используются другие методы, и они звучат хорошо.
Если вы полны решимости выполнить такое обнаружение, посвятите пол года или больше тяжелой работы, если никакие функции HRTF не сопоставлены, несколько недель, если они есть, приготовьтесь к большому стрессу, и я желаю вам удачи. Я сделал что-то подобное. Это убийца.
Если вы хотите получить готовое решение, тогда ответ на ваш вопрос - "нет", если только заголовок не содержит поле кодера, а кодировщик отличается и известен как используемый только для преобразования окружающего звука в стерео. Я не думаю, что кто-то сделал это из реальных данных, как я описал, или, если они сделали это, является частью коммерческого продукта. Делать то, что вы хотите, обычно не нужно, но это можно сделать.
Ой, кстати, попробуйте поискать инверсию HRTF, это может помочь.