如何使用FFmpeg在指定时间点将一个音频文件插入另一个音频文件?若FFmpeg无法实现,是否有其他命令行工具可完成该操作?
如何将一段音频插入到另一段音频的指定位置?
没问题,FFmpeg完全可以搞定这个需求!而且操作起来也不算复杂,我给你拆解一下具体的实现方法,以及备选的命令行工具方案。
用FFmpeg实现的具体命令
核心思路是把原音频拆成「前30分钟片段」+「要插入的5秒音频」+「原音频剩余片段」,然后将这三部分拼接起来。直接用这个命令就行:
ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex \ "[0:a]split[a1][a2]; \ [a1]atrim=end=1800[a1_trim]; \ [a2]atrim=start=1800[a2_trim]; \ [a1_trim][1:a][a2_trim]concat=n=3:v=0:a=1[outa]" \ -map "[outa]" output.mp3
我给你解释下每个参数的作用:
-i input1.mp3:指定你的1小时原音频文件;-i input2.mp3:指定要插入的5秒音频文件[0:a]split[a1][a2]:把原音频的音频流拆分成两个副本,分别用来截取前半段和后半段atrim=end=1800:截取原音频的前1800秒(也就是30分钟),得到a1_trim流atrim=start=1800:截取原音频从1800秒开始到结尾的部分,得到a2_trim流concat=n=3:v=0:a=1:把a1_trim(前30分钟)、1:a(插入音频)、a2_trim(剩余部分)这三个音频流按顺序拼接,n=3表示3个输入流,v=0表示不需要视频,a=1表示保留音频-map "[outa]":指定输出的音频流,最后生成output.mp3文件
如果你的音频不是MP3格式(比如WAV、FLAC),直接替换文件名后缀就行,FFmpeg会自动适配编码。另外如果原音频和插入音频的采样率、声道数不一致,可以在命令末尾加上-ar 44100 -ac 2来统一参数,避免拼接后出现音质问题。
备选工具:SoX(Sound eXchange)
如果你不想用FFmpeg,SoX也是一个非常好用的命令行音频处理工具,步骤分两步:
- 先把原音频切成两段:
# 截取原音频前30分钟(1800秒) sox input1.mp3 part1.mp3 trim 0 1800 # 截取原音频从30分钟开始到结尾的部分 sox input1.mp3 part2.mp3 trim 1800
- 把三段音频按顺序拼接:
sox part1.mp3 input2.mp3 part2.mp3 output.mp3
这个方法更直观,适合对命令行不太熟悉的用户,同样要注意确保所有音频的参数一致,不然SoX可能会提示错误或者自动转换。
内容的提问来源于stack exchange,提问作者KacperM
相关产品推荐
相关产品推荐

