ffmpeg混音以及音视频混合处理
目录
ffmpeg混音以及音视频混合处理
ffmpeg混音以及音视频混合处理
ffmpeg的命令
这里是我最近研究的音视频混合处理的一些ffmpeg的命令
// 音频拼接
ffmpeg -i "concat:first.mp3|second.mp3" -acodec copy third.mp3 (third格式和first保持一致)
// 音频拼接
ffmpeg -i "concat:first.mp3|second.mp3" -i second.mp3 -acodec copy test.mp3 -map_metadata 0:1 (third格式和second保持一致)
// 音视频混合,不调整音量
ffmpeg -i ../../video/demo.mp4 -i ../../video/new1.mp3 -c:v copy -map 0:v:0 -filter_complex "[0:a][1:a]amerge=inputs=2[aout]" -map "[aout]" -ac 2 ../../video/mix_amerge.mp4
// 音频混合,调整第1个音频的音量和第2个音频的音量
ffmpeg -i ../../video/output.mp3 -i ../../video/new1.mp3 -filter_complex "[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a0]; [1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.9[a1]; [a0][a1]amerge=inputs=2[aout]" -map "[aout]" -ac 2 ../../video/mix_v0.5.mp3
// 音频混合,调整第1个音频的音量和第2个音频的音量
ffmpeg -i ../../video/output.mp3 -i ../../video/new2.mp3 -filter_complex "[0:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.5[a0]; [1:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.9,adelay=5000|5000|5000,apad[a1]; [a0][a1]amerge=inputs=2[aout]" -shortest -map "[aout]" -ac 2 ../../video/mix_new1.mp3
// apad -shortest 是使音频长度为最长
// adelay 延时播放时间
// 音视频混合,调整第1个音频的音量和第2个音频的音量
ffmpeg -i ../../video/demo.mp4 -i ../../video/new2.mp3 -filter_complex "[0:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.4[a0]; [1:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.9,adelay=5000|5000|5000[a1]; [a0][a1]amix=inputs=2:duration=first[aout]" -map [aout] -ac 2 -c:v copy -map 0:v:0 ../../video/mix_amerge3.mp4
或者
ffmpeg -i ../../video/demo.mp4 -i ../../video/new2.mp3 -filter_complex [0:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.4[a0];[1:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.9,adelay="5000|5000|5000"[a1];[a0][a1]amix=inputs=2:duration=first[aout] -map [aout] -ac 2 -c:v copy -map 0:v:0 E:\software\video\outfileName.mp4 E:\software\outfileName.mp4
node执行ffmpeg命令
只需要把 ffmpeg.exe放在node执行的目录下 ,就可以使用node来执行ffmpeg命令。
实例代码:
const child = require('child_process')
child.exec("ffmpeg -i "concat:first.mp3|second.mp3" -acodec copy third.mp3", function(err){
if (err) {
console.log(err.message);
info.message = err.message;
event.sender.send(data.callback, JSON.stringify(info))
} else {
info.flag = true;
info.message = '音频处理保存成功'
event.sender.send(data.callback, JSON.stringify(info))
}
})