使用ffmpeg从m4a文件中删除静音

时间:2015-06-27 21:33:53

标签: ffmpeg lossless-compression

我有一个音频文件,其中包含前导和尾随静音,具有以下细节:

编解码器:MPEG AAC音频(mp4a)频道:立体声采样率:44100 Hz比特率:253 kbps

我想删除沉默并保持质量不变。

到目前为止,我已经尝试了

sox 1.mp3 2.mp3 silence 1 0.5 1% reverse silence 1 0.5 1% reverse

这应该删除前导和尾随的沉默。 但出于某种原因,它并没有消除尾随的沉默。这似乎是一个反复出现的问题。在另一个论坛上找到以下内容。

http://ffmpeg-users.933282.n4.nabble.com/How-to-delete-digital-silence-tp4667256p4667356.html

此外,ffmpeg将比特率降低到128kbps。这可以通过添加 -ab 253k 并发出命令来解决:

a

现在的问题是没有删除尾随的静音,当我想处理一批文件时,我不能为每个文件使用相同的比特率(如253kbps)。我想知道如何在这种情况下使用VBR。

我知道我可以使用sox并使用静音和反向功能来修剪沉默。

http://digitalcardboard.com/blog/2009/08/25/the-sox-of-silence"本文中的示例3"

但是sox有以下问题:

  1. 它无法处理m4a文件,我必须将所有文件转换为mp3。
  2. 在sox中使用静音滤波器时,它会将比特率限制为128kbps。

    #gallery li a{display:block}
    #gallery li img{width:100%;}
    

1 个答案:

答案 0 :(得分:0)

您的问题实际上由两个组成,一个是关于尾随静音,第二个是关于比特率

这是对第二个问题的回答: 为了保持音频源的精确质量,您可以使用 -c:a pcm_s16le 和 .wav 容器(如果适用)。

第二个选项是使用质量标度 -q:a N, N(不像 -q:v 是特定于编解码器的,您最好测试不同的值,对于 MP3,它是从 0 到 9,其中 0 是最高质量)

如果两者都不是未压缩的 WAV 和质量等级,但您仍然希望获得原始质量(因此,无需重新编码),答案将很棘手:

  1. 制作一首从一开始就消除静音的曲目。
  2. 从消除静音的曲目中减去原始曲目长度(以了解静音的长度)
  3. 使用 -ss TIMESTAMP(输入的开始时间)和 -c:a copy 转换原始曲目
  4. 对尾部静音重复相同的操作。