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

为什么Django部署在Windows虚拟服务器时subprocess调用ffmpeg不执行

  • 优先替换ffmpeg为绝对路径
    你本地配置的环境变量仅对当前登录的用户账号生效,Windows服务器上站点运行时使用的是独立服务账号(如IIS应用池身份、服务账号),不会加载你的用户环境变量,直接写死ffmpeg的全路径(例如C:\ffmpeg\bin\ffmpeg.exe)可排除环境变量读取失败问题。
  • 替换字符串拼接为列表传参
    现有直接拼接命令字符串的写法容错率极低,只要media_in或image_out的路径包含空格、中文、特殊字符就会直接导致命令解析失败。且不要开启shell=True,避免额外的Windows命令行转义问题,正确写法参考下面的代码示例。
  • 增加错误日志捕获
    现有代码没有捕获执行输出,无法定位具体错误原因,通过capture_output参数可拿到ffmpeg的标准输出和错误输出,直接就能看到是权限不足、文件不存在还是参数错误等问题。
  • 检查目录读写权限
    确认站点运行账号对media_in所在目录有读取权限、对image_out所在目录有写入权限,Windows服务器默认会限制站点账号的目录访问权限,没有对应权限会直接导致输出文件生成失败。
import subprocess

# 填写你服务器上ffmpeg的实际绝对路径
FFMPEG_PATH = r"C:\ffmpeg\bin\ffmpeg.exe"

# 所有参数以列表形式传入,自动处理转义和空格
cmd = [
    FFMPEG_PATH,
    "-i", media_in,
    "-ss", "00:00:01",
    "-frames:v", "1",
    "-vf", "scale=w='min(150, iw*3/2):h=-1'",
    image_out
]

# 捕获执行输出用于排查
run_result = subprocess.run(
    cmd,
    capture_output=True,
    text=True,
    shell=False
)

# 可将以下内容写入站点日志,就能看到具体报错信息
print(f"执行返回码:{run_result.returncode}")
print(f"ffmpeg输出:{run_result.stdout}")
print(f"ffmpeg错误信息:{run_result.stderr}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:48:02