使用每n个构建视频图像从原始视频

2视图(30天)
我有一个高速旋转的视频对象。引发的相机对象位置和需要20图片为每个触发器。所以我想每20帧提取到一个单独的视频,会给我单独视频周围不同位置的对象。我期望的输入视频约4000帧。
我想要的是创建一个视频帧1,21日,41…另一个2帧,22日,42…等8帧,28日,48……
这是我当前的代码。有更好的方法吗?
%变量中提取固定位置的视频
numImagesPerTrigger = 20;
numLocsToOutput = 8;
% %代码来创建一个电影每n个形象
%得到视频的属性
vidObjIn = VideoReader (InputFileName);
numFrames = vidObjIn.NumberOfFrames;
帧速率= vidObjIn.FrameRate;
%必须重新打开视频后其属性。
vidObjIn = VideoReader (InputFileName);
%为每个部分创建单独的视频
抵消= 0:numLocsToOutput - 1
%创建输出文件
OutputFileName = char(字符串(SelectedFilePath) +
字符串(InputFileBaseName) +”——('+偏移量+“)”+
字符串(InputFileext));
vidObjOut = VideoWriter (OutputFileName,mpeg - 4的);
vidObjOut。框架Rate = 1;
打开(vidObjOut);
%选择所有帧在这个位置
帧=抵消:numImagesPerTrigger: numFrames - 1
vidObjIn。CurrentTime =(帧)/帧速率;
vidFrame = readFrame (vidObjIn);
writeVideo (vidObjOut vidFrame);
结束
%清理输出文件
关上(vidObjOut)
结束
在我看来,这条线:
vidObjIn。CurrentTime =(帧)/帧速率;
很麻烦。我担心它可能是容易错误如果有大量的帧。我宁愿选择直接实际的帧数。

接受的答案

萨尔曼·艾哈迈德
萨尔曼·艾哈迈德 2021年11月18日
嗨,吉姆,
既然你想选择一个 框架 从VideoReader对象( vidObjIn 直接),你可以使用 函数如下所示。希望这可以解决你的关心。
vidFrame =阅读(vidObjIn,框架);

更多的答案(0)

s manbetx 845


释放

R2018a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!