audio - 如何确定音轨是否为杜比定向逻辑II(Dolby Pro Logic II)混音

标签 audio aac audio-processing handbrake dolby

我正在尝试找出是否有一种方法可以确定是否使用Dolby Pro Logic II数据对AAC编码的音轨进行了编码。有没有一种检查文件的方式,以便您可以查看此信息?例如,我已经在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,都通过反转一个或多个环绕声的相位,然后将它们混合为原始的左右声道,在两个 channel 中存储环绕声信息。包括DPL2在内的杜比环绕声类型解码器试图通过反转两个 channel 之一的相位,然后在这些信号对中寻找相似性来恢复此信息。这可以像在Dolby Surround中那样简单地完成,或者像DPL2一样,将这些相似性人为地偏向于向左或向右或向左或向右推得更远。

因此,诀窍是检测重要数据是否存储在环绕声 channel 中。我将为您勾勒出一种可能有效的方法,并且尝试不编写代码来表达它,但是您可以根据自己的喜好实现和改进它。

  • 将节目内容的前N秒左右裁剪为立体声文件,其中N在1到30之间。将此文件称为输入。
  • 将输入立体声声道混音为一个新的单声道文件,每个声道-3dB。称为此文件中心。
  • 将Input的左右声道拆分为单独的文件。称这些为“左”和“右”。
  • 反转右声道。将此文件称为RightInvert。
  • 将Left和RightInvert声道混合到一个新的单声道文件,每个声道-3dB。将此文件称为“环绕声”。
  • 确定环绕声文件的RMS和峰值dB。
  • 如果“环绕声”文件的RMS或峰值DB低于“公差”,则停止;否则,停止运行。原始文件为单声道或居中显示,因此不包含环绕声信息。您必须尝试使用​​多个DPL2和非DPL2来源来查看这些容差是多少,但是在打了十几个文件之后,数字应该变得清楚了。我猜大概在-30 dB左右。
  • 将Center文件转换为新文件。将此文件称为CenterInvert。
  • 以0 dB的比例将CenterInvert文件混合到Surround文件中(CenterInvert和Surround应该都是单声道)。将此新文件称为SurroundInvert。
  • 确定SurroundInvert文件的RMS和峰值dB。
  • 如果SurroundInvert的RMS和/或峰值dB均低于“公差”,则停止;否则,停止运行。您的原始来源包含平移的左或右前信息,而不是环绕声信息。您必须试验几种DPL2和非DPL2信号源,以了解这些容差是多少,但是在打了十几个文件之后,数字应该变得很清楚了-我猜大概在-35 dB左右。
  • 如果您到此为止,您的原始Input可能包含环绕声信息,因此可能是Dolby Surround编码家族的成员。

  • 我已经写出了该算法,以便您可以使用sox中的特定命令来完成所有这些步骤。如果您想变得更聪明,可以不运行sox的RMS/峰值值步骤,而可以运行ebur128程序并根据容差检查LUFS中的级别。如果您想变得更高级,则可以在创建Surround和Center文件之后过滤掉所有高于7kHz的频率,并对它们进行去加重,就像真正的DPL2解码器一样。

    为了简化该算法,我已经在幅度域中对其进行了概述。如果您知道如何计算FFT仓的幅度和角度,并且使用30到100 ms的窗口,则可以在频域中更准确地完成SurroundLevel文件的计算。但是上面的cheapo版本应该可以帮助您入门。

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

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

    关于audio - 如何确定音轨是否为杜比定向逻辑II(Dolby Pro Logic II)混音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43388574/

    相关文章:

    C++ Winapi waveOutSetVolume()

    c++ - 如何使用 C++ 一次解码一帧 AAC?

    android - 使用 ffmpeg 创建一个 android 可播放的音乐幻灯片

    audio - AAC-LC格式和RTP

    android - 需要了解 Audio Record 和 AudioTrack 如何用于原始 PCM 捕获和播放

    java - 尝试使用 JMF 在 Java 中播放 MP3 时出现格式错误

    c++ - 循环遍历 CAF 文件的示例

    c# - 如何设置 ffmpeg 管道输出?

    java - 音频文件获取左/右声道

    c++ - 在 FMOD 中更改 MIDI 或 WAV/MP3 文件的速度