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

MATLAB使用writeVideo/VideoWriter导出4D数组为avi文件报错求助

问题原因

  1. 为什么implay可以正常播放,writeVideo报错?
    implay针对MATLAB原生的视频序列格式做了兼容,会自动将H x W x 帧数的三维数组识别为单通道灰度视频序列。而writeVideo的输入格式要求更严格:单通道灰度视频序列必须是H x W x 1 x 帧数的四维数组,RGB彩色视频序列必须是H x W x 3 x 帧数的四维数组,你当前提取的subj1缺少了通道维度,所以触发格式报错。

解决方法

你只需要给提取的三维数组补充一个单通道维度,再做必要的数值类型转换,就可以正常导出avi,完整可运行代码如下:

% 提取单个受试者的三维视频数组
subj1 = data(:,:,:,1);
% 补充单通道维度,适配writeVideo的格式要求
subj1_with_channel = reshape(subj1, size(subj1,1), size(subj1,2), 1, size(subj1,3));
% 转换为标准uint8灰度格式,避免导出的视频出现色阶异常
% 如果你原数组已经是uint8类型且数值范围正常,可以省略这一步
subj1_uint8 = im2uint8(mat2gray(subj1_with_channel));

% 导出avi文件
v = VideoWriter('subj1.avi');
% 可自行指定帧率,和原视频对齐即可,示例为30帧
% v.FrameRate = 30;
open(v);
writeVideo(v, subj1_uint8);
close(v);

导出后的avi文件直接用Python OpenCV的cv2.VideoCapture('subj1.avi')即可正常遍历所有帧。
另外补充可选方案:如果你后续需要直接读取mat文件到Python,可使用scipy.io.loadmat接口直接读取原始4D数组,不需要经过avi转码也能拿到完整帧列表,之前读取失败大概率是mat文件读取方式不对,你可以根据自己的需求选择方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:15:02