Python3 OpenCV图片合成视频无法打开、无画面问题咨询
问题描述
使用Python3搭配OpenCV实现图片合成视频功能时,运行脚本可正常生成视频文件,但打开文件时弹出 "The document could not be opened" 错误提示。
初始实现代码如下:
import cv2 import numpy as np import glob frameSize = (1920, 1080) out = cv2.VideoWriter('output_video.avi',cv2.VideoWriter_fourcc(*'DIVX'), 60, frameSize) for filename in glob.glob('/folder_path/*.jpg'): img = cv2.imread(filename) out.write(img) out.release()
问题更新
替换编码器配置,使用MJPG编码器初始化代码:
out = cv2.VideoWriter('output_video.avi',cv2.VideoWriter_fourcc(*'MJPG'), 60, frameSize)
替换原有DIVX编码器配置后,视频可被播放器唤起,但播放时无任何画面显示。
故障原因与修复方案
该类问题90%以上的核心诱因是写入视频的图片分辨率与初始化VideoWriter时设置的frameSize不匹配,其余常见诱因包括文件读取顺序异常、损坏图片未做校验、编码器兼容性不足,按以下规则修复即可:
- 强制统一所有输出帧的尺寸
代码中硬编码输出分辨率为(1920,1080),只要目标文件夹内存在任意一张jpg分辨率不符合该值,写入的视频就会出现文件损坏、无法打开、播放黑屏的问题。写入帧前必须将所有图片强制缩放到指定输出尺寸,同时增加读取失败校验,避免单张损坏图片导致整个视频文件异常。 - 修正图片读取顺序
glob默认的读取顺序不遵循文件名数字排序规则,会出现10.jpg排在2.jpg之前的问题,该问题不会导致黑屏,但会造成视频帧顺序错乱,需要对读取到的路径列表做排序处理。 - 更换兼容性更好的编码器
Windows平台下DIVX、MJPG编码器兼容性较差,优先选择XVID编码生成avi文件,或使用avc1编码生成mp4文件,可适配绝大多数主流播放器,避免无法唤起播放的问题。
修复后的可直接运行参考代码:
import cv2 import glob # 输出视频参数配置 output_path = 'output_video.avi' frame_size = (1920, 1080) fps = 60 # 选用兼容性更强的XVID编码器 fourcc = cv2.VideoWriter_fourcc(*'XVID') video_writer = cv2.VideoWriter(output_path, fourcc, fps, frame_size) # 按文件名排序图片路径,避免帧顺序错乱 img_path_list = sorted(glob.glob('/folder_path/*.jpg')) for img_path in img_path_list: frame = cv2.imread(img_path) # 跳过无法读取的损坏图片 if frame is None: print(f"跳过无效图片: {img_path}") continue # 强制将帧缩放到设定的输出分辨率,是解决文件损坏、黑屏问题的核心步骤 frame = cv2.resize(frame, frame_size) video_writer.write(frame) video_writer.release()
如果运行后仍存在播放器兼容问题,可将输出文件后缀改为.mp4,编码器替换为cv2.VideoWriter_fourcc(*'avc1'),生成的H.264编码视频可兼容全平台几乎所有主流播放器。
内容的提问来源于stack exchange,提问作者Piero
相关产品推荐
相关产品推荐

