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

如何在Python脚本中正确运行ffmpeg命令实现图片叠加透明视频

问题根源

你遇到的无输出无报错问题,由3个常见的subprocess调用坑导致:

  • 工作目录不匹配:subprocess默认继承Python进程的启动目录作为工作路径,如果你不是在素材所在目录启动的Python脚本,ffmpeg会找不到head1.png、hdmiSpitting.mov两个输入文件,直接运行失败。因为你没捕获ffmpeg的输出,Python层面不会主动抛异常,看起来就像"没反应"。
  • 参数转义错误:你用shell=True执行整串命令时,手动加的反斜杠转义会让shell把多余的转义符传给ffmpeg,导致filter_complex滤镜参数解析失败。
  • 命令本身存在笔误:你在终端跑的原命令里音频参数写的是-:a copy,属于输入错误,正确的音频拷贝参数是-c:a copy。
可直接运行的修复代码

不要用整串命令+shell=True的写法,改用参数列表传参,彻底避免转义问题,同时指定素材绝对路径、捕获ffmpeg运行日志方便排查:

import subprocess
import os

# 替换成你自己存放素材的实际文件夹路径
asset_dir = "/path/to/your/assets/folder"
cmd = [
    "ffmpeg",
    "-i", os.path.join(asset_dir, "head1.png"),
    "-i", os.path.join(asset_dir, "hdmiSpitting.mov"),
    "-filter_complex", "[0:v][1:v]overlay=0:0",
    "-pix_fmt", "yuv420p",
    "-c:a", "copy",
    os.path.join(asset_dir, "output3.mov")
]

run_result = subprocess.run(cmd, capture_output=True, text=True)
if run_result.returncode != 0:
    print("生成失败,ffmpeg错误日志:")
    print(run_result.stderr)
else:
    print(f"输出文件已生成,保存路径:{os.path.join(asset_dir, 'output3.mov')}")
额外注意事项
  • 调用ffmpeg这类外部命令时,优先用列表传参的形式,不要拼整串命令开shell,能彻底避免空格、引号转义带来的参数解析问题。
  • 所有素材、输出路径尽量用os.path.join拼接绝对路径,不要依赖相对路径,避免工作目录变化导致的文件找不到问题。
  • 一定要检查外部命令的返回码,捕获标准错误流,不要静默执行,不然出问题根本定位不到原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:24:34