最近写 FLAD 的时候发现,可以用肉眼简单辨别立体声音频使用的有损编码器,在此简单记录。
方法
- 将左右声道分离并使用左声道减去右声道,由此产生侧声道;
- 丢进可以频谱分析软件中观察;
- 以下为四种常见频谱特征:
无损音源:
MP3 频谱中可见细小斑点:
AAC 频谱中可见小段不连续补丁:
Opus 频谱中可见大块规整矩形黑色空缺:
原理
立体声系统中,左右声道存在很多相同部分,
因此可以通过将相同的部分和不同的部分分开保存,以提高压缩效率。
这一方法通常称为 M/S 分离,M 表示 Mid 即中置声道,S 表示 Side 即侧声道。
若 L R 各代表左右声道,则 M=(L+R)/2
S=(L-R)/2
。
因为侧声道包含的能量及信息较中置声道更少,通常编码器采用更激进的策略进行压缩,
故在侧声道留下更多的人工痕迹。
扩展
因为特征显著,于是咱随手炼了一个人工智障用来自动化检测音源来自何种编码器。
如有需要可以详细查看 FLAD 项目页。
如果仔细监听侧声道音频,会发现侧声道中细细簌簌的噪声正是完整立体声中感到不自然的部分。
于是对比了同一段无损音频在同样码率下自动编码产生的侧声道音频,
发现 Opus 的侧声道质量远高于 AAC 及 MP3。
近日下载 YouTube 某一段直播录像视频的时候突发奇想,将 Opus 音轨下载后使用 FLAD 检验。
虽然人工智障非常自信地认为这是 Opus 编码器(这当然没有错),但渲染出的频谱却有一丝诡异:
虽然可以看到大量规整矩形空缺黑块(表示这是 Opus 编码器),
但斑驳样的频谱却暗示这背后可能存在 AAC 编码器的身影。
考虑到两次有损编码损害大于一次有损编码,以后下载录播视频还是不要选择 Opus 音轨比较好。
经证实 YouTube 始终对上传音视频二次压缩,有能力请直接录制直播。
此外,在实验中发现:
虽然 YouTube 输出音轨只有 128k CBR AAC-LC 和 160k Opus 这两种规格,
但不同码率上传的音轨经 YouTube 转码后客观品质评分 MOS-LQO 存在差异。
因此建议在 YouTube 上传视频的选手使用更优秀的有损编码器以更大码率上传视频。
至少使用 320kbps AAC-LC,建议使用相同码率或更大码率 QAAC/Opus 编码器。
Tips
对于 Python 选手,可以使用 librosa 之类的库直接分离出侧声道:
import librosa
from scipy.io import wavfile
import numpy as np
y, y_sr = librosa.load('input.wav', mono=False, sr=None)
wavfile.write('side.wav', y_sr, np.asfortranarray((y[0]-y[1])/2))