ExtractMpegFramesTest 在 android 中以纵向模式录制的视频存在问题

ExtractMpegFramesTest having issue with video recorded in portrait mode in android

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

有谁知道如何使用上面提供的解决方案从肖像视频生成 PNG 帧 link?

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

我观察到的两件事是,

无论方向如何,MediaExtractor 都会给出 720p 视频的宽度和高度 1280 和 720。横向应为 1280 x 720,纵向应为 720 x 1280。 1080p 视频中的类似情况。

另一件事是当我在方法 drawFrame 的 invert 参数中传递 false 时,PNG 框架很好但颠倒了。

编辑:

使用 ExtractMpegFramesTest 我得到了这个结果

带有反转参数 true 的风景视频给出了完美的图像 http://postimg.org/image/qdliypuj5/

反转参数为 true 的纵向视频会产生扭曲的图像 http://postimg.org/image/vfb7dwvdx/

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

ExtractMpegFramesTest saveFrame 的评论中,它指出

       // 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 之前反转位图。这可以通过将矩阵(带预缩放)应用于位图来完成。在调用 bmp.copyPixelsFromBuffer.

之后,您需要修改 saveFrame 中的代码

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