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

Python中subprocess执行ffmpeg命令失败,终端运行正常

解决Python subprocess调用ffmpeg失败的问题

问题根源分析

你遇到的两个核心问题:

  • Fontconfig环境变量缺失:subprocess默认不会完全继承终端的环境变量,Fontconfig依赖的FONTCONFIG_FILE或FONTCONFIG_PATH未被设置,导致报错找不到默认配置文件。
  • drawtext参数引号冗余:使用subprocess的列表模式传参时,不需要给字体路径加双引号——列表会自动处理参数分割,额外的引号会被当成路径的一部分,导致ffmpeg找不到字体文件。

具体修复步骤

1. 修正字体路径参数写法

去掉drawtext=fontfile="..."里的双引号,直接写路径即可:

FONT_LOC = 'C:/Users/acer/AppData/Local/Microsoft/Windows/Fonts/jf-openhuninn-1.1.ttf'

2. 给subprocess添加Fontconfig环境变量

在Windows下,Fontconfig的配置文件通常随ffmpeg安装,你可以手动指定FONTCONFIG_FILE路径,或者直接继承终端的环境变量确保配置能被找到:

import os
import subprocess

FONT_LOC = 'C:/Users/acer/AppData/Local/Microsoft/Windows/Fonts/jf-openhuninn-1.1.ttf'
duration = '30'
subtitle='abc'
output_file = 'output_test'

# 复制终端环境变量,确保Fontconfig能读取到配置
env = os.environ.copy()
# 若明确知道fonts.conf路径,可手动指定,例如:
# env['FONTCONFIG_FILE'] = 'C:/ffmpeg/etc/fonts/fonts.conf'

comd = [
    "ffmpeg",
    "-f", "lavfi",
    "-i", f"color=c=black:s=1280x720:d={duration}",
    "-vf", f'''drawtext=fontfile={FONT_LOC}:text='{subtitle}':fontcolor=white:fontsize=24:x=(w-text_w)/2:y=(h-text_h)/2''',
    "-c:v", "libx264",
    "-t", duration,
    "-pix_fmt", "yuv420p",
    f"{output_file}.mp4"
]

# 打印命令确认参数(可选)
print(' '.join(comd))
# 执行命令并传入环境变量
subprocess.run(comd, check=True, env=env)

3. 额外排查点

  • 确认ffmpeg在系统PATH中,或直接使用绝对路径调用(如"C:/ffmpeg/bin/ffmpeg")。
  • 测试字体文件可访问性:在终端执行ffmpeg -v debug -f lavfi -i color=c=black:s=100x100:d=1 -vf drawtext=fontfile={FONT_LOC}:text='test' test.mp4,查看详细日志确认路径是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:53:20