批量转换mp4到avi

时间:2014-01-16 22:17:33

标签: matlab mp4 avi

我正在尝试使用下面的代码将一堆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

2 个答案:

答案 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参数,对于作者来说,你必须替换扩展名。