如何删除最后 4 秒的 MP3 文件?

Lar*_*ryM 10 ffmpeg mp3 sox

我有一组 MP3 文件,我想删除最后 4 秒的内容。我知道,如果我知道每个文件的持续时间,我可以这样做:

ffmpeg -t ${1} -i inputfilename -acodec copy -vcodec copy outputfilename
Run Code Online (Sandbox Code Playgroud)

哪里$1是文件的持续时间减去 4 秒。

无论文件长度如何,我都非常喜欢只截断最后 4 秒的内容。“在 EOF 前 4 秒停止”。

注意:我很难弄清楚这个命令行,如果有更简单的版本,我很乐意看到它。

llo*_*gan 5

改编自Cut video with ffmpeg

ffmpeg -i input.mp3 -ss 4 -i input.mp3 -c copy -map 0:a -map 1:a -shortest -f nut - | ffmpeg -y -f nut -i - -c copy -map 0:0 output.mp3
Run Code Online (Sandbox Code Playgroud)

这样做是在回旋方法中使用相同的输入两次进行修剪,而无需知道持续时间且无需重新编码。

  1. 第二个输入从开始有 4 秒的截止时间。
  2. -shortest选项使用最短的输入持续时间来确定输出的持续时间。这导致从第一个输入中截断最后 4 秒以匹配截断的第二个输入的持续时间。
  3. 因为需要两个流-shortest才能工作,所以它们通过管道传输到另一个 ffmpeg 以删除第二个输入。


and*_*.46 5

有时在处理音频文件而不是音频加视频时,比 FFmpeg更微妙的应用程序是 SoX。在 Ubuntu 上安装功能齐全的 SoX,如下所示:

sudo apt-get install sox libsox-fmt-all
Run Code Online (Sandbox Code Playgroud)

要从 mp3 文件的末尾修剪 4 秒,需要以下非常简单的命令:

sox input.mp3 output.mp3 trim 0 -4
Run Code Online (Sandbox Code Playgroud)

在本例中,'0' 是文件开头的起始位置,而 '-4' 建立所需段的结束位置:距结尾 4 秒。

对此的多种变体,具有多个位置和保存的段,是可能的。例如,正如您在评论中提到的,如果您只想删除文件开头的 2 秒,则命令行为:

sox input.mp3 output.mp3 trim 2
Run Code Online (Sandbox Code Playgroud)

在此示例中,不需要结束位置。如果您想要更复杂的用法,SoX 手册页包含更多修剪命令的示例...