2014-01-16 147 views
1

我想用下面的代码将一堆MP4文件转换成AVI。我知道该转换工作正如我在单个文件中验证过的那样。但是,当我尝试从目录中读取所有mp4时,我尝试创建的'files'结构为空。我在MatLab编程方面比较新,所以我确信我犯了很多愚蠢的错误。我如何正确加载和遍历多个mp4文件,以便将它们全部转换为avis?谢谢!批量转换MP4到AVI

注意:我尝试过不同的转换方法,但是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

您正在尝试读取名称为('files(i).name.mp4')的文件,该文件显然不存在。 filename应该是reader的对应参数,因为作者必须替换扩展名。

2

dir的调用会生成一个结构数组,其中文件名将作为字符串存储在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');