2014-01-16 8 views
1

아래 코드를 사용하여 mp4 파일을 avis로 변환하려고합니다. 단일 파일에서 확인한대로 변환이 작동한다는 것을 알고 있습니다. 그러나 디렉토리에서 모든 mp4 파일을 읽으려고하면 '파일'구조체가 비어 있습니다. 필자는 MatLab 프로그래밍에 익숙하지 않으므로 많은 바보 같은 오류가 발생합니다. 여러 mp4 파일을 모두 avis로 변환하기 위해 제대로로드하고 반복 할 수 있습니까? 감사!일괄 변환 mp4를 avi로

NB : 다른 변환 방법을 시도했지만 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은 독자를위한 corret 매개 변수 여야합니다. 작성자는 확장 프로그램을 교체해야합니다.

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');