Python OpenCV程序经PyInstaller打包后无法在Windows7系统运行怎么办?
你碰到的报错根因是OpenCV在Win7下默认调用的MSMF(微软媒体基金会)后端不兼容:MSMF在Win7上的默认版本对部分视频格式的RGB24输出支持有缺陷,且OpenCV从4.5版本开始已正式停止支持Windows7系统,会出现各类适配问题。
可按优先级尝试以下解决方案:
- 方案1:降级OpenCV到最后一个适配Win7的版本
OpenCV 4.4.0.46是官方最后一个完全兼容Win7的版本,直接降级即可解决绝大多数适配问题,执行以下命令安装:
安装完成后重新打包程序测试即可。pip install opencv-python==4.4.0.46 # 如果用到contrib模块就执行下面这行,不需要可以跳过 pip install opencv-contrib-python==4.4.0.46 - 方案2:强制指定FFMPEG作为视频读取后端
不想降级OpenCV的话,可以强制VideoCapture调用内置的FFMPEG后端,绕过Win7自带的媒体框架,代码写法如下:
官方预编译的pip版OpenCV默认自带FFMPEG组件,pyinstaller打包时会自动把对应的动态库打包进去,无需额外配置。vidcap = VideoCapture(vid, apiPreference = CAP_FFMPEG) - 方案3:给目标Win7设备安装媒体功能包
如果你用的是Win7 N/KN版本,系统默认没有预装媒体组件,手动安装对应系统版本的Windows7媒体功能包,重启后即可正常运行。 - 方案4:更换视频读取依赖做兜底
如果以上方案都不生效,可以换用ffpyplayer库做视频参数读取,该库基于FFMPEG开发,完全不依赖系统媒体组件,跨版本兼容性更强,示例代码如下:
打包时记得添加ffpyplayer的依赖打包规则即可。from ffpyplayer.player import MediaPlayer def loadVidTimes(vid): if (vid is not None): player = MediaPlayer(vid) meta = player.get_metadata() totalFrames = meta['fps'] * meta['duration'] creation_time = datetime.datetime.fromtimestamp(path.getctime(vid)) return(totalFrames, creation_time)
内容的提问来源于stack exchange,提问作者Alon123
相关产品推荐
相关产品推荐

