从视频中读取特定时间或帧索引的帧,在指定时间间隔内读取帧,或读取视频中的所有帧。
从视频文件开头0.5秒开始读取部分内容。然后,从帧索引100开始读取视频到视频文件的末尾。
构造一个VideoReader
对象与示例文件关联“xylophone.mp4”
.
vidObj = VideoReader (“xylophone.mp4”);
指定读取应该从文件开头0.5秒开始,通过设置CurrentTime
财产。
vidObj。CurrentTime = 0.5;
读取视频帧,直到文件结束使用readFrame
方法。
而hasFrame(vidObj) vidFrame = readFrame(vidObj);imshow (vidFrame)暂停(1 / vidObj.FrameRate);结束
或者,您可以从视频中读取从指定的帧索引到视频结束的帧读
方法。指定要读取的索引[100正]
.的读
方法返回从100开始到视频文件结束的所有帧。
vidframes = read(vidObj,[100 Inf]);
通过指定时间或帧间隔读取视频文件的一部分。
在0.6 - 0.9秒之间读取视频帧。首先,创建一个视频阅读器对象和一个结构数组来保存帧。
vidObj = VideoReader (“xylophone.mp4”);s =结构(cdata的0 (vidObj.Height vidObj.Width 3“uint8”),“colormap”[]);
然后,指定读取应该从文件开始的0.6秒开始CurrentTime
财产。
vidObj。CurrentTime = 0.6;
每次读一帧,直到CurrentTime
达到0.9秒。将每个视频帧的数据附加到结构数组中。查看结构数组中的帧数。年代
是一个1乘10的结构,表示读取了10帧。有关在结构中显示框架的信息年代
作为一部电影,看的是电影
函数引用页面。
k = 1;而vidObj。CurrentTime <= 0.9 s(k)。cdata = readFrame (vidObj);k = k + 1;结束谁年代
名称大小字节类属性1x10 2305344结构
或者,您可以使用帧索引读取指定间隔内的所有帧。例如,指定的第二个参数读
作为27 [18]
.的读
方法返回一个FrameSize
-by-10数组,表示读取了10帧。
帧= read(vidObj,[18 27]);谁帧
名称大小字节类属性帧240x320x3x10 2304000 uint8
读取视频中的所有帧,一次一帧或一次读取所有帧。
创建一个视频阅读器对象并显示视频中的帧总数。
vidObj = VideoReader (“xylophone.mp4”);vidObj。NumFrames
ans = 141
读取所有的帧,一次一帧,使用readFrame
方法,并显示帧。
而hasFrame(vidObj) frame = readFrame(vidObj);imshow(帧)暂停(1 / vidObj.FrameRate);结束
或者,您可以一次读取所有视频帧。的读
方法返回一个FrameSize
-by-141视频帧阵列。
allFrames =阅读(vidObj);谁allFrames
名称大小字节类属性allFrames 240x320x3x141 32486400 uint8
的hasFrame
方法可能返回逻辑的1
(true)当CurrentTime
属性的值等于持续时间
财产。这是由于所使用的底层api的限制。
查找到视频文件的最后一帧,通过设置CurrentTime
属性的值接近持续时间
不推荐使用。对于某些文件,此操作将返回一个错误,指示已经到达文件结束符,即使CurrentTime
值小于持续时间
价值。这种情况通常发生在文件持续时间大于视频流持续时间,并且在文件的末尾没有可用的视频可读的情况下。
的使用持续时间
属性限制从视频文件读取数据的方法不推荐使用。使用hasFrame
方法检查是否有可读取的帧。最好读取数据,直到文件报告没有更多的帧可以读取。
Windows®系统上的视频阅读性能:在Windows上实现更好的视频阅读性能MP4
和MOV
文件,MATLAB®使用系统的图形硬件进行解码。然而,在某些情况下,使用显卡进行解码可能会导致较差的性能,这取决于系统上特定的图形硬件。如果你注意到你的系统上的视频阅读器性能变慢了,可以通过输入:matlab.video.read.UseHardwareAcceleration(“了”)
.你可以重新启用硬件加速通过输入:matlab.video.read.UseHardwareAcceleration(上)
.
mmfileinfo
|电影
|读
|readFrame
|VideoReader