VideoReader
创建对象来读取视频文件
描述
使用一个VideoReader
对象读取包含视频数据的文件。对象包含关于视频文件的信息,并使您能够从视频中读取数据。您可以创建VideoReader
对象使用VideoReader
函数,使用对象属性查询有关视频的信息,然后使用对象函数读取视频。
有关更多信息,请参见金宝app支持的视频和音频文件格式.
创建
描述
输入参数
文件名
- - - - - -文件名称
特征向量|字符串标量
文件名,指定为字符向量或字符串标量。
有关更多信息,请参见金宝app支持的视频和音频文件格式.
例子:“myFile.mp4”
例子:“. . / dir /视频/ myFile.avi”
数据类型:字符
|字符串
属性
的VideoReader
对象具有包含有关视频文件信息的属性。属性是只读的,除了CurrentTime
,标签
,用户数据
.您可以在创建对象后查看或修改属性的值。的值持续时间
的属性VideoReader
对象,v
.
D = v.时长;
BitsPerPixel
- - - - - -视频数据的每像素比特数
数字标量
此属性是只读的。
视频数据的每像素位,指定为数值标量。
数据类型:双
CurrentTime
- - - - - -读取视频帧的时间戳
数字标量
要读取的视频帧的时间戳,指定为数字标量。时间戳是以视频文件开始后的秒为单位指定的。的价值CurrentTime
可以在零和视频的持续时间之间。
在某些平台上,当您创建VideoReader
对象,“CurrentTime”
属性可能包含接近(但不完全)零的值。的值的变化“CurrentTime”
属性是由于每个平台处理和读取视频的方式不同。
例子:5.6
数据类型:双
持续时间
- - - - - -文件长度
数字标量
此属性是只读的。
文件长度(以秒为单位),指定为数值标量。
数据类型:双
帧速率
- - - - - -每秒视频帧数
数字标量
此属性是只读的。
每秒视频帧数,指定为数值标量。对于可变帧率视频,帧速率
是平均帧速率。
注意:对于OS X Yosemite(版本10.10)和更高版本,MPEG-4/H。264个文件VideoWriter
正确播放,但显示不准确的帧速率。
数据类型:双
高度
- - - - - -视频帧高
数字标量
此属性是只读的。
视频帧的高度(以像素为单位),指定为数值标量。
数据类型:双
的名字
- - - - - -文件名称
特征向量|字符串标量
此属性是只读的。
文件名,指定为字符向量或字符串标量。
数据类型:字符
|字符串
NumFrames
- - - - - -视频流中的帧数
数字标量
此属性是只读的。
视频流中的帧数,指定为数值标量。
请注意
对于一定长度的视频,的值NumFrames
属性不能立即可用。为了得到NumFrames
属性,类型v.NumFrames
在命令行中。
数据类型:双
路径
- - - - - -视频文件的完整路径
特征向量|字符串标量
此属性是只读的。
与阅读器对象关联的视频文件的完整路径,指定为字符向量或字符串标量。
数据类型:字符
|字符串
标签
- - - - - -通用文本
”
(默认)|特征向量|字符串标量
通用文本,指定为字符向量或字符串标量。
例子:“109年实验”
数据类型:字符
|字符串
用户数据
- - - - - -用户定义的数据
[]
(默认)|任何数据类型
用户定义的数据,指定为任何数据类型的值。
VideoFormat
- - - - - -MATLAB®视频格式表示
特征向量|字符串标量
此属性是只读的。
MATLAB表示的视频格式,指定为字符向量或字符串标量。
除Motion jpeg2000文件外,文件类型都具有其中之一VideoFormat
值。
视频格式 |
的价值 |
---|---|
AVI或MPEG-4文件与RGB24视频 |
“RGB24” |
带索引视频的AVI文件 |
“索引” |
AVI文件与灰度视频 |
“灰度” |
动议JPEG 2000文件,具有下列之一VideoFormat
值。
图像数据格式 |
的价值 |
---|---|
单波段uint8 |
“Mono8” |
单波段int8 |
“Mono8签署” |
单波段uint16 |
“Mono16” |
单波段int16 |
“Mono16签署” |
三级uint8 |
“RGB24” |
三级int8 |
“RGB24签署” |
三级uint16 |
“RGB48” |
三级int16 |
“RGB48签署” |
数据类型:字符
|字符串
宽度
- - - - - -视频帧宽
数字标量
此属性是只读的。
视频帧的宽度(以像素为单位),指定为数值标量。
数据类型:双
对象的功能
hasFrame |
确定视频帧是否可读取 |
读 |
读取一个或多个视频帧 |
readFrame |
阅读下一视频帧 |
VideoReader.getFileFormats |
文件格式VideoReader 金宝app支持 |
例子
创建VideoReader对象并读取视频
创建一个VideoReader
对象用于示例电影文件xylophone.mp4
.
v =视频阅读器(“xylophone.mp4”);
从视频中读取所有帧,一次一帧。
而hasFrame(v) frame = readFrame(v);结束
显示返回的最后一帧的信息readFrame
.
谁框架
名称大小字节类属性frame 240x320x3 230400 uint8
读取特定时间开始的视频帧
创建一个视频读取器对象,读取特定时间开始的视频帧。
创建一个对象来读取示例电影文件xylophone.mp4
.
v =视频阅读器(“xylophone.mp4”);
指定从视频开始后2.5秒开始的读数。
v.CurrentTime = 2.5;
创建一个axis对象来显示框架。然后,继续读取和显示视频帧,直到没有更多的帧可供读取。
currAxes =轴;而hasFrame(v) vidFrame = readFrame(v);图像(vidFrame,“父”, currAxes);currAxes。可见=“关闭”;暂停(1 / v.FrameRate);结束
使用帧索引读取视频帧
创建一个视频读取器对象并使用帧索引读取一个或多个视频帧。
创建一个VideoReader
对象用于示例电影文件xylophone.mp4
.
v =视频阅读器(“xylophone.mp4”);
只读取第一视频帧。
Frame = read(v,1);
只读取最后一个视频帧。
帧= read(v,Inf);
读5到10帧。
帧= read(v,[5 10]);
从视频文件的第50帧读到最后。
帧= read(v,[50 Inf]);
可互换使用帧索引和时间读取视频
通过指定帧索引从视频中读取一帧,然后一次读取一帧视频的剩余帧。
创建一个VideoReader
对象的值CurrentTime
财产。在这个视频中,是0CurrentTime
属性指示尚未从视频中读取任何帧。
vidObj =视频阅读器(“xylophone.mp4”);vidObj。CurrentTime
Ans = 0
通过指定帧索引从视频中读取第20帧。的值CurrentTime
财产。的读
方法自动更新CurrentTime
属性来反映第20帧已被读取。在此步骤中,调用readFrame
函数将返回第21帧。
frame20 = read(vidObj,20);vidObj。CurrentTime
Ans = 0.6667
方法读取视频的剩余帧readFrame
方法。的readFrame
方法中时间对应的帧CurrentTime
财产。例如,这段代码从第21帧开始读取并显示帧,直到没有更多的帧需要读取为止。
而(hasFrame(vidObj)) frame = readFrame(vidObj);imshow(框架);标题(sprintf ('当前时间= %。3 f交会”vidObj.CurrentTime));暂停(2 / vidObj.FrameRate);结束
版权所有2019 The MathWorks, Inc.
限制
对于Windows上的一些AVI、MOV或MP4文件®,使用
readFrame
函数读取文件中的所有帧的结果可能与函数返回的值不同NumFrames
的属性VideoReader
对象。
提示
的macOS平台不再支持某些较旧的视频文件格式。金宝app读取这样的文件
VideoReader
:使用QuickTime播放器打开视频文件。如果播放器检测到文件是较旧的格式,那么它会自动将文件转换为较新的格式。
保存新转换的视频文件。
使用
VideoReader
读取这个新转换的视频文件。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
代码生成VideoReader
金宝app支持大多数格式、语法、方法和函数,但有以下限制。
视频格式支持:金宝app
如果
文件名
为编译时间常数,则代码生成支持MATLAB中支持的所有格式。金宝app有关MATLAB支持的视频格式的更多信息,请参见金宝app金宝app支持的视频和音频文件格式.如果
文件名
不是一个编译时间常数,那么代码生成只支持视频文件的数据可以解码金宝appuint8
数据类型。金宝app支持的视频格式包括:mp4
,。mov
,.AVI
.
对象建设:
对于MEX目标,支持视频文件的部分路径。金宝app
对于RTW目标,您必须提供视频文件的完整或相对路径。
方法和功能:
平台依赖关系-如果生成的代码
VideoReader
在一台特定的机器上不能在另一台机器上运行,则:确保目标机器上有适合视频的编解码器。
添加测试代码以检查在目标机器上创建的视频对象是否有效。测试代码可以包括检查视频对象是否具有有效的高度或宽度。例如:
videoObj = videereader(文件名);如果isnan (videoObj.Height)流('创建视频对象失败。\n');返回结束
生成使用行主布局的代码生成使用行主数组布局的代码(MATLAB编码器).
数组大小限制——对于代码生成,数组的最大元素数量受到代码生成器和目标硬件的限制。有关更多信息,请参见代码生成的数组大小限制(MATLAB编码器).
GPU代码生成
使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。
使用注意事项和限制:
与MATLAB编码器™金宝appNVIDIA的支持包®杰森®和NVIDIA DRIVE™平台,您可以生成CUDA®MATLAB代码VideoReader
对象读取NVIDIA目标硬件上包含视频数据的文件。
方法来生成用于读取NVIDIA目标上的视频文件的CUDA代码VideoReader
功能,请参阅读取NVIDIA硬件上的视频文件(NVIDIA Jetson金宝app和NVIDIA DRIVE平台的MATLAB Coder支持包).
生成的代码使用GStreamer库API读取视频文件。您必须在NVIDIA目标平台上安装GStreamer库(v1.0或更高版本)。
代码生成只支持与GStreamer兼容的文件(容器)格式和编解码器。金宝app
对于代码生成,使用
VideoReader
函数需要目标硬件上视频文件的完整路径。方法和功能:
VideoReader.getFileFormats
—代码生成不支持该方法。金宝app
线程环境
使用MATLAB®在后台运行代码backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
.
这个函数完全支持基于线程的环境。金宝app有关更多信息,请参见在线程环境中运行MATLAB函数.
版本历史
在R2010b中引入R2021b:金宝app支持基于线程的环境
你可以跑VideoReader
在后台使用MATLABbackgroundPool
.
R2021b:jpeg2000图像的像素差异
R2021b中的JPEG 2000图像与以前版本的MATLAB之间可能存在像素值差异。
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。