我正在尝试找出是否有一种方法可以确定是否使用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 中。我将为您勾勒出一种可能有效的方法,并且尝试不编写代码来表达它,但是您可以根据自己的喜好实现和改进它。
我已经写出了该算法,以便您可以使用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/