上一个问题:如何使用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
命令之内,先对音频进行转码,再进行拼接?(这样可以不用产生中间文件。)
当然不需要,作为多媒体处理的万金油,你能想到的ffmpeg开发者能想不到?你完全可以使用ffmpeg的filter功能将文件拼接之后一把转码就行了,无需中间文件,而且减少转码次数增加最终的质量。
另外如果你的编码都是一致的,甚至可以直接拼接流不用转码,可以用到ffmpeg的
-c copy
混流器,不但速度最快而且完全无损源的质量。这些内容你都可以google ffmpeg相关文档解决