主要内容

读视频文件

从视频中读取特定时间或帧索引的帧,在指定时间间隔内读取帧,或读取视频中的所有帧。

从指定的时间或帧索引开始读取帧

从视频文件开头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);结束

图中包含一个坐标轴。轴包含一个image类型的对象。

或者,您可以从视频中读取从指定的帧索引到视频结束的帧方法。指定要读取的索引[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);结束

图中包含一个坐标轴。轴包含一个image类型的对象。

或者,您可以一次读取所有视频帧。的方法返回一个FrameSize-by-141视频帧阵列。

allFrames =阅读(vidObj);谁allFrames
名称大小字节类属性allFrames 240x320x3x141 32486400 uint8

故障排除和视频阅读提示

  • hasFrame方法可能返回逻辑的1(true)当CurrentTime属性的值等于持续时间财产。这是由于所使用的底层api的限制。

  • 查找到视频文件的最后一帧,通过设置CurrentTime属性的值接近持续时间不推荐使用。对于某些文件,此操作将返回一个错误,指示已经到达文件结束符,即使CurrentTime值小于持续时间价值。这种情况通常发生在文件持续时间大于视频流持续时间,并且在文件的末尾没有可用的视频可读的情况下。

  • 的使用持续时间属性限制从视频文件读取数据的方法不推荐使用。使用hasFrame方法检查是否有可读取的帧。最好读取数据,直到文件报告没有更多的帧可以读取。

  • Windows®系统上的视频阅读性能:在Windows上实现更好的视频阅读性能MP4MOV文件,MATLAB®使用系统的图形硬件进行解码。然而,在某些情况下,使用显卡进行解码可能会导致较差的性能,这取决于系统上特定的图形硬件。如果你注意到你的系统上的视频阅读器性能变慢了,可以通过输入:matlab.video.read.UseHardwareAcceleration(“了”).你可以重新启用硬件加速通过输入:matlab.video.read.UseHardwareAcceleration(上)

另请参阅

||||

相关的话题