使用ffmpeg的concat命令对音频进行拼接前,在同一个命令内能否先对音频进行加工?

上一个问题:如何使用NodeJS在服务端拼接来自js前端录制的音频?
https://segmentfault.com/q/10...

在上一个问题中,我在web前端使用js-audio-recorder录制的语音,但无法在后端进行拼接,尝试了多种方法并经过老哥的提示之后,终于成功使用ffmpeg实现对语音的拼接。
具体操作如下:
一、先将需要拼接的音频转码,这一步的目的应该是为了统一编码方式(原先通过前端的recorder录制的音频,不知道是哪里出了问题,可能是方法本身,也可能是录音设备的问题。具体我也不清楚,因为我对这方面没有研究,只为了达到目的。)

ffmpeg -i a1.wav -acodec libmp3lame out1.mp3
ffmpeg -i a2.wav -acodec libmp3lame out2.mp3

成功转化音频之后,再对音频进行拼接:

ffmpeg -i "concat:out1.mp3|out2.mp3" -acodec copy out.mp3

这样,得到的out.mp3就是我所要的。

但现在问题又来了,按照上面的方法,拼接音频需要分成两步:
第一步:音频转码
第二步:音频拼接
在第一步中,会产生 out1.mp3 这样的中间文件,这不是我想要的。

作为一个前端自学者,学点nodejs的后端知识,只是为了更好地学好前端,所以目前我后端懂的不多,我只能是在需要拼接的时候将音频转码、拼接,再删除中间文件。或者从前端获取音频数据之后,先转码处理。

所以我想,是否能在一个ffmpeg命令之内,先对音频进行转码,再进行拼接?(这样可以不用产生中间文件。)

阅读 4.1k
1 个回答

当然不需要,作为多媒体处理的万金油,你能想到的ffmpeg开发者能想不到?你完全可以使用ffmpeg的filter功能将文件拼接之后一把转码就行了,无需中间文件,而且减少转码次数增加最终的质量。

另外如果你的编码都是一致的,甚至可以直接拼接流不用转码,可以用到ffmpeg的-c copy混流器,不但速度最快而且完全无损源的质量。

这些内容你都可以google ffmpeg相关文档解决

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题