Python调用ffmpeg生成MP4缩略图报FileNotFoundError[WinError2]如何解决
问题原因
这个报错不是找不到你同目录下的MP4视频文件,本质是你安装的ffmpeg-python库只是FFmpeg的Python调用封装,本身不自带FFmpeg核心可执行程序,代码调用ffmpeg.probe()时系统找不到ffprobe.exe,才抛出WinError2的文件找不到错误。
解决方法
按优先级试以下方案:
- 安装FFmpeg并配置系统环境变量
下载Windows版FFmpeg编译包,解压后将包含ffmpeg.exe、ffprobe.exe的bin目录路径添加到系统Path环境变量。配置完成后新开命令行窗口,分别执行ffmpeg -version和ffprobe -version,能正常输出版本号即配置生效,重启IDE运行脚本即可。 - 不想配置全局环境变量的话,在代码里显式指定FFmpeg可执行文件路径
你可以直接把ffmpeg.exe、ffprobe.exe两个文件放到脚本同目录,或者在代码里写死两个程序的绝对路径,修改后的参考代码如下:
import ffmpeg import sys import os in_filename = "ddd.mp4" out_filename = "THUMBNAIL.jpg" # 替换为你本地ffmpeg、ffprobe的实际存放路径 FFMPEG_PATH = r"D:\tools\ffmpeg\bin\ffmpeg.exe" FFPROBE_PATH = r"D:\tools\ffmpeg\bin\ffprobe.exe" def generate_thumbnail(in_filename, out_filename): probe = ffmpeg.probe(in_filename, cmd=FFPROBE_PATH) time = float(probe["streams"][0]["duration"]) // 2 width = probe["streams"][0]["width"] try: ( ffmpeg.input(in_filename, ss=time) .filter("scale", width, -1) .output(out_filename, vframes=1) .overwrite_output() .run(capture_stdout=True, capture_stderr=True, cmd=FFMPEG_PATH) ) except ffmpeg.Error as e: print(e.stderr.decode(), file=sys.stderr) sys.exit(1) generate_thumbnail(in_filename, out_filename)
注:你原代码里导入了requests库但全程没有使用,可以删掉这行导入减少冗余。
- 配置后仍报错的排查点
- 配置完环境变量必须重启IDE/终端,旧会话不会加载新的环境变量配置
- 确认FFmpeg版本和Python环境位数一致(32位Python对应32位FFmpeg,64位对应64位)
- 最后再核对视频文件名:如果开了系统隐藏已知文件扩展名,你看到的
ddd.mp4实际可能是ddd.mp4.mp4,这个问题会在FFmpeg正常调用后报输入文件不存在,不属于当前报错的诱因,最后核对即可。
内容的提问来源于stack exchange,提问作者user18532875
相关产品推荐
相关产品推荐

