VideoReader
创建对象来读取视频文件
描述
使用一个VideoReader
对象来读取包含视频数据的文件。该对象包含视频文件的相关信息,用于从视频中读取数据。你可以创建一个VideoReader
对象。VideoReader
函数,通过对象属性查询视频信息,再通过对象函数读取视频。
有关更多信息,请参见金宝app支持的视频和音频文件格式。
创建
描述
输入参数
文件名
- - - - - -文件名称
特征向量|字符串标量
文件名,指定为字符向量或字符串标量。
有关更多信息,请参见金宝app支持的视频和音频文件格式。
例子:“myFile.mp4”
例子:“. . / dir /视频/ myFile.avi”
数据类型:字符
|字符串
属性
的VideoReader
对象具有包含视频文件信息的属性。属性是只读的,除了CurrentTime
,标签
,用户数据
。创建对象后,可以查看或修改属性值。例如,此命令查找持续时间
的性质VideoReader
对象,v
。
D = v.持续时间;
BitsPerPixel
- - - - - -视频数据的每像素位数
数字标量
该属性是只读的。
视频数据的每像素位数,用数字标量指定。
数据类型:双
CurrentTime
- - - - - -要读取的视频帧的时间戳
数字标量
要读取的视频帧的时间戳,指定为数字标量。时间戳从视频文件开始以秒为单位指定。的价值CurrentTime
可以在0到视频持续时间之间。
在某些平台上,当您创建VideoReader
对象,“CurrentTime”
属性可能包含接近但不完全为零的值。这种值的变化“CurrentTime”
属性是由于每个平台处理和读取视频的方式不同。
例子:5.6
数据类型:双
持续时间
- - - - - -文件长度
数字标量
该属性是只读的。
以秒为单位的文件长度,以数字标量指定。
数据类型:双
帧速率
- - - - - -每秒视频帧数
数字标量
该属性是只读的。
每秒的视频帧数,用数字标量指定。对于可变帧率视频,帧速率
是平均帧速率。
注意:适用于OS X Yosemite(10.10版本)及更高版本,支持MPEG-4/H。使用VideoWriter
正确播放,但显示不准确的帧率。
数据类型:双
高度
- - - - - -视频帧高度
数字标量
该属性是只读的。
视频帧的高度(以像素为单位),以数字标量指定。
数据类型:双
名字
- - - - - -文件名称
特征向量|字符串标量
该属性是只读的。
文件名,指定为字符向量或字符串标量。
数据类型:字符
|字符串
NumFrames
- - - - - -视频流中的帧数
数字标量
该属性是只读的。
视频流中的帧数,用数字标量指定。
请注意
对于一定长度的视频,值NumFrames
目前还没有房源。为了得到NumFrames
属性,类型v.NumFrames
在命令行中。
数据类型:双
路径
- - - - - -视频文件的完整路径
特征向量|字符串标量
该属性是只读的。
与阅读器对象关联的视频文件的完整路径,指定为字符矢量或字符串标量。
数据类型:字符
|字符串
标签
- - - - - -通用文本
”
(默认)|特征向量|字符串标量
通用文本,指定为字符向量或字符串标量。
例子:“109年实验”
数据类型:字符
|字符串
用户数据
- - - - - -用户定义的数据
[]
(默认)|任何数据类型
用户定义的数据,指定为任意数据类型的值。
VideoFormat
- - - - - -MATLAB®视频格式表示
特征向量|字符串标量
该属性是只读的。
MATLAB表示的视频格式,指定为字符向量或字符串标量。
除Motion JPEG 2000文件外,其他文件类型都有这些参数之一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 = VideoReader(“xylophone.mp4”);
读取视频中的所有帧,每次一帧。
而hasFrame(v) = readFrame(v);结束
返回的最后一帧的信息readFrame
。
谁框架
帧240x320x3 230400 uint8
从特定时间开始读取视频帧
创建视频读取器对象,从指定时间开始读取视频帧。
创建一个对象来读取示例电影文件xylophone.mp4
。
v = VideoReader(“xylophone.mp4”);
指定从视频开始2.5秒开始阅读。
v.CurrentTime = 2.5;
创建一个轴对象来显示框架。然后,继续读取和显示视频帧,直到没有更多的帧可供读取。
currAxes =轴;而hasFrame(v);图像(vidFrame,“父”, currAxes);currAxes。可见=“关闭”;暂停(1 / v.FrameRate);结束
使用帧索引读取视频帧
创建一个视频读取器对象,并使用帧索引读取一个或多个视频帧。
创建一个VideoReader
对象用于示例电影文件xylophone.mp4
。
v = VideoReader(“xylophone.mp4”);
只读取第一帧视频。
Frame = read(v,1);
只读取最后一帧视频。
frame = read(v,Inf);
阅读第5到第10帧。
帧= read(v,[5 10]);
从第50帧开始读到视频文件的末尾。
frames = read(v,[50 Inf]);
交替使用帧索引和时间来阅读视频
通过指定帧索引从视频中读取一帧,然后每次读取一帧视频的剩余帧。
创建一个VideoReader
对象的值CurrentTime
财产。在这个视频中,0的值CurrentTime
属性表示没有从视频中读取帧。
vidObj = VideoReader(“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 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 = VideoReader(filename);如果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编码器支持包)。
生成的代码使用GStreamer库API读取视频文件。必须在NVIDIA目标平台上安装GStreamer库(v1.0或更高版本)。
对于代码生成,只支持与GStreamer兼容的文件(容器)格式和编解码器。金宝app
对于代码生成
VideoReader
功能需要目标硬件上视频文件的完整路径。方法和功能:
VideoReader.getFileFormats
—代码生成不支持此方法。金宝app
线程环境
使用MATLAB®在后台运行代码backgroundPool
或加速代码与并行计算工具箱™ThreadPool
。
这个函数完全支持基于线程的环境。金宝app有关更多信息,请参见在线程环境下运行MATLAB函数。
版本历史
在R2010b中引入R2021b:金宝app支持基于线程的环境
你可以跑VideoReader
在后台使用MATLAB实现backgroundPool
。
R2021b:JPEG 2000图像中的像素差异
R2021b中的JPEG 2000图像与以前版本的MATLAB之间可能存在像素值差异。
MATLAB命令
您点击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。