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

Python通过subprocess调用FFmpeg出现FileNotFoundError的修复方法

修复subprocess调用FFmpeg的错误

错误原因分析

  • subprocess参数格式错误:subprocess.run([subprocess_cmd])将整个命令字符串作为单个元素传入列表,subprocess会把这个完整字符串当作程序名去执行,而非解析为命令+参数,导致系统找不到对应文件。
  • 路径转义问题:未正确处理路径中的反斜杠(如'\src\img\\'),可能引发转义字符解析错误,比如\s会被识别为特殊字符。
  • 文件名多余空格:imagefile和mp4_file末尾添加的空格,会让FFmpeg误认为文件名包含空格,进而找不到目标文件。
  • FFmpeg路径未配置:若FFmpeg未添加到系统环境变量PATH中,系统无法直接找到FFmpeg可执行文件。

修复步骤

  1. 拆分命令参数:将FFmpeg命令拆分为列表形式,每个参数作为独立元素,避免shell解析冲突。
  2. 修正路径写法:使用原始字符串(前缀r)或双反斜杠定义路径,确保路径解析正确。
  3. 移除文件名空格:删除文件名末尾的多余空格,保证文件名匹配正确。
  4. 指定FFmpeg完整路径(可选):若系统PATH中无FFmpeg,直接传入FFmpeg可执行文件的完整路径(如r"C:\ffmpeg\bin\ffmpeg.exe")。

修改后的代码

import subprocess
import os.path

SCRIPT_FILE = os.path.realpath(__file__)
DIRECTORY = os.path.dirname(SCRIPT_FILE)
# 用原始字符串避免转义问题
DATA = r'\src\img\'
DATA2 = r'\src\mp4\'
SAVEFILE = DIRECTORY + DATA
SAVEFILE2 = DIRECTORY + DATA2


def make_plain_video(imagefile, mp4_file):
    # 将命令拆分为独立参数列表
    return [
        "ffmpeg",  # 若FFmpeg不在PATH,替换为完整路径如r"C:\ffmpeg\bin\ffmpeg.exe"
        "-loop", "1",
        "-i", imagefile,
        "-c:v", "libx264",
        "-t", "60",
        "-pix_fmt", "yuv420p",
        "-vf", "scale=1080:1920",
        mp4_file
    ]

# 移除文件名末尾多余空格
imagefile = SAVEFILE + "background.jpeg"
mp4_file = SAVEFILE2 + "plain_video.mp4"
subprocess_cmd = make_plain_video(imagefile, mp4_file)
# 直接传入参数列表执行
sub = subprocess.run(subprocess_cmd, check=True)  # check=True可在执行失败时抛出异常,便于调试
print(" ".join(subprocess_cmd))

额外说明

  • 添加check=True后,若FFmpeg执行失败,subprocess会直接抛出异常,更便于定位问题。
  • 若仍出现FFmpeg找不到的错误,需确认FFmpeg是否安装完成,或是否已添加到系统环境变量PATH中,也可直接在命令列表中指定FFmpeg的完整路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:17:17