如何确定音轨是否为杜比定向逻辑 II 混音



我试图找出是否有办法确定AAC编码的音轨是否使用杜比定向逻辑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 数据编码的。

tl:dr;这可能是可能的;如果你是一个程序员,可能会更容易。

由于编码的信息只是一个立体声模拟对,因此无法保证在其中检测杜比定向逻辑 II (DPL2) 信号,除非您专门存储自己的元数据,说"这是一个 DPL2 文件"。 但你可能可以做出一个很好的猜测。

所有旧的模拟杜比环绕声格式(包括 DPL2)都通过反转环绕声的相位,然后将它们混合到原始的左右声道中,将环绕声信息存储在两个声道中。 杜比环绕声(Dolby Surround)解码器(包括DPL2)试图通过反转两个声道之一的相位,然后在这些信号对中寻找相似之处来恢复此信息。 这要么是微不足道的,如杜比环绕声,要么这些相似性被人为地偏向于向左或向右推得更远,或者向左或向右推,如在 DPL2 中。

因此,诀窍是检测重要数据是否存储在环绕声道中。 我将为您勾勒出一种可能有效的方法,我将尝试在不编写代码的情况下表达它,但这取决于您根据自己的喜好实现和优化它。

  1. 将节目内容的前 N 秒左右裁剪为立体声文件,其中 N 介于 1 到 30 之间。 将此文件称为输入。
  2. 将输入立体声通道混音到新的单声道文件,每通道 -3dB。 调用此文件中心。
  3. 将输入的左右通道拆分为单独的文件。 称这些为左和右。
  4. 反转正确的频道。 将此文件称为 RightInvert。
  5. 将左反相和右反相声道混音到新的单声道文件,每声道 -3dB。 将此文件称为环绕声。
  6. 确定环绕声文件的RMS和峰值dB。
  7. 如果环绕声文件的 RMS 或峰值 DB 低于"容差",请停止;原始文件是单声道或中心声像,因此不包含环绕声信息。 您必须尝试几个 DPL2 和非 DPL2 源才能看到这些容差是多少,但在十几个文件之后,数字应该变得清晰。 我猜大约是 -30 dB 左右。
  8. 将中心文件反转为新文件。 将此文件称为中心反转。
  9. 将 CenterInvert 文件以 0 dB 混入环绕声文件(CenterInvert 和 Surround 都应该是单声道)。 将此新文件称为 SurroundInvert。
  10. 确定环绕反转文件的RMS和峰值dB。
  11. 如果 SurroundInvert 的 RMS 和/或峰值 dB 低于"容差",请停止;原始源包含平移的左前方或右前方信息,而不是环绕声信息。 您必须尝试几个DPL2和非DPL2源才能看到这些公差是多少,但是在十几个文件之后,数字应该变得清晰 - 我猜大约是-35 dB左右。
  12. 如果您已经走到了这一步,您的原始输入可能包含环绕声信息,因此可能是杜比环绕声编码系列的成员。

我已经写出了这个算法,以便您可以使用 sox 中的特定命令执行这些步骤中的每一个。 如果你想变得更漂亮,而不是在索克斯中做RMS/峰值步骤,你可以运行一个ebur128程序,并根据公差检查LUFS中的水平。 如果你想更漂亮,在创建环绕声和中心文件后,你可以过滤掉所有高于7kHz的频率,并对它们进行去加重,就像真正的DPL2解码器一样。

为了保持这个算法的简单性,我完全在幅度域中勾勒出它。 如果您知道如何计算 FFT 箱的大小和角度并且使用 30 到 100 毫秒的窗口,那么在频域中,SurroundLevel 文件的计算可能会更准确。 但是上面的这个便宜的版本应该让你开始。

最后的警告。 AAC是一种现代心理声学编解码器,这意味着它喜欢玩立体声相位和成像的游戏来实现其压缩。 因此,我认为仅仅将DPL2封装到AAC流中的操作可能会破坏DPL2中存在的一些成像。 坦率地说,DPL2 和 AAC 都不属于此管道中的任何位置。 如果必须存储最初使用 DPL2 编码的模拟流,请以无损格式(如 WAV 或 FLAC)而不是 AAC 进行。

在撰写本文时,杜比定向逻辑 (I) 背后的操作概念在这里。 这些基本概念仍然适用于 DPL2;DPL2 的操作概念在这里。

如果文件有多个声道,您可以肯定地假设它们用于环绕声目的,尽管它们可能只是多个轨道。 在这种情况下,它落在播放系统上,以"认为"最好的频道。(如果文件头没有说明该怎么做)

但是您的文件是立体声的。如果您想知道它是否是虚拟环绕声文件,请在标题中查找编码器字段以查看使用了哪个编码器。 这可能会有所帮助,尽管不多。大多数编码器字段留空,第二件事是编码器不必与混合环绕声数据的重码器相同。 即,重码器将首先创建原始PCM数据,然后将其馈送到某个编码器以生成压缩文件。(AAC或其他什么) 此外,有许多应用程序和版本各不相同,编码器字段也可能有所不同,因此跟踪所有这些将是令人讨厌的工作。

但是,您可以通过检查数据来推断某些东西是否是虚拟环绕声,并且具有超过60%的确定性。 这将是先进的DSP,为了速度,甚至可能涉及机器学习。 您必须找出立体声信号是否包含HRTF(头部相关传递函数)的某些特征。 这可以通过检查时域中出现的相同声音与频域中出现的谐波特征(特征频率变化)之间的强度差异和延迟特征来实现。 您必须同时执行这两项操作,因为一个没有另一个可能只会告诉您某些东西是非常好的立体声录音,而不是虚拟环绕声。 我不知道是否已经在某处映射了 HRTF 特定功能,或者您需要自己完成。

这是一个非常复杂的解决方案,需要花费大量时间才能正确制作。此外,它的性能也会有问题。

使用此方法,您还可以将立体声混音分解为几乎原始的环绕声道。 但是对于立体声到环绕声转换,使用了其他方法,它们听起来很好。

如果您决定执行此类检测,如果没有映射 HRTF 特征,则需要投入半年或更长时间的辛勤工作,如果是,则需要几周的时间, 为巨大的压力做好准备,祝你好运。我做过类似的事情。这是一个杀手。

如果您想要一个开箱即用的解决方案,那么您问题的答案是否定的,除非标头为您提供了编码器字段,并且编码器是独特的,并且已知仅用于进行环绕声到立体声的转换。 我认为没有人像我描述的那样从实际数据中做到这一点,或者如果他们这样做了,那就是商业产品的一部分。做你想做的事通常不是必需的,但可以做到。

哦,顺便说一句,尝试谷歌搜索 HRTF 反转,它可能会提供一些帮助。

最新更新