使用ffmpeg从m4a文件中移除前导和尾随静音。

8

我有一个音频文件,开头和结尾都有静音,并具有以下规格:

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

我想去掉静音但保持质量不变。

到目前为止我已经尝试过

ffmpeg -i 1.m4a -af silenceremove=1:0.5:0:1:0.5:0 2.m4a 

这应该同时删除前导和尾随的静音。但出于某种原因,它没有删除尾随的静音。这似乎是一个经常出现的问题。在另一个论坛上找到了以下信息。

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

此外,FFmpeg 会将比特率降低到128kbps。我可以通过添加-ab 253k并执行以下命令来解决这个问题:
ffmpeg -i 1.m4a -af silenceremove=1:0.5:0:1:0.5:0 -ab 253k 3.m4a 

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

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

http://digitalcardboard.com/blog/2009/08/25/the-sox-of-silence“本帖子中的示例3”

但是sox有以下问题:
  1. It can't handle m4a files, I had to convert all files to mp3.
  2. When using the silence filter in sox it caps the bitrate at 128kbps.

    sox 1.mp3 2.mp3 silence 1 0.5 1% reverse silence 1 0.5 1% reverse
    
1个回答

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. 对尾声静音重复相同步骤。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接