答案1
判断立体声文件两个声道上都有相同的单声道音轨的方法是将其中一个声道(例如,左声道)倒相,然后将其与另一个声道相加。(因此,我们要寻找相位相干性)
我并不经常使用 Audacity,所以我不知道它是否能够做到这一点,但是这里有一个小的 FFmpeg 语法可以完成您想要的操作:
ffmpeg -i 'is_this_stereo.wav' -filter_complex "stereotools=phasel=1" -ac 1 'output.wav'
(也适用于其他音频编解码器 - 输出无损格式(如 WAV)可确保编码不会删除任何内容)
FFmpeg 脚本的作用:反转左通道的相位,然后将两个通道相加到一个新通道中。
除了-ac 1
,您还可以将filter_complex
-chain 更改为stereotools=phasel=1[tmp];[tmp]pan=1c:c0=0.5*c0+0.5*c1
。不过,我认为这没有必要。
如果您随后查看新创建的文件,发现波形中有一条平线,则原始文件的左声道与右声道完全相同。如果只有非常小的峰值(例如,大约 -60dB 或更小),则差异可能只是由编码伪影引起的 -只要听一下就可以确定。
代码来源:
答案2
我更喜欢让电脑做枯燥的工作,所以从flolilo 的回答,我最终得到:
ffmpeg -i is_this_stereo.wav -filter_complex 'pan=mono|c0=0.5*FL+-0.5*FR,silenceremove=start_periods=1:detection=peak:window=0' -f null -
如果输入文件的通道是精确复制的(至少我的一张 CD 是这样的),则会显示警告“输出文件为空,未编码任何内容”。您可以放宽静音移除过滤器忽略某些噪音,例如silenceremove=start_periods=1:start_threshold=0.02
或start_threshold=-17dB
,但相对振幅与 PCM 能力有关,而不是与录音水平有关。对于我的一些 CD,此值会过滤掉微妙但可听见的立体声;对于其他 CD,此值约为最小值。
该-f null -
部分只是抑制文件输出,以防控制台消息足够,但当然你可以让它写入差异文件。为了检查脚本中的单声道性,我想到最好的方法是:
out=$(ffmpeg -nostdin -loglevel error -i "$infile" -filter_complex 'pan=mono|c0=0.5*FL+-0.5*FR,silenceremove=start_periods=1:detection=peak:window=0' -t 0.00002 -f crc -)
if [ "$out" == 'CRC=0x00000001' ]
then echo "$infile is definitely mono"
fi
在该脚本片段中:
- 时间限制
-t 0.00002
将发出的差异减少到单个样本(对于每秒 44,100 个样本的标准 CD 内容),这大大加快了立体声文件的检查速度。-frames 1
在我的系统上结果相同,但我不确定它是否应该如此,因为一个帧包含多个样本。 -f crc
将输出写为 ASCII 格式,这在脚本中更容易处理。如果一个 16 位样本通过静音消除器,我认为 32 位 CRC 必须从其初始值 1 更改。也可以使用-f md5
或-f hash
。- 单独分配
out
,而不是在测试表达式内部调用它,可确保如果您使用 shell 的 -e 选项,脚本会在出现错误时停止。
答案3
正如评论中提到的那样,立体声文件和立体声音响记录。
没有什么可以阻止我们创建一个文件,该文件具有来自单个音频源的两个立体声通道 - 例如,这是 CD 重新制作的旧录音的标准。
了解立体声文件是否真正包含立体声内容的典型方法是计算两个声道每秒零通过次数的平方和。我不知道 Audacity 或其他免费软件工具是否内置了此功能。
事实证明,人眼非常善于发现通道差异,因此如果要检查的录音数量很少,那么波形图(由 audacity 生成)应该会让您感觉良好,无论是否是立体声。