Main Content

VideoReader

비디오 파일을 읽기 위한 객체 만들기

설명

VideoReader 객체를 사용하여 비디오 데이터가 포함된 파일을 읽어옵니다. 이 객체에는 비디오 파일에 대한 정보가 포함되며, 이 객체를 통해 비디오에서 데이터를 읽어올 수 있습니다. VideoReader 함수를 사용하여 VideoReader 객체를 만들고, 객체 속성을 사용하여 비디오에 대한 정보를 쿼리한 다음, 객체 함수를 사용하여 비디오를 읽어올 수 있습니다.

자세한 내용은 지원되는 비디오 및 오디오 파일 형식 항목을 참조하십시오.

생성

설명

예제

v = VideoReader(filename)은 파일 filename에서 비디오 데이터를 읽는 객체 v를 만듭니다.

예제

v = VideoReader(filename,Name,Value)는 이름-값 인수를 사용하여 속성 CurrentTime, Tag, UserData를 설정합니다. 예를 들어, VideoReader('myfile.mp4','CurrentTime',1.2)는 비디오 재생 후 1.2초부터 읽기를 시작합니다. 여러 개의 이름-값 인수를 지정할 수 있습니다. 각 속성 이름을 작은따옴표로 묶은 다음에 대응하는 값이 오도록 합니다.

입력 인수

모두 확장

파일 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

자세한 내용은 지원되는 비디오 및 오디오 파일 형식 항목을 참조하십시오.

예: 'myFile.mp4'

예: '../dir/videos/myFile.avi'

데이터형: char | string

속성

모두 확장

VideoReader 객체는 비디오 파일에 대한 정보가 포함된 속성을 가집니다. 속성은 CurrentTime, Tag, UserData를 제외하고 읽기 전용입니다. 객체를 만든 후 속성의 값을 보거나 수정할 수 있습니다. 예를 들어, 다음 명령은 VideoReader 객체 vDuration 속성값을 가져옵니다.

D = v.Duration;

읽기 전용 속성입니다.

비디오 데이터의 픽셀당 비트 수로, 숫자형 스칼라로 지정됩니다.

데이터형: double

읽을 비디오 프레임의 타임스탬프로, 숫자형 스칼라로 지정됩니다. 타임스탬프는 비디오 파일의 시작부터 초 단위로 지정됩니다. CurrentTime 값의 범위는 0 ~ 비디오 재생 시간이 될 수 있습니다.

일부 플랫폼에서 VideoReader 객체를 만들면 'CurrentTime' 속성에 정확히 0은 아니지만 0에 가까운 값이 포함될 수 있습니다. 'CurrentTime' 값이 이렇게 다른 이유는 각 플랫폼에서 비디오를 처리하고 읽는 방법에 차이가 있기 때문입니다.

예: 5.6

데이터형: double

읽기 전용 속성입니다.

파일 길이(단위: 초)로, 숫자형 스칼라로 지정됩니다.

데이터형: double

읽기 전용 속성입니다.

초당 비디오 프레임 수로, 숫자형 스칼라로 지정됩니다. 프레임 속도가 가변적인 비디오의 경우, FrameRate는 평균 프레임 속도입니다.

참고: OS X Yosemite(버전 10.10 이상)의 경우, VideoWriter를 사용하여 작성된 MPEG-4/H.264 파일은 제대로 재생되지만 프레임 속도가 부정확하게 표시됩니다.

데이터형: double

읽기 전용 속성입니다.

비디오 프레임의 높이(단위: 픽셀)로, 숫자형 스칼라로 지정됩니다.

데이터형: double

읽기 전용 속성입니다.

파일 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

데이터형: char | string

읽기 전용 속성입니다.

비디오 스트림의 프레임 수로, 숫자형 스칼라로 지정됩니다.

참고

특정 길이 비디오의 경우, NumFrames 속성의 값을 바로 사용할 수 없습니다. NumFrames 속성을 가져오려면 명령줄에 v.NumFrames를 입력하십시오.

데이터형: double

읽기 전용 속성입니다.

해당 리더 객체와 연결된 비디오 파일의 전체 경로로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

데이터형: char | string

일반 텍스트로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

예: 'Experiment 109'

데이터형: char | string

사용자 정의 데이터로, 임의의 데이터형 값으로 지정됩니다.

읽기 전용 속성입니다.

MATLAB의 비디오 형식 표현으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

Motion JPEG 2000 파일을 제외한 파일 형식은 다음 VideoFormat 값 중 하나를 가집니다.

비디오 형식

VideoFormat의 값

RGB24 비디오를 포함한 AVI 또는 MPEG-4 파일

'RGB24'

인덱싱된 비디오를 포함한 AVI 파일

'Indexed'

회색조 비디오를 포함한 AVI 파일

'Grayscale'

Motion JPEG 2000 파일은 다음 VideoFormat 값 중 하나를 가집니다.

이미지 데이터의 형식

VideoFormat의 값

단일 대역 uint8'Mono8'
단일 대역 int8'Mono8 Signed'
단일 대역 uint16'Mono16'
단일 대역 int16'Mono16 Signed'
3중 대역 uint8'RGB24'
3중 대역 int8'RGB24 Signed'
3중 대역 uint16'RGB48'
3중 대역 int16'RGB48 Signed'

데이터형: char | string

읽기 전용 속성입니다.

비디오 프레임의 너비(단위: 픽셀)로, 숫자형 스칼라로 지정됩니다.

데이터형: double

객체 함수

hasFrame비디오 프레임을 읽을 수 있는지 확인
read하나 이상의 비디오 프레임 읽기
readFrame다음 비디오 프레임 읽기
VideoReader.getFileFormatsFile formats that VideoReader supports

예제

모두 축소

샘플 비디오 파일 xylophone_video.mp4에 대한 VideoReader 객체를 만듭니다.

v = VideoReader("xylophone_video.mp4");

비디오에서 모든 프레임을 한 번에 한 프레임씩 읽습니다.

while hasFrame(v)
    frame = readFrame(v);
end

readFrame에서 반환되는 마지막 프레임에 대한 정보를 표시합니다.

whos frame
  Name         Size                Bytes  Class    Attributes

  frame      240x320x3            230400  uint8              

VideoReader 객체를 지웁니다.

clear v

샘플 비디오 파일 xylophone_video.mp4에 대한 VideoReader 객체를 만듭니다.

v = VideoReader("xylophone_video.mp4");

비디오 시작부터 2.5초 후에 프레임 읽어오기가 시작되도록 지정합니다.

v.CurrentTime = 2.5;

프레임을 표시하기 위한 axes 객체를 만듭니다. 그런 다음 읽을 수 있는 프레임이 더 없을 때까지 계속 비디오 프레임을 읽고 표시합니다.

currAxes = axes;
while hasFrame(v)
    vidFrame = readFrame(v);
    image(vidFrame,"Parent",currAxes)
    currAxes.Visible = "off";
    pause(1/v.FrameRate)
end

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

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

VideoReader 객체를 지웁니다.

clear v

샘플 비디오 파일 xylophone_video.mp4에 대한 VideoReader 객체를 만듭니다.

v = VideoReader("xylophone_video.mp4");

첫 번째 비디오 프레임만 읽습니다.

firstFrame = read(v,1);

마지막 비디오 프레임만 읽습니다.

lastFrame = read(v,Inf);

프레임 5~10을 읽습니다.

earlyFrames = read(v,[5 10]);

50번째 프레임에서 비디오 파일의 끝까지 읽습니다.

lateFrames = read(v,[50 Inf]);

비디오 프레임 변수의 크기 및 유형 정보를 표시합니다.

whos *Frame*
  Name               Size                     Bytes  Class    Attributes

  earlyFrames      240x320x3x6              1382400  uint8              
  firstFrame       240x320x3                 230400  uint8              
  lastFrame        240x320x3                 230400  uint8              
  lateFrames       240x320x3x92            21196800  uint8              

VideoReader 객체를 지웁니다.

clear v

프레임 인덱스를 지정하여 비디오에서 프레임을 읽은 다음, 비디오의 나머지 프레임을 한 번에 한 프레임씩 읽습니다.

VideoReader 객체를 만들고 CurrentTime 속성의 값을 표시합니다. CurrentTime 속성의 값이 0이라는 것은 비디오에서 읽은 프레임이 없음을 뜻합니다.

vidObj = VideoReader("xylophone_video.mp4");
vidObj.CurrentTime
ans = 0

프레임 인덱스를 지정하여 비디오에서 20번째 프레임을 읽습니다. 그런 다음 CurrentTime 속성의 값을 표시합니다. read 메서드는 20번째 프레임을 읽었다는 사실을 반영하기 위해 CurrentTime 속성을 자동으로 업데이트합니다.

frame20 = read(vidObj,20);
vidObj.CurrentTime
ans = 0.6667

이 시점에서 readFrame 함수를 호출하면 21번째 프레임이 반환됩니다.

readFrame 메서드를 사용하여 비디오의 나머지 프레임을 읽습니다. readFrame 메서드는 CurrentTime 속성의 시간에 대응하는 프레임을 반환합니다. 예를 들어 이 코드는 21번째 프레임에서 시작하여 더 읽을 수 있는 프레임이 없을 때까지 프레임을 읽고 표시합니다.

while(hasFrame(vidObj))
    frame = readFrame(vidObj);
    imshow(frame)
    title(sprintf("Current Time = %.3f sec",vidObj.CurrentTime))
    pause(2/vidObj.FrameRate)
end

Figure contains an axes object. The axes object with title Current Time = 4.700 sec contains an object of type image.

VideoReader 객체를 지웁니다.

clear vidObj

제한 사항

  • 일부 MP4 파일의 경우, NumFrames 속성은 Windows®, Mac 및 Linux® 플랫폼에서 서로 다른 값을 반환할 수 있습니다. 이 차이는 기반이 되는 플랫폼별 API의 차이에서 비롯됩니다.

  • Windows에서 일부 AVI, MOV 또는 MP4 파일의 경우, readFrame 함수를 사용하여 파일의 모든 프레임을 읽어 들이면 VideoReader 객체의 NumFrames 속성에서 반환된 값과 다른 개수의 프레임이 생성될 수 있습니다.

  • Windows 플랫폼에서는 작업 공간에서 VideoReader 객체로 참조되는 AVI 파일을 수정 또는 삭제할 수 없습니다. 작업 공간에서 VideoReader 객체를 제거하려면 clear 함수를 사용하십시오.

  • macOS 플랫폼은 더 이상 일부 오래된 비디오 파일 형식을 지원하지 않습니다. VideoReader를 사용하여 이러한 파일을 읽으려면 다음과 같이 하십시오.

    • QuickTime 플레이어를 사용하여 비디오 파일을 여십시오. 플레이어가 이전 형식으로 된 파일을 감지하면 이를 새 형식으로 자동으로 변환합니다.

    • 새로 변환된 비디오 파일을 저장하십시오.

    • VideoReader를 사용하여 새로 변환된 비디오 파일을 읽으십시오.

확장 기능

버전 내역

R2010b에 개발됨

모두 확장