通过消除重复帧来编码视频 - Matlab

时间:2014-10-19 11:33:14

标签: matlab video video-encoding

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

1 个答案:

答案 0 :(得分:1)

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

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都可以这样做)。

在Matlab中,另一种选择是使用明确支持可变帧率的编解码器 - QuickTime的image-based codecs:Photo JPEG(不要与Motion-JPEG混淆),Photo PNG(又名Apple PNG),以及Photo TIFF(又名Apple Tiff)。您可以使用我的QTWriter available on Github使用这些编解码器直接对内容进行编码。但请注意,在OS X 10.9+上,QuickTime Player将无损可变帧速率Photo PNG和Photo TIFF电影转换为有损固定帧率H.264(不转换照片JPEG电影)。有关详细信息和解决方法,请参阅my note towards the bottom of this page