我正在关注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/
答案 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)
在正确的轴上反转图像。