You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 15:33:23