5

我正在尝试找出是否有办法确定 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 数据编码的。

4

2 回答 2

6

tl:博士;这可能是可能的;如果您是程序员,可能会更容易。

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

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

所以诀窍是检测重要数据是否存储在环绕声道中。我会为你勾勒出一个可行的方法,我会尝试在不编写代码的情况下表达它,但你可以根据自己的喜好来实现和改进它。

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

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

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

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

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

于 2017-04-30T21:05:43.823 回答
2

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

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

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

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

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

如果你决心进行这样的检测,如果没有映射 HRTF 特征,则花费半年或更长时间的努力工作,如果是,则需要几周时间,为巨大的压力做好准备,祝你好运。我做过类似的事情。这是一个杀手。

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

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

于 2017-04-30T13:27:35.197 回答