Main Content

이미지 시퀀스와 비디오 간 변환

이 예제에서는 VideoReaderVideoWriter를 사용하여 비디오 파일과 이미지 파일 시퀀스 간에 변환하는 방법을 보여줍니다.

샘플 파일 shuttle.avi에는 121개의 프레임이 포함되어 있습니다. VideoReaderimwrite 함수를 사용하여 프레임을 이미지 파일로 변환합니다. 그다음 VideoWriter를 사용하여 이미지 파일을 AVI 파일로 변환합니다.

설정

이미지 시퀀스를 저장할 임시 작업 폴더를 만듭니다.

workingDir = tempname;
mkdir(workingDir)
mkdir(workingDir,"images")

VideoReader 객체 생성하기

샘플 파일에서 프레임을 읽어 들이는 데 사용할 VideoReader 객체를 만듭니다.

shuttleVideo = VideoReader("shuttle.avi");

이미지 시퀀스 생성하기

비디오를 따라 순환하면서 각 프레임을 img라는 너비×높이×3 배열로 읽어 들입니다. N.jpg 형식의 이름(여기서 N = 3자리 숫자로 된 프레임 번호)을 사용하여 각 이미지를 JPEG 파일로 작성합니다.

i = 1;

while hasFrame(shuttleVideo)
   img = readFrame(shuttleVideo);
   filename = sprintf("%03d",i)+".jpg";
   fullname = fullfile(workingDir,"images",filename);
   imwrite(img,fullname)    % Write to a JPEG file (001.jpg, 002.jpg, ..., 121.jpg)
   i = i+1;
end

이미지 파일 이름 찾기

images 폴더에서 모든 JPEG 파일 이름을 찾습니다. 이미지 이름 세트를 셀형 배열로 변환합니다.

imageNames = dir(fullfile(workingDir,"images","*.jpg"));
imageNames = {imageNames.name}';

이미지 시퀀스를 사용하여 새 비디오 생성하기

VideoWriter 객체를 생성합니다. 이 객체는 기본적으로 Motion-JPEG AVI 파일을 만듭니다.

outputVideo = VideoWriter(fullfile(workingDir,"shuttle_out.avi"));
outputVideo.FrameRate = shuttleVideo.FrameRate;
open(outputVideo)

이미지 시퀀스를 순환하면서 각 이미지를 불러온 다음 비디오에 작성합니다.

for i = 1:length(imageNames)
   img = imread(fullfile(workingDir,"images",imageNames{i}));
   writeVideo(outputVideo,img)
end

비디오 파일을 완성합니다.

close(outputVideo)

완성된 비디오 보기

VideoReader 객체를 만듭니다.

shuttleAvi = VideoReader(fullfile(workingDir,"shuttle_out.avi"));

비디오 프레임에서 구조체형 배열을 만듭니다.

i = 1;
while hasFrame(shuttleAvi)
   mov(i) = im2frame(readFrame(shuttleAvi));
   i = i+1;
end

비디오의 너비와 높이에 기반하여 Figure 크기를 정한 다음 비디오를 한 번 재생합니다.

vf = figure(Position=[0 0 shuttleAvi.Width shuttleAvi.Height]);
imshow(mov(1).cdata,Border="tight")
movie(vf,mov,1,shuttleAvi.FrameRate)

Figure contains an axes object. The axes object contains an object of type image.

VideoReader 객체 지우기

VideoReader 객체를 지웁니다.

clear shuttleVideo shuttleAvi

출처

NASA가 공개한 우주 왕복선 비디오.

관련 항목

비디오 파일 읽어오기