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

Windows环境下Python subprocess调用ffmpeg遇FileNotFoundError求助

解决subprocess调用ffmpeg时的FileNotFoundError问题

你已经配置了ffmpeg环境变量但还是报错,大概率是这几个原因,按顺序排查:

  • 重启你的Jupyter Notebook/终端:环境变量修改后,已打开的程序不会自动读取新的环境变量,必须重启进程才能生效。这是最常见的坑,先试这个。
  • 验证ffmpeg是否真的能在命令行运行:打开新的命令提示符(cmd),输入ffmpeg -version,如果能正常输出版本信息,说明环境变量没问题;如果不行,检查系统变量Path里是不是真的加了ffmpeg的bin目录(比如C:\ffmpeg\bin),确认后重启命令行再试。
  • 手动指定ffmpeg的完整路径:如果环境变量还是不生效,直接在代码里写ffmpeg的绝对路径,比如把'ffmpeg'改成'C:/ffmpeg/bin/ffmpeg.exe'(注意用斜杠/或者双反斜杠\\)。
  • 在代码里添加ffmpeg存在性检查:用shutil.which()提前验证是否能找到ffmpeg,避免笼统的异常提示,代码更健壮。

修改后的代码示例

import os
import subprocess
import shutil

# 先检查ffmpeg是否可用
ffmpeg_path = shutil.which('ffmpeg')
if not ffmpeg_path:
    raise Exception("找不到ffmpeg,请确认已安装并添加到环境变量,或直接指定ffmpeg路径")

# 检查assets文件夹
if not os.path.exists("assets"):
    raise Exception("请创建assets文件夹并放入MKV文件")

# 创建results文件夹
if not os.path.exists("results"):
    os.mkdir("results")

mkv_list = os.listdir("assets")
converted_count = 0

for mkv in mkv_list:
    name, ext = os.path.splitext(mkv)
    if ext.lower() != ".mkv":
        print(f"跳过非MKV文件:{mkv}")
        continue

    output_name = name + ".mp4"
    input_path = os.path.join("assets", mkv)
    output_path = os.path.join("results", output_name)

    try:
        # 用找到的ffmpeg路径调用
        subprocess.run(
            [ffmpeg_path, '-i', input_path, "-codec", "copy", output_path], 
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            text=True
        )
        converted_count += 1
        print(f"转换完成:{mkv} -> {output_name}")
    except subprocess.CalledProcessError as e:
        raise Exception(f"转换{ mkv }失败:{ e.stderr }")
    except Exception as e:
        raise Exception(f"执行出错:{ str(e) }")

print(f"{converted_count}个视频已转换完成")
os.startfile("results")

额外优化点

  1. 用os.path.join()拼接路径,避免不同系统的路径分隔符问题
  2. 处理小写的.mkv后缀(比如.MKV)
  3. 跳过非MKV文件而不是直接终止程序
  4. 捕获具体的subprocess.CalledProcessError,打印ffmpeg的错误输出,方便排查转换失败的原因
  5. 修复了原代码中"ben"的拼写错误(改为"been")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:20:01