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

Node fluent-ffmpeg如何实现视频居中、添加内边距及背景图片

fluent-ffmpeg 实现视频居中叠加自定义背景方案

你原有代码使用autopad只能生成纯色填充背景,无法替换为自定义图片,且两次转码会带来额外的画质损耗。可以通过复合滤镜一次性完成需求,实现逻辑如下:

const ffmpeg = require('fluent-ffmpeg');
// 按需替换以下路径
const inputVideoPath = '你的输入视频本地路径';
const customBgPath = '你的自定义背景图本地路径(建议提前调整为1920*1080尺寸)';
const finalOutputPath = '最终输出视频保存路径';

ffmpeg()
  // 加载自定义背景图,设置循环适配视频时长
  .input(customBgPath)
  .inputOptions(['-loop 1'])
  // 加载待处理的原视频
  .input(inputVideoPath)
  .complexFilter([
    // 第一步:将视频缩放到640*480,保持原比例不变形
    {
      filter: 'scale',
      options: {
        w: 640,
        h: 480,
        force_original_aspect_ratio: 'decrease'
      },
      inputs: '1:v',
      outputs: 'scaled_video'
    },
    // 第二步:将缩放后的视频填充到刚好640*480尺寸,空白处用粉色填充(可自行修改颜色)
    {
      filter: 'pad',
      options: {
        w: 640,
        h: 480,
        x: '(ow - iw) / 2',
        y: '(oh - ih) / 2',
        color: 'pink'
      },
      inputs: 'scaled_video',
      outputs: 'padded_video'
    },
    // 第三步:将处理好的视频居中叠加到1920*1080的背景图上
    {
      filter: 'overlay',
      options: {
        x: '(main_w - overlay_w) / 2',
        y: '(main_h - overlay_h) / 2'
      },
      inputs: ['0:v', 'padded_video'],
      outputs: 'final_video'
    }
  ])
  // 映射输出流:视频用合成后的流,音频直接复用原视频音频
  .outputOptions([
    '-map final_video',
    '-map 1:a',
    '-c:v libx264',
    '-c:a aac',
    // 强制输出时长和原视频一致,避免背景图循环导致无限生成
    '-shortest'
  ])
  .on('error', err => {
    console.log('处理出错:' + err.message);
  })
  .on('end', () => {
    console.log('处理完成!');
  })
  .save(finalOutputPath);

注意事项

  • 如果你的背景图未提前调整为1920*1080,可在复合滤镜的最开头新增背景图缩放节点,将背景图先缩放到目标尺寸即可
  • 如果不需要视频缩放后的粉色填充,可将pad滤镜的color参数设置为#00000000(透明色)即可
  • 本方案无需生成中间临时文件,仅一次转码即可完成所有处理,性能和画质表现都优于多次转码的实现

内容的提问来源于stack exchange,提问作者seikida

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:24:01