[video, audio] = mmread(文件名,帧,时间,disableVideo, disableAudio, matlabCommand, trySeeking, useFFGRAB)
mread几乎可以读取任何媒体文件。它现在使用AVbin和FFmpeg来捕获数据,这包括url。代码支持Matla金宝appb运行的所有主要操作系统和架构。
输入
要读取的文件名输入文件(mpg, avi, wmv, asf, wav, mp3, gif,…)帧指定要捕获的视频帧,默认[]为全部或指定时间
time [startTime stopTime], default [] for all disableVideo禁用所有视频捕捉,以节省内存或时间disableAudio禁用所有音频捕捉,以节省内存或时间
matlabCommand不返回视频结构,调用matlabCommand指定的函数。函数定义必须与processFrame.m的定义匹配。看到processFrame。询问更多信息。
trySeeking [true]设置为false会使代码更慢但更精确。如果前几帧失真或计时信息不准确,将此设置为false。
useFFGRAB [true]使用mmread的新版本,它使用ffmpeg。但是,如果音频或视频流无法读取,并且你正在运行Windows,请将此设置为false(旧版本)。
输出
Video是一个具有以下字段的结构体:
宽度视频帧的宽度
高度视频帧的高度
速率视频的帧速率,如果不能确定则为1。
无论捕获了多少帧,影片中的帧总数。不幸的是,这并不总是确定的。如果它是负的,那么它是基于持续时间和速率的估计(通常准确到0.1%以内)。它可以是0,在这种情况下,根本无法确定。如果它是一个正数,那么它应该总是准确的。
totalDuration视频总时长,单位为秒。
使用以下字段构建一个结构数组:
cdata[高X宽X 3] uint8矩阵
colormap总是空的
乘以帧对应的时间戳(以msec为单位)
在固定帧率的电影中,一些编解码器(不是mread)会跳过重复帧(即与前面相同),以节省空间和时间。这些跳过的帧可以通过在“times”字段中查找跳转来检测。当跳过帧时,该字段将为true。
Audio是一个具有以下字段的结构体:
nrChannels音频流中的信道数(1或2)
频率音频的采样率,例如44100。如果不能确定,那么它就是1。
位采样的位深(8或16)
Data整个音频流的真实数据。这可以使用wavplay来播放。如果指定了时间范围,数据的长度可能与总时间不对应。这通常发生在电影中。问题是音频流的开始通常在第一帧结束时计数。所以,时间移动了1/帧速率。
nrFramesTotal音频以包或帧的形式被捕获,将音频分成帧可能有意义,也可能没有意义。
totalDuration音频的总长度,以秒为单位。
帧单元数组的uint8s。可能没什么用。
乘以帧对应的时间戳(以毫秒为单位)
如果没有视频或音频流,相应的结构将为空。
指定帧不会影响音频捕获。如果你只想要音频的一部分,可以使用第三个参数“时间”。指定音频和视频的时间效果。时间以秒为单位指定(支持小数1.125的亚秒分辨率),从0开始。金宝app时间定义为startTime(包括)到stopTime(不包括),或者使用set notation [startTime stopTime]。
如果有多个视频或音频流,那么结构的长度为> 1。例如:音频(1)。数据和音频(2). data。
例子
[video, audio] = mread(' chims .wav');读取整个wav文件
wavplay (audio.data audio.rate);
视频= mmread(“mymovie.mpg”);阅读整部电影
电影(video.frames);
视频= mmread (mymovie.mpg, 1:10);%只获得前10帧
视频= mmread (mymovie。3.5 mpg的[],[0]);%阅读视频的前3.5秒
(视频、音频)= mmread(“chimes.wav”,[],0.25 [0]);读取wav的前0.25秒
(视频、音频)= mmread(“chimes.wav”,[],[0.25 - 0.5]);%读取0.25到0.5秒的wav,与前面的例子没有重叠。
直接从URL读取影片
视频= mmread ('http://www.nature.com/neuro/journal/v9/n4/extref/nn1660-S8.avi ');
视频= mmread(“mymovie.mpg”,[][],假的,真正的);读取所有帧,禁用音频
mmread (mymovie.mpg,[][],假的,假的,“processFrame”);%使用processFrame.m函数对电影中的所有帧进行内联处理
引用作为
弥迦书里歇尔(2021)。mmread(//www.tatmou.com/matlabcentral/fileexchange/8028-mmread), MATLAB中央文件交换。检索.