如何从 m4a 音频文件的前面修剪前 8 秒和最后 8 秒,然后修剪末尾并保留文件的其余部分

如何从 m4a 音频文件的前面修剪前 8 秒和最后 8 秒,然后修剪末尾并保留文件的其余部分

我有一个 .m4a 音频文件,希望去掉前 8 秒并保持文件的其余部分完好无损,然后一旦完成第一步,就丢弃文件的最后 8 秒并保持文件的其余部分完好无损。

因此,本质上前 8 秒将被完全丢弃/从文件中删除,并且文件将从第 8 秒开始,就好像前 8 秒从未存在过一样。
同样,文件的最后 8 秒将被丢弃。

完成这一切无需重新编码文件。

编辑:我在这里和其他地方看到了其他答案,但我无法开始工作,因为其他答案需要给出修剪部分的开始和结束时间。我需要的是 ffmpeg 提供 .m4a 音频文件的结束时间戳和开始时间戳,而不必解决这个问题并将其输入命令中)

我用这个来修剪文件的前面

ffmpeg -t 00:00:08 -acodec copy -i in_file.m4a out_file.m4a

但没有用于修剪文件末尾的任何内容。

我无法得到我必须做的工作。

(我在这里和其他地方看到了一些其他答案,但似乎没有什么能让我到达那里)

答案1

这将从文件前面修剪前 8 秒而不重新编码,并保留输出文件中除前 8 秒之外的所有内容

ffmpeg -ss 8 -i in_file.m4a -c copy out_file.m4a

此外,下面的行将修剪音频文件末尾的最后 8 秒。下面的行似乎很复杂,但这是我能看到的最简单的解决方案,它将修剪文件的末尾:

ffmpeg -i in_file.m4a -ss 8 -i in_file.m4a -c copy -map 1:0 -map 0 -shortest -f nut - | ffmpeg -y -f nut -i - -map 0 -map -0:0 -c copy out_file.m4a

答案2

除了 ffmpeg 之外,您还可以使用更专用于音频的 SoX,但您首先需要将音频文件转换为 wav 或 mp3,我认为 SoX 不适用于 m4a。

ffmpeg -i input.m4a output.wav

然后安装SoX后

sudo apt-get install sox
sox input.wav output.wav trim 8 -8

有点相关,如果你只是想删除静音部分,你也可以使用 Librosa 来实现这一点。

要在 Librosa 中使用 m4a 格式,您需要在 Debian/Ubuntu 上安装 ffmpeg 和 GStreamer:

sudo apt install libgstreamer1.0-0 

sudo apt install ffmpeg

然后在 python 中你可以使用:

import librosa 
y, sr = librosa.core.load(m4a_audio_file, sr=16000)
yt, index = librosa.effects.trim(y)
original_duration= librosa.get_duration(y)
new_duration = librosa.get_duration(yt)

相关内容