如何使用fluent-ffmpeg实现视频画中画并保留画中画音频?
用fluent-ffmpeg实现画中画并合并画中画音频
你当前的代码仅完成了视频画中画的合成,未处理音频合并逻辑。要将画中画视频的音频合并到主视频中,需在复杂滤镜中添加音频处理步骤,同时指定最终输出的音视频流。
修改后的代码
ffmpeg() .input(mainVideo) .input(pipVideo) .complexFilter([ // 视频画中画合成 { filter: 'overlay', options: { x: 0, y: 0, eof_action: 'pass' }, inputs: ['0:v', '1:v'], outputs: 'v_out' }, // 音频合并:将主视频音频与画中画音频合并为多声道 // 如需混音为单声道,替换为 { filter: 'amix', options: { inputs: 2, duration: 'longest' }, inputs: ['0:a', '1:a'], outputs: 'a_out' } { filter: 'amerge', options: { inputs: 2 }, inputs: ['0:a', '1:a'], outputs: 'a_out' } ]) // 指定使用合成后的视频和音频流作为输出 .outputOptions('-map', '[v_out]', '-map', '[a_out]') // 若amerge后出现音频通道数兼容问题,强制设置为双声道 // .outputOptions('-ac', '2') .saveToFile(outputFile) .on('end', function () { console.log('处理完成') }) .on('error', function(err) { throw new Error(err.message) })
关键说明
- 音频合并方式选择:
amerge:将两路音频流合并为多声道(如两个单声道合并为双声道),保留各自独立的声道。amix:将两路音频混音成单声道输出,duration: 'longest'参数确保输出音频时长与较长的原音频一致。
- 输出流映射:
-map '[v_out]'和-map '[a_out]'用于明确告诉ffmpeg使用我们合成后的音视频流,避免自动选择流导致的问题。 - 通道数兼容:若使用
amerge后出现格式不兼容报错,可添加-ac 2参数强制将输出音频设置为双声道。
内容的提问来源于stack exchange,提问作者Nikita Lvov
相关产品推荐
相关产品推荐

