2014-01-16 181 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');