如何确定音轨是否为 Dolby Pro Logic II 混音

How to determine if an audio track is a Dolby Pro Logic II mixdown

我想知道是否有办法确定 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 数据编码的。

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

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

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

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

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

如果您决心执行这样的检测,如果没有映射 HRTF 特征,则投入半年或更长时间的努力,如果有,则投入数周, 为巨大的压力做好准备,祝你好运。我做过类似的事情。简直就是杀手。

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

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

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

因为编码的信息只是立体声模拟对,所以无法保证在其中检测到杜比定向逻辑 II (DPL2) 信号,除非您专门存储自己的元数据说 "this is a DPL2 file." 但是您可以大概猜对了。

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

所以诀窍是检测重要数据是否存储在环绕通道中。我将为您勾勒出一个可能有效的方法,并尝试在不编写代码的情况下表达它,但您可以根据自己的喜好实施和完善它。

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

我已经写出这个算法,这样您就可以在 sox. If you want to be fancier, instead of doing the RMS/peak value step in sox, you could run an ebur128 程序中使用特定命令执行这些步骤中的每一个,并根据公差检查 LUFS 中的级别。如果你想更高级一点,在创建环绕声和中心文件后,你可以过滤掉所有高于 7kHz 的频率并对其进行去加重,就像真正的 DPL2 解码器一样。

为了使这个算法简单化,我在幅度域中完全勾画了它。如果您知道如何计算 FFT 区间的幅度和角度并且使用 30 到 100 毫秒的 windows,那么在频域中计算 SurroundLevel 文件可能会更加准确。但是上面这个便宜的版本应该能让你入门。

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

截至撰写本文时,杜比定向逻辑 (I) 背后的操作概念是 here. These basic concepts still apply to DPL2; operational concepts for DPL2 are here