我需要将视频解码为一系列位图,以便我能够修改它们,然后将它们压缩回 android 中的视频文件。
我计划通过使用来管理这个getFrameAtTime
并将其保存到图像序列中。然后我可以修改序列中的图像并将其编码回电影。但我对此有两个问题:
- 首先,当我读到它时,
getFrameAtTime
用于创建缩略图,并不能保证返回正确的帧。这使得视频滞后。
- 其次,保存图像并读取它需要很长时间。
我读到进行解码的正确方法是使用 MediaExtractor,这很好,但我只有将其直接渲染到的示例surfaceView
。有什么办法可以让我转换outputBuffer
位图?
我需要它才能在 16 及以上的 api 级别上工作。
您可以在以下位置找到一系列有用的示例bigflake http://bigflake.com/mediacodec/ site.
特别是,ExtractMpegFramesTest
演示如何将 .mp4 文件解码为Bitmap
,以及DecodeEditEncodeTest
解码并重新编码 H.264 流,使用 GLES 着色器修改帧。
许多示例使用 API 18 中引入的功能,例如Surface
输入到MediaCodec
(这避免了许多颜色格式问题),以及MediaMuxer
(它允许您转换来自的原始 H.264 基本流MediaCodec
到 .mp4 文件中)。某些设备允许您将视频提取为 YUV 数据ByteBuffer
、修改它并重新编码,但其他设备提取为专有的 YUV 颜色格式,可能会被 API 16 版本拒绝MediaCodec
.
我建议针对 API 18(Android 4.3“Jellybean”MR2)或更高版本进行编码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)