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

Tej*_*hah 5 ffmpeg lossless-compression

我有一个音频文件,该文件既有前导的也有末尾的,并且具有以下细节:

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

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

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

ffmpeg -i 1.m4a -af silenceremove=1:0.5:0:1:0.5:0 2.m4a 
Run Code Online (Sandbox Code Playgroud)

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

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 
Run Code Online (Sandbox Code Playgroud)

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

我知道我可以使用袜子,并使用静音和反向功能来修剪静音。

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

但是,袜子有以下问题:

  1. 它无法处理m4a文件,我不得不将所有文件转换为mp3。
  2. 在Sox中使用静音过滤器时,它将比特率的上限限制为128kbps。

    sox 1.mp3 2.mp3 silence 1 0.5 1% reverse silence 1 0.5 1% reverse
    
    Run Code Online (Sandbox Code Playgroud)

小智 0

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

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

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

如果未压缩的 WAV 和 Quality Scale 都不是一个选项,但您仍然想达到原始质量(因此,无需重新编码),答案将很棘手:

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