You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中OpenCV无法读取MATLAB生成的未压缩AVI视频

解决OpenCV读取MATLAB生成的未压缩彩色AVI时的段错误问题

问题现象

  • 使用OpenCV的cap.read()读取MATLAB VideoWriter生成的未压缩彩色AVI文件时,程序直接触发zsh: segmentation fault python3 t.py崩溃
  • cap.isOpened()返回True,视频FPS、宽高元数据可正常获取,但cap.get(cv2.CAP_PROP_FOURCC)返回0.0
  • 同方式生成的灰度AVI可正常读取;视频能在IINA正常播放,ffmpeg可提取单帧但无法直接转换格式

原因分析

MATLAB生成的未压缩彩色AVI采用的帧存储结构/编码格式,与OpenCV依赖的FFmpeg解码器存在兼容性问题,导致解码时出现非法内存访问,触发段错误。

解决方案

1. 从源头修改MATLAB的AVI生成方式

避免使用未压缩格式,指定OpenCV兼容的编码(如MJPG)生成视频:

% MATLAB代码示例
vidObj = VideoWriter('output.avi', 'Motion JPEG AVI');
open(vidObj);
% 写入帧逻辑...
close(vidObj);

生成的MJPG编码AVI可直接被OpenCV读取,无崩溃问题。

2. 用ffmpeg预处理现有视频

若无法重新生成视频,可先提取原始帧再重新封装为兼容格式:

# 提取所有帧为图片
ffmpeg -i input.avi -f image2 frame_%04d.png
# 重新封装为MJPG编码的AVI(替换30为原视频FPS)
ffmpeg -framerate 30 -i frame_%04d.png -c:v mjpeg output_compat.avi

处理后的视频可被OpenCV正常读取。

3. 尝试指定OpenCV读取后端(仅Windows有效)

Windows环境下可强制使用VFW后端读取,绕过FFmpeg的兼容性问题:

import cv2
cap = cv2.VideoCapture('input.avi', cv2.CAP_VFW)

macOS/Linux环境下此方法无效,优先推荐前两种方案。

内容的提问来源于stack exchange,提问作者RajaKrishnappa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:24:59