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_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
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
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
를 사용하여 새로 변환된 비디오 파일을 읽으십시오.
확장 기능
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® 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
MATLAB Coder™ Support Package for NVIDIA® Jetson™ and NVIDIA DRIVE™ Platforms를 사용하면 NVIDIA 타깃 하드웨어에서 비디오 데이터가 포함된 파일을 읽기 위해 MATLAB VideoReader
객체에 대한 CUDA® 코드를 생성할 수 있습니다.
VideoReader
함수를 사용하여 NVIDIA 타깃에서 비디오 파일을 읽어 들이기 위한 CUDA 코드를 생성하는 방법을 알아보려면 Read Video Files on NVIDIA Hardware (MATLAB Coder) 항목을 참조하십시오.
생성된 코드는 GStreamer 라이브러리 API를 사용하여 비디오 파일을 읽어 들입니다. NVIDIA 타깃 플랫폼에 GStreamer 라이브러리(v1.0 이상)를 설치해야 합니다.
코드 생성 시, GStreamer와 호환되는 파일(컨테이너) 형식 및 코덱만 지원됩니다.
코드 생성 시,
VideoReader
함수를 사용하려면 타깃 하드웨어의 비디오 파일에 대한 전체 경로가 필요합니다.메서드와 함수:
VideoReader.getFileFormats
— 코드 생성 시 이 메서드는 지원되지 않습니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
이 함수는 MPEG-1 형식(.mpg
), Windows Media Video 형식(.wmv
) 또는 디코딩을 위해 Microsoft® DirectShow®를 사용하는 다른 형식의 데이터를 읽어올 때 Windows 플랫폼에서 스레드 기반 환경을 지원하지 않습니다.
자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
버전 내역
R2010b에 개발됨R2021b: 스레드 기반 환경 지원
MATLAB backgroundPool
을 사용하여 백그라운드에서 VideoReader
를 실행할 수 있습니다.
R2021b: JPEG 2000 이미지의 픽셀 차이
R2021b와 이전 릴리스의 MATLAB의 JPEG 2000 이미지 간에 픽셀 값 차이가 있을 수 있습니다.
R2019b: 프레임 인덱스 또는 시간을 사용하여 비디오의 프레임 읽기
VideoReader
객체는 비디오 프레임에 대해 프레임 인덱스와 시간을 사용한 상호 교환식 액세스를 지원합니다. 따라서 read
와 readFrame
을 서로 구분 없이 사용할 수 있습니다. 이전에는 한 번에 한 가지 유형의 액세스만 사용할 수 있었습니다. read
와 readFrame
을 서로 구분 없이 사용하여 프레임을 읽어 들이려고 시도하면 오류가 발생했습니다.
R2019b: 행 우선 레이아웃을 취함으로써 생성된 코드에서 성능 개선
크기가 큰 비디오 파일의 경우, VideoReader
객체에 행 우선 레이아웃 옵션을 적용하여 코드를 생성하면 더 높은 성능을 보입니다. 예를 들어, timingTest
함수는 해상도가 1280x720
인 H.264
비디오 파일에서 약 4배의 향상된 속도를 보입니다.
function [t, data] = timingTest(fileName) vidObj = VideoReader(fileName); data = cell(20,1); tic; for cnt = 1:20 data{cnt} = readFrame(vidObj); end t = toc; end
행 우선 플래그를 지정하여 timingTest
함수에 대해 코드를 생성하십시오. codegen
명령은 C 및 C++로 생성된 코드를 이용해 함수 timingTest_mex
를 만듭니다.
codegen timingTest-args{coder.typeof('', [1 inf])}-rowmajor
해상도가 1280x720
인 H.264
비디오 파일의 실행 시간은 다음과 같습니다.
R2019a: 4.04초
R2019b: 0.95초
코드 실행 시간은 Windows 10, Intel® Xeon® CPU W-2133 @ 3.6GHz 테스트 시스템에서 timingTest_mex
함수를 호출하여 측정했습니다. 비디오 파일 해상도(기준: 프레임 크기)가 높을수록 성능 개선도가 높았습니다.
R2019b: NumberOfFrames
속성은 권장되지 않음
NumberOfFrames
속성은 권장되지 않습니다. NumFrames
속성을 대신 사용하십시오. NumberOfFrames
속성을 제거할 계획은 없습니다.
R2019b: VideoReader
객체로 구성된 배열은 지원되지 않음
더 이상 VideoReader
객체로 구성된 배열을 만들 수 없습니다. 코드를 업데이트하여 VideoReader
객체로 구성된 배열을 제거하십시오.
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)