2014-10-19 38 views
0

我想找到一种消除视频重复帧的方法。如果我考虑一个将重复显示同一帧5秒的视频,我想在视频中仅包含一帧,并使其可见5秒。在这里,我期待通过消除重复帧来最小化文件大小。有没有一种方法使用Matlab来做到这一点?通过消除重复帧来编码视频 - Matlab

+2

看看互相关或总和平方强度差异作为一种手段来比较它们也许。 – 2014-10-19 14:14:57

+2

一个棘手的部分将是当你将播放该文件。您不能使用任何以恒定fps速率播放的随机播放器。你将需要附加一个'多长时间来显示这个帧'元数据到每个帧和一个可以处理它的播放器。 – Hoki 2014-10-19 14:36:07

+2

您是在Matlab中创建视频还是已经存在?这只是简单地检测哪些帧重复或不编码这些帧开始的问题?请编辑你的问题来澄清。 – horchler 2014-10-19 19:26:10

回答

1

如果您的电影只是一系列剧照,您希望以固定的5秒延迟显示为幻灯片演示/演示文稿,那么您应该可以使用类的'FrameRate'属性。尝试这样的事情例如:

writerObj = VideoWriter('peaks.mp4','MPEG-4'); 
writerObj.FrameRate = 0.2; % One frame every 5 seconds 
open(writerObj); 

Z = peaks; 
surf(Z); 
for k = 1:4:20 
    surf(sin(2*pi*k/20)*Z,Z); 
    writeVideo(writerObj,getframe); 
end 
close(writerObj); 

然而,帧速率属性不能在你的电影的过程中变化的,所以你的问题的更一般的形式是从根本上对variable frame-rate encoding编码器支持的问题。大多数现代编码器(例如,H.264实现)不是被设计为明确地处理这种情况,而是具有能够检测何时内容没有改变并且有效地对数据进行编码(尤其是如果使用多遍编码的情况下)的启发法。不幸的是,Matlab(我假设你一直在使用VideoWriter类)在这方面并不真正提供很高的保真度。我甚至不确定使用H.264视频为MPEG-4使用什么帧间编码设置。

如果VideoWriter产生的MPEG-4 with H.264 videos是不可接受的,我建议你在尽可能高的质量(或无损),然后导出您的视频学会用全面的编码框架/库(ffmpeglibavx264)或应用程序编码到您想要的质量和大小。显然Handbrake支持variable frame-rate encoding,虽然它不一定是为你可能想要的而设计的,我还没有测试过它。或导出您的个人静帧并使用实际的视频编辑软件(例如OS X上的iMovie)。也有可能是专门的应用程序,可以从幻灯片/演示文稿创建一个电影(PowerPoint和Keynote都可以做到这一点)。在另一个替代方案中,使用一种可明确支持可变帧速率的编解码器 - QuickTime的image-based codecs:Photo JPEG(不要与Motion-JPEG混淆),Photo PNG(又名Apple PNG)和Photo TIFF又名苹果Tiff)。您可以使用这些编解码器直接对我的QTWriter编码内容,即available on Github。但请注意,在OS X 10.9+上,QuickTime Player会将无损可变帧频照片PNG和照片TIFF电影转换为有损帧率固定的H.264(不转换照片JPEG电影)。有关更多详细信息和解决方法,请参阅。