静音不会影响文件大小的音频格式

问题描述 投票:0回答:5

我正在寻找一种音频格式,开始时几个小时的静默不会影响整体文件大小。有谁知道该使用哪一个以及我必须使用哪些设置?到目前为止,我尝试了 m4a、ogg 和 mp3,但没有成功。开始时有 4 小时静音的音频样本在某些格式下会生成 400 MB 的文件。

audio mp3 ogg m4a
5个回答
11
投票

当然,以编程方式处理它会是更明智和SO的方式,比如SoX和静音/垫效果。毕竟,任何一点沉默都与任何其他一点沉默相同,试图压缩它有点浪费精力。

话虽如此,我自己对此有点好奇,所以我尝试比较不同的编解码器在压缩纯数字静音方面的表现。

我创建了两个测试文件。第一个是 44.1kHz 16 位 30 分钟长的立体声 WAVE 文件,包含 -10.66 dBFS RMS 的不相关棕色噪声。第二个文件是相同的,只是填充了 210 分钟的沉默,使总持续时间为 240 分钟(或 4 小时)。接下来,我将文件编码为各种有损和无损编解码器,并查看填充和未填充文件之间的大小差异,以衡量静音编码的效率。

enter image description here

 codec    noise  noise.silence      diff  ratio
   wav    317.5         2540.0    2222.5    8.0
he-aac     14.6          116.5     101.9    8.0
vorbis     36.4          237.1     200.7    6.5
   mp3     38.2          217.2     179.0    5.7
  opus     27.0           81.6      54.6    3.0
   tta    213.8          544.1     330.3    2.5
   aac     54.0          131.7      77.7    2.4
    wv    211.3          444.1     232.8    2.1
  alac    212.5          393.7     181.2    1.9
  flac    211.5          404.8     193.3    1.9
   als    209.7          384.2     174.5    1.8
   ofr    209.3          356.9     147.6    1.7

使用的编解码器:

Lossless
wav:    WAVE
tta:    True Audio v3.4.1
wv:     WavPack v4.80.0 (wavpack -x)
alac:   Apple Lossless
ofr:    OptimFROG v5.100 (ofr --preset 2)
als:    MPEG-4 Audio Lossless Coding v23 (mp4alsRM23 -a -b -o50)
flac:   Free Lossless Audio Codec v1.3.1 (flac -8)

Lossy vbr
mp3:    LAME MP3 v3.99.5 (lame -h -V2)
opus:   Opus v1.1.2 (opusenc --bitrate 128 --framesize 40)
aac:    Advanced Audio Codec v2.0 (afconvert -f 'm4af' -d aac -q 127 -s 3 -u vbrq 100)
vorbis: Vorbis aoTuV b5.5 (oggenc -q 5)

Lossy cbr
he-aac: High-Efficiency AAC v1 (afconvert -f 'm4af' -d aach -q 127 -s 0 -b 64000)

2
投票

如果您以 .wav 格式编码音频文件,根据第 56-60 页的“多媒体编程接口和数据规范 1.0”,您可以编码类型为“LIST”的块,而不是通常的单个“数据”块'wavl' 交替“data”和“slnt”块。有关晦涩(且有缺陷)规范的解释,请参阅 WAV 格式的维基百科页面。


0
投票

我不确定这是否有帮助,但如果大小导致存储或传输出现问题,您只需压缩 wav 即可!所有空字节消失。 不过要使用,您必须再次打开包装。


0
投票

所以我今天偶然遇到了同样的问题,并尝试了一堆不同的音频格式。

这个实验根本不科学。这里的静音被定义为我的声卡捕获的绝对静音(不是环境噪音)。

我尝试了以下命令,让它们每个运行大约20秒,然后检查生成的输出文件。

arecord -f S16_LE -c1 -r44100 -t raw - | \
    lame -r -m m -s 44.1 -b 160 - dest.mp3

arecord -f S16_LE -c1 -r44100 -t raw - | \
    oggenc --raw -C1 -b 160 -o dest.ogg -

arecord -f S16_LE -c1 -r44100 -t raw - | \
    opusenc --raw --raw-chan 1 --bitrate 160 - dest.opus

我将

arecord
与原始输出格式一起使用,因为它非常适合长时间现场录音,其中内容的持续时间事先未知。

结果如下:

416K  dest.mp3
4.0K  dest.ogg
4.0K  dest.opus

所以看起来 Ogg Vorbis 和 Opus 很好地压缩了沉默。这也适用于同一文件中与绝对沉默交织在一起的语音段落。静默位不会不必要地增大文件大小。


-1
投票

您可能会考虑让编码器在遇到超过一秒左右的沉默时“暂停”。 任何编解码器都可以被黑客攻击来做到这一点,尽管在开始进行这样的更改之前您需要了解它们是如何工作的......

另一种选择是通过一个程序传输 MP3 编码器的输出,该程序会去除“额外”的静默帧。 这可能会减少总体工作量(尽管您仍然需要了解 MP3 成帧和第三层位存储库的工作原理)。

© www.soinside.com 2019 - 2024. All rights reserved.