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

PyInstaller打包含ffmpeg-python的Python脚本遇依赖及路径问题

问题解决方案

1. 修复Hidden import 'ffmpeg-python' not found报错

你指定的隐藏导入名称错误,ffmpeg-python是包的PyPI发布名称,但实际代码中导入的模块名是ffmpeg。修改PyInstaller命令:

pyinstaller --windowed --hidden-import "ffmpeg" --noconsole --icon=app.ico --name "app" main.py

也可以直接在生成的.spec文件中添加隐藏导入配置:

hiddenimports=['ffmpeg'],

2. 解决exe执行时的[WinError 2] File not found错误

该错误大概率是找不到ffmpeg可执行文件(而非输入输出文件,日志已确认路径正确)。ffmpeg-python只是Python封装层,实际依赖系统中的ffmpeg.exe,打包后exe的运行环境无法自动定位到它,可按以下方法处理:

方法1:将ffmpeg.exe放入exe目录并在代码中指定路径

  1. 下载Windows版ffmpeg静态编译包,解压后取出ffmpeg.exe
  2. 将ffmpeg.exe放到打包后生成的app.exe同一目录下
  3. 在代码开头添加路径指定逻辑:
import os
import sys
import ffmpeg

# 指定ffmpeg.exe的路径(与当前exe同目录)
ffmpeg.EXECUTABLE = os.path.join(os.path.dirname(sys.executable), 'ffmpeg.exe')

方法2:将ffmpeg.exe加入系统PATH

把ffmpeg.exe所在目录添加到系统环境变量PATH中,打包后的exe即可直接找到ffmpeg。

额外排查:捕获更详细的错误信息

修改.run()参数,捕获stderr输出以确认具体报错原因:

try:
    result = (ffmpeg
    .input(input)
    .output(output, vcodec='copy', ss=clip_start, to=clip_end, acodec='copy')
    .global_args('-y')
    .run(capture_stdout=True, capture_stderr=True))
except Exception as e:
    # 打印ffmpeg的标准错误输出
    stderr = e.stderr.decode('utf-8') if hasattr(e, 'stderr') else ''
    self.logger.error(f'ffmpeg错误详情: {stderr}')
    # 原有日志代码...

3. 处理fiona._shim和importlib_resources.trees的警告

如果你的代码没有直接使用fiona库,这些警告是依赖包间接引入的,不会影响程序正常运行,可直接忽略。若一定要消除警告:

  • 安装缺失的依赖库:
pip install fiona importlib-resources
  • 安装后仍有警告的话,在.spec文件中补充隐藏导入:
hiddenimports=['ffmpeg', 'fiona._shim', 'importlib_resources.trees'],

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:26:13