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目录并在代码中指定路径
- 下载Windows版ffmpeg静态编译包,解压后取出
ffmpeg.exe - 将
ffmpeg.exe放到打包后生成的app.exe同一目录下 - 在代码开头添加路径指定逻辑:
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
相关产品推荐
相关产品推荐

