VideoReader
비디오 파일을 읽기 위한 객체 만들기
설명
VideoReader
객체를 사용하여 비디오 데이터가 포함된 파일을 읽어옵니다. 이 객체에는 비디오 파일에 대한 정보가 포함되며, 이 객체를 통해 비디오에서 데이터를 읽어올 수 있습니다. VideoReader
함수를 사용하여 VideoReader
객체를 만들고, 객체 속성을 사용하여 비디오에 대한 정보를 쿼리한 다음, 객체 함수를 사용하여 비디오를 읽어올 수 있습니다.
자세한 내용은 지원되는 비디오 및 오디오 파일 형식 항목을 참조하십시오.
생성
설명
입력 인수
filename
— 파일 이름
문자형 벡터 | string형 스칼라
파일 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.
자세한 내용은 지원되는 비디오 및 오디오 파일 형식 항목을 참조하십시오.
예: 'myFile.mp4'
예: '../dir/videos/myFile.avi'
데이터형: char
| string
속성
VideoReader
객체는 비디오 파일에 대한 정보가 포함된 속성을 가집니다. 속성은 CurrentTime
, Tag
, UserData
를 제외하고 읽기 전용입니다. 객체를 만든 후 속성의 값을 보거나 수정할 수 있습니다. 예를 들어, 다음 명령은 VideoReader
객체 v
의 Duration
속성값을 가져옵니다.
D = v.Duration;
BitsPerPixel
— 비디오 데이터의 픽셀당 비트 수
숫자형 스칼라
이 속성은 읽기 전용입니다.
비디오 데이터의 픽셀당 비트 수로, 숫자형 스칼라로 지정됩니다.
데이터형: double
CurrentTime
— 읽을 비디오 프레임의 타임스탬프
숫자형 스칼라
읽을 비디오 프레임의 타임스탬프로, 숫자형 스칼라로 지정됩니다. 타임스탬프는 비디오 파일의 시작부터 초 단위로 지정됩니다. CurrentTime
값의 범위는 0 ~ 비디오 재생 시간이 될 수 있습니다.
일부 플랫폼에서 VideoReader
객체를 만들면 'CurrentTime'
속성에 정확히 0은 아니지만 0에 가까운 값이 포함될 수 있습니다. 'CurrentTime'
값이 이렇게 다른 이유는 각 플랫폼에서 비디오를 처리하고 읽는 방법에 차이가 있기 때문입니다.
예: 5.6
데이터형: double
Duration
— 파일의 길이
숫자형 스칼라
이 속성은 읽기 전용입니다.
파일 길이(단위: 초)로, 숫자형 스칼라로 지정됩니다.
데이터형: double
FrameRate
— 초당 비디오 프레임 수
숫자형 스칼라
이 속성은 읽기 전용입니다.
초당 비디오 프레임 수로, 숫자형 스칼라로 지정됩니다. 프레임 속도가 가변적인 비디오의 경우, FrameRate
는 평균 프레임 속도입니다.
참고: OS X Yosemite(버전 10.10 이상)의 경우, VideoWriter
를 사용하여 작성된 MPEG-4/H.264 파일은 제대로 재생되지만 프레임 속도가 부정확하게 표시됩니다.
데이터형: double
Height
— 비디오 프레임의 높이
숫자형 스칼라
이 속성은 읽기 전용입니다.
비디오 프레임의 높이(단위: 픽셀)로, 숫자형 스칼라로 지정됩니다.
데이터형: double
Name
— 파일 이름
문자형 벡터 | string형 스칼라
이 속성은 읽기 전용입니다.
파일 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.
데이터형: char
| string
NumFrames
— 비디오 스트림의 프레임 수
숫자형 스칼라
이 속성은 읽기 전용입니다.
비디오 스트림의 프레임 수로, 숫자형 스칼라로 지정됩니다.
참고
특정 길이 비디오의 경우, NumFrames
속성의 값을 바로 사용할 수 없습니다. NumFrames
속성을 가져오려면 명령줄에 v.NumFrames
를 입력하십시오.
데이터형: double
Path
— 비디오 파일의 전체 경로
문자형 벡터 | string형 스칼라
이 속성은 읽기 전용입니다.
해당 리더 객체와 연결된 비디오 파일의 전체 경로로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.
데이터형: char
| string
Tag
— 일반 텍스트
''
(디폴트 값) | 문자형 벡터 | string형 스칼라
일반 텍스트로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.
예: 'Experiment 109'
데이터형: char
| string
UserData
— 사용자 정의 데이터
[]
(디폴트 값) | 임의의 데이터형
사용자 정의 데이터로, 임의의 데이터형 값으로 지정됩니다.
VideoFormat
— MATLAB®의 비디오 형식 표현
문자형 벡터 | string형 스칼라
이 속성은 읽기 전용입니다.
MATLAB의 비디오 형식 표현으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.
Motion JPEG 2000 파일을 제외한 파일 형식은 다음 VideoFormat
값 중 하나를 가집니다.
비디오 형식 |
|
---|---|
RGB24 비디오를 포함한 AVI 또는 MPEG-4 파일 | 'RGB24' |
인덱싱된 비디오를 포함한 AVI 파일 | 'Indexed' |
회색조 비디오를 포함한 AVI 파일 | 'Grayscale' |
Motion JPEG 2000 파일은 다음 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
Width
— 비디오 프레임의 너비
숫자형 스칼라
이 속성은 읽기 전용입니다.
비디오 프레임의 너비(단위: 픽셀)로, 숫자형 스칼라로 지정됩니다.
데이터형: double
객체 함수
hasFrame | 비디오 프레임을 읽을 수 있는지 확인 |
read | 하나 이상의 비디오 프레임 읽기 |
readFrame | 다음 비디오 프레임 읽기 |
VideoReader.getFileFormats | File formats that VideoReader supports |
예제
VideoReader 객체 만들고 비디오 읽기
예제 동영상 파일 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
를 사용하여 새로 변환된 비디오 파일을 읽으십시오.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
VideoReader
의 코드 생성 시 대부분의 형식, 구문, 메서드 및 함수가 지원되나 다음과 같은 제한 사항이 있습니다.
비디오 형식 지원:
filename
이 컴파일타임 상수이면 코드 생성 시 MATLAB에서 지원하는 모든 형식이 지원됩니다. MATLAB에서 지원하는 비디오 형식에 대한 자세한 내용은 지원되는 비디오 및 오디오 파일 형식 항목을 참조하십시오.filename
이 컴파일타임 상수가 아니면 코드 생성 시uint8
데이터형으로 디코딩할 수 있는 데이터를 갖는 비디오 파일만 지원됩니다. 지원되는 비디오 형식에는.MP4
,.MOV
및.AVI
가 있습니다.
객체 생성:
MEX 타깃의 경우, 비디오 파일의 부분 경로가 지원됩니다.
RTW 타깃의 경우, 비디오 파일의 전체 경로 또는 상대 경로를 제공해야 합니다.
메서드와 함수:
플랫폼 종속성 — 특정 시스템의
VideoReader
에 대해 생성한 코드가 다른 시스템에서 작동하지 않는 경우:타깃 머신에서 해당 비디오에 적합한 코덱을 사용할 수 있도록 하십시오.
타깃 머신에서 생성된 비디오 객체가 유효한지 확인하는 테스트 코드를 추가합니다. 테스트 코드는 비디오 객체가 유효한 높이 또는 너비를 갖는지 검사하는 내용을 포함할 수 있습니다. 예를 들면 다음과 같습니다.
videoObj = VideoReader(filename); if isnan(videoObj.Height) fprintf('Failed to create video object.\n'); return end
행 우선 레이아웃을 사용하는 코드 생성 — Generate Code That Uses Row-Major Array Layout (MATLAB Coder).
배열 크기 제한 — 코드 생성 시 배열의 최대 요소 개수는 코드 생성기와 타깃 하드웨어에 의해 제한됩니다. 자세한 내용은 Array Size Restrictions for Code Generation (MATLAB Coder) 항목을 참조하십시오.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
NVIDIA® Jetson® 및 NVIDIA DRIVE™ 플랫폼용 MATLAB Coder™ 지원 패키지를 사용하면 NVIDIA 타깃 하드웨어에서 비디오 데이터가 포함된 파일을 읽기 위해 MATLAB VideoReader
객체에 대한 CUDA® 코드를 생성할 수 있습니다.
VideoReader
함수를 사용하여 NVIDIA 타깃에서 비디오 파일을 읽어 들이기 위한 CUDA 코드를 생성하는 방법을 알아보려면 Read Video Files on NVIDIA Hardware (MATLAB Coder Support Package for NVIDIA Jetson and NVIDIA DRIVE Platforms) 항목을 참조하십시오.
생성된 코드는 GStreamer 라이브러리 API를 사용하여 비디오 파일을 읽어 들입니다. NVIDIA 타깃 플랫폼에 GStreamer 라이브러리(v1.0 이상)를 설치해야 합니다.
코드 생성 시, GStreamer와 호환되는 파일(컨테이너) 형식 및 코덱만 지원됩니다.
코드 생성 시,
VideoReader
함수를 사용하려면 타깃 하드웨어의 비디오 파일에 대한 전체 경로가 필요합니다.메서드와 함수:
VideoReader.getFileFormats
— 코드 생성 시 이 메서드는 지원되지 않습니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
버전 내역
R2010b에 개발됨R2021b: 스레드 기반 환경 지원
MATLAB backgroundPool
을 사용하여 백그라운드에서 VideoReader
를 실행할 수 있습니다.
R2021b: JPEG 2000 이미지의 픽셀 차이
R2021b와 이전 버전의 MATLAB의 JPEG 2000 이미지 간에 픽셀 값 차이가 있을 수 있습니다.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)