我有一个 .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)