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

终端正常运行的FFmpeg命令在Python subprocess中报libx264编码器错误

解决方法

核心问题是subprocess默认调用conda环境里的FFmpeg(未编译libx264),而终端用的是系统自带的FFmpeg(带libx264),直接指定系统FFmpeg的绝对路径即可解决。

步骤1:获取系统FFmpeg的绝对路径

  • Linux/macOS:在终端执行 which ffmpeg,得到类似 /usr/bin/ffmpeg 的路径
  • Windows:在命令提示符执行 where ffmpeg,得到类似 C:\Program Files\ffmpeg\bin\ffmpeg.exe 的路径

步骤2:在subprocess中使用绝对路径调用FFmpeg

方式1:shell=True 模式

import subprocess

# 替换成你拿到的系统FFmpeg绝对路径
system_ffmpeg_path = '/usr/bin/ffmpeg'
cmd = f'{system_ffmpeg_path} -framerate 1 -pattern_type glob -i "*.png" -c:v libx264 -pix_fmt yuv420p -vf "crop=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4'
subprocess.run(cmd, shell=True, check=True)

方式2:shell=False 模式(更安全)

import subprocess

system_ffmpeg_path = '/usr/bin/ffmpeg'
cmd = [
    system_ffmpeg_path,
    '-framerate', '1',
    '-pattern_type', 'glob',
    '-i', '*.png',
    '-c:v', 'libx264',
    '-pix_fmt', 'yuv420p',
    '-vf', 'crop=trunc(iw/2)*2:trunc(ih/2)*2',
    'out.mp4'
]
subprocess.run(cmd, check=True)

备选方案:修改环境变量优先找系统FFmpeg

如果不想每次都写绝对路径,可以临时调整PATH环境变量,让系统FFmpeg所在目录排在conda环境前面:

import subprocess
import os

# 替换成系统FFmpeg所在的目录(比如Linux的/usr/bin,Windows的C:\Program Files\ffmpeg\bin)
system_ffmpeg_dir = '/usr/bin'
os.environ['PATH'] = f'{system_ffmpeg_dir}:{os.environ["PATH"]}'

# 之后直接调用ffmpeg即可
cmd = 'ffmpeg -framerate 1 -pattern_type glob -i "*.png" -c:v libx264 -pix_fmt yuv420p -vf "crop=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4'
subprocess.run(cmd, shell=True, check=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:45:50