目前,FFmpeg支持将VP9压缩到yuva420p。
使用grafika作为代码库,我在Android中实现了播放经过VP9 yuva420p编码的视频(使用SurfaceTexture和MediaCodec),但我无法从视频中获取Alpha通道。
我检查了视频是否使用VideoAlphaMode进行编码; ID:0x53c0 size:4,所以我确定视频包含Alpha通道。
因此问题是:Android 4.4+解码器是否支持具有Alpha通道的VP9?
目前,FFmpeg支持将VP9压缩到yuva420p。
使用grafika作为代码库,我在Android中实现了播放经过VP9 yuva420p编码的视频(使用SurfaceTexture和MediaCodec),但我无法从视频中获取Alpha通道。
我检查了视频是否使用VideoAlphaMode进行编码; ID:0x53c0 size:4,所以我确定视频包含Alpha通道。
因此问题是:Android 4.4+解码器是否支持具有Alpha通道的VP9?
试一下
ffmpeg -i input.mov -c:v libvpx -pix_fmt yuva420p out.webm
建议您首先在64位Linux工作站上构建最新版本的libvpx本身。 libvpx测试套件应包括alpha通道的测试。确保该测试通过。如果没有通过,那是一个不好的迹象,因为libvpx是VP9的参考实现。
如果测试通过,下一步将尝试在Linux上使用更高级别的库进行alpha解码和叠加。我建议使用GStreamer 1.8.2或更高版本。将剪辑叠加在“videotestsrc”生成器的顶部,该生成器将生成大多数视频格式。
如果这些测试中的任何一个失败,我建议您在继续之前仔细调查原因。
之所以从Linux开始,是因为您将更容易地构建和排除故障,并且我怀疑您可能正在遇到规范的边缘,甚至还没有在参考实现(libvpx)中实现,或者很难集成到更高级别的库中(因此建议使用GStreamer)。
话虽如此,虽然我在VP8和libvpx方面有丰富的经验,但我没有使用VP9特定的功能集。我很想关注您的努力,并可能能够在您取得进展时提供建议。