Python/OpenCV写入输出视频后Windows端无法播放如何解决
问题描述
业务逻辑为读取视频送入目标检测器,添加检测边界框后输出带标注的视频,开发时通过VS Code远程开发扩展经SSH连接Ubuntu 20.04环境开展工作,遇到视频输出异常:
- 输出的视频可正常写入磁盘,OpenCV也能正常读取输出文件的帧,但在本地Windows 10设备上用系统自带媒体播放器播放时,提示「Server execution failed」错误
- 先后尝试OpenCV原生
VideoWriter接口、torchvision.io.write_video接口保存视频,故障表现完全一致,Tensorboard也无法正常加载播放该类输出视频
可稳定复现问题的OpenCV代码如下:
import cv2 cap = cv2.VideoCapture("video.mov") height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) fourcc = cv2.VideoWriter_fourcc(*'MJPG') out = cv2.VideoWriter('output5.avi', fourcc, 30, (width, height), isColor=True) while cap.isOpened(): ret, frame = cap.read() if not ret: break frame = cv2.resize(frame, (width, height)) out.write(frame) cap.release() out.release()
根因分析
初期排查方向误判为远程Ubuntu环境的依赖配置问题,最终确认故障和代码逻辑、远程环境无关:Windows系统自带媒体播放器存在编码兼容限制,无法读取MJPG这类编码的视频文件,才会出现播放报错、无法加载的问题。
解决方案
- 直接更换支持多编码格式的第三方媒体播放器(如VLC媒体播放器)即可正常播放输出视频,实测更换后问题完全解决
- 若存在必须使用Windows自带播放器播放的强需求,可调整视频写入时的编码参数,替换为Windows原生支持的编码格式、匹配对应文件后缀后再输出。
内容的提问来源于stack exchange,提问作者tonyd629
相关产品推荐
相关产品推荐

