ExtractMpegFramesTest在android中以纵向模式记录视频时出现问题

时间:2015-04-24 12:57:38

标签: android video mediacodec mediaextractor

我正在关注ExtractMpegFramesTest帖子以从视频中提取PNG帧。 这适用于以横向模式录制的视频,但不适用于以纵向模式录制的视频。

有人知道如何使用上面链接中提供的解决方案从纵向视频生成PNG帧吗?

我已经使用720p和1080p视频对此进行了测试。

我观察到的一些事情是,

MediaExtractor提供720p视频的宽度和高度1280和720,无论方向如何。这应该是1280 x 720的横向和720 x 1280的肖像。 1080p视频中的simillar案例。

其他的事情是当我在反向参数的Method drawFrame中传递false时,PNG帧很好但是颠倒了。

修改

使用ExtractMpegFramesTest我得到了这个结果

使用反转参数true的风景视频可提供完美的图像 http://postimg.org/image/qdliypuj5/

带有反转参数true的

纵向视频会产生失真的图像 http://postimg.org/image/vfb7dwvdx/

使用反向参数false的纵向视频可以提供完美的颠倒图像。(根据@Peter Tran的回答输出可以通过旋转位图来修复。) http://postimg.org/image/p7km4iimf/

1 个答案:

答案 0 :(得分:1)

saveFrame的评论中的ExtractMpegFramesTest中,它说明了

       // Making this even more interesting is the upside-down nature of GL, which means
        // our output will look upside-down relative to what appears on screen if the
        // typical GL conventions are used.  (For ExtractMpegFrameTest, we avoid the issue
        // by inverting the frame when we render it.)

这就是你提到的drawFrame的布尔参数的原因。

所以听起来你要做的就是在保存到PNG之前反转位图。这可以通过将Matrix(带有preScale)应用于位图来完成。调用saveFrame后,您需要修改bmp.copyPixelsFromBuffer中的代码。

请参阅此answer for mirroring a bitmap;并使用preScale(-1,1)在正确的轴上反转图像。