이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

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

객체 함수

hasFrameDetermine if video frame is available to read
read하나 이상의 비디오 프레임 읽기
readFrame다음 비디오 프레임 읽기
VideoReader.getFileFormatsFile formats that VideoReader supports

예제

모두 축소

예제 동영상 파일 xylophone.mp4에 대한 VideoReader 객체를 만듭니다.

v = VideoReader('xylophone.mp4');

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

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

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

whos frame
  Name         Size                Bytes  Class    Attributes

  frame      240x320x3            230400  uint8              

video reader 객체를 만들고 특정 시간에 시작하는 비디오 프레임을 읽습니다.

예제 동영상 파일 xylophone.mp4를 읽기 위한 객체를 만듭니다.

v = VideoReader('xylophone.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

video reader 객체를 만들고 프레임 인덱스를 사용하여 하나 이상의 비디오 프레임을 읽습니다.

예제 동영상 파일 xylophone.mp4에 대한 VideoReader 객체를 만듭니다.

v = VideoReader('xylophone.mp4');

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

frame = read(v,1);

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

frame = read(v,Inf);

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

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

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

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

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

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

vidObj = VideoReader('xylophone.mp4');
vidObj.CurrentTime
ans = 0

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

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

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

Copyright 2019 The MathWorks, Inc.

제한 사항

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

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

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

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

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

확장 기능

R2010b에 개발됨