OpenCV VideoWriter设为2fps时生成损坏视频的问题求助
解决思路与建议
针对你遇到的2fps设置下视频损坏的问题,可尝试以下方案:
检查原视频帧率的精度问题
原视频的实际帧率可能不是精确的整数2,比如是1.999或2.001,你用int(reader.get(cv2.CAP_PROP_FPS))转换成整数后,写入时硬编码为2可能导致时间轴不匹配。建议直接使用原视频的浮点型帧率,或者精确传入2.0而非整数2:# 替换原writer初始化代码 fps_original = reader.get(cv2.CAP_PROP_FPS) writer = cv2.VideoWriter(cropped_video, fourcc, fps_original, (frame_width, frame_height)) # 或者精确传入浮点2.0 writer = cv2.VideoWriter(cropped_video, fourcc, 2.0, (frame_width, frame_height))更换视频编码格式
你当前使用的XVID编码对低帧率的兼容性可能不佳,尝试更换为MP4V或H.264相关编码:# 使用MP4V编码 fourcc = cv2.VideoWriter_fourcc(*'MP4V') # 或者尝试H.264(需确保OpenCV支持) fourcc = cv2.VideoWriter_fourcc(*'avc1')验证写入帧的尺寸一致性
虽然代码中做了resize,但仍需确认裁剪后resize的帧尺寸和VideoWriter初始化的尺寸完全一致。可以在写入前添加打印检查:print(f"Frame shape: {frame.shape}, Writer size: ({frame_width}, {frame_height})")如果尺寸不匹配,调整resize的参数确保严格对应。
强制刷新写入缓存
在释放writer前调用flush()方法,确保所有帧都写入文件,避免低帧率下缓存未完全写入:writer.flush() writer.release()检查原视频的帧时间戳
部分播放器对低帧率视频的时间戳敏感,若上述方法无效,可尝试通过ffmpeg重新编码原视频为标准2fps后再处理,避免原视频的时间轴异常导致写入问题。
内容的提问来源于stack exchange,提问作者Maxima86
相关产品推荐
相关产品推荐

