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

Posted

技术标签:

【中文标题】静音不会影响文件大小的音频格式【英文标题】:Audio format where silence would not affect file size 【发布时间】:2017-02-14 22:39:51 【问题描述】:

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

【问题讨论】:

只是为了满足自己和其他学究,m4a 和 ogg 不是音频格式,而是容器格式。 ogg 文件通常包含 Vorbis 编码的音频,但也可以包含例如。 Opus 或 FLAC 编码的音频。 m4a 文件通常包含 AAC 编码的音频,但也可以包含例如。 ALAC 或 ALS 编码音频。 某些容器格式(特别是 MP4)具有数据时间戳,在这种情况下,您根本不需要将标识为静音的数据写入输出文件。否则,您的问题是关于将静音压缩到接近零输出的压缩,并且您没有定义静音 - 无论是真正的静音、噪音还是无语音数据。也就是说,存在相当多的不确定性。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

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

 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)

【讨论】:

有趣(也许毫无意义),作品没有最好的比例,但有最小的文件大小与沉默。这是否比其他结果质量低得多? @xr280xr:所有有损编码(除了 HE-AAC)都被选择为透明的,并留有一些余量。因此,它们应该大致具有可比性。事后看来,我认为我应该将 AAC 设置为 -u vbrq 90,或者甚至更低,以使其更符合其他要求。【参考方案3】:

您可以考虑让编码器在遇到超过一秒左右的静默时“暂停”。那里的任何编解码器都可以被黑客入侵来执行此操作,但在开始进行此类更改之前,您需要了解它们的工作原理......

另一种选择是将 MP3 编码器的输出通过一个去除“额外”无声帧的程序进行管道传输。这可能是较少的整体工作(尽管您仍然需要了解 MP3 帧和第三层位存储库的工作原理)。

【讨论】:

以上是关于静音不会影响文件大小的音频格式的主要内容,如果未能解决你的问题,请参考以下文章

安卓手机上的音乐转换软件

从 AVAudioRecorder 录制的音频中去除静音

简单易用的音频文件格式处理工具

减小转换后的音频文件的大小

能说会道xp中的朗读能否用音频格式转出

iOS 铃声开关使网络音频静音