我正在尝试使用下面的代码将一堆mp4文件转换为avis。我知道转换工作正如我在单个文件上验证的那样。但是,当我尝试从目录中读取所有mp4时,我尝试创建的'files'结构为空。我对MatLab中的编程比较陌生,所以我确定我犯了许多愚蠢的错误。如何正确加载并迭代多个mp4文件,以便将它们全部转换为avis?谢谢!
注意:我尝试了不同的转换方法,但MatLab似乎是确保无大小或质量失真的最佳方法。
files = dir(fullfile('E:\Heather\Summer2013\*.mp4'));
for i = 1:length(files)
filename = files(i).name;
%create objects to read and write the video
readerObj = VideoReader('files(i).name.mp4');
writerObj = VideoWriter('files(i).name.avi','Uncompressed AVI');
%open AVI file for writing
open(writerObj);
%read and write each frame
for k = 1:readerObj.NumberOfFrames
img = read(readerObj,k);
writeVideo(writerObj,img);
end
close(writerObj);
end
答案 0 :(得分:2)
对dir
的调用会生成一个struct数组,其中文件名作为字符串存储在name
字段中。也就是说,files(i).name
包含一个字符串。要使用它,
readerObj = VideoReader(files(i).name); % no quotes, no extension
要使用其他文件扩展名进行书写,请使用fileparts
确定文件库并添加.avi扩展名。例如:
>> str = 'mymovie.mp4';
>> [~,fileBase,fileExt] = fileparts(str)
fileBase =
mymovie
fileExt =
.mp4
>> writerObj = VideoWriter([fileBase '.avi'],'Uncompressed AVI');
答案 1 :(得分:0)
您正在尝试读取名称为('files(i).name.mp4')
但显然不存在的文件。 filename
应该是读者的corret参数,对于作者来说,你必须替换扩展名。