2016-04-23 158 views
2

我在当前需要视频处理的项目中遇到麻烦。基本上裁剪功能(视频应平方),裁剪(视频不应超过30秒)和质量降低(比特率应等于713K)。
我已成功将FFmpeg嵌入到应用程序中,除了一个主要细节外,所有功能都工作得很好 - 根据我的老板处理需要的时间太长。对于拥有52 MB大约36秒的视频,执行所有操作需要50秒(我明显在将视频剪辑为30秒前)。问题是在iOS视频处理上的并行项目需要10-15秒才能获得更大的文件。我认为这与他们正在使用Apple QuickTime格式有关,事实上这是苹果公司开发的,所以它的工作速度并不奇怪。
好吧,这是介绍,现在我的问题是:有没有什么办法让Android在10-15秒的时间内处理任何质量的视频(现在我们可以假设所有视频都是h264)在30秒内,正如我的老板所说)?一些替代FFmpeg,可以更快地执行操作?我很确定在这么短的时间内不可能完成这样的工作,因为我已经觉得我在互联网上搜索思想,但我想确保没有可能做这样的工作。如果任何人都可以给我提供比FFmpeg更快的解决方案链接,或者确认没有这样的解决方案,我会非常乐意。Android,快速视频处理

更新
感谢Alex Cohn我用MediaCodec解决了这个问题。过了一段时间,我在52MB视频上进行了20秒处理,裁剪成平方并降低了比特率。对于离开这里任何未来的Google我可以建议看看这个程序存储库: Many stuff about MediaCodec
多恰恰在这个文件:Extract, edit and encode again, video and audio

回答

3

如果视频已被记录在同一台设备上,你有一个非常好的机会MediaCodec和原生Android media APIs将会更快(在硬件中运行解码器和编码器)。否则,您可以使用尝试来使用MediaCodec对视频进行解码,如果失败,可以回退到FFmpeg软件解码器。即便如此,如果您可以使用MediaCodec进行压缩,仅凭这一点就可以提供令您的老板满意的性能。

存在一个名为libstagefright的项目(不建议使用),该项目构建FFmpeg,并支持硬件编解码器,并且它被设计用于API 10+。

不要忘记比较你的Android设备和iOS平台的CPU特性(如果这是6S,它们有重要的前景)。考虑多线程编码和解码。

BTW:注意FFmpeg的不来与H264编码器,和FFmpeg的+ X264的典型束是GPL,并要求所有的应用程序是开源(或支付高额许可费X264,但仍被迫遵守FFmpeg的LGPL)。

请注意,您只需操作MP4标头就可以制作方形视频,无需转码!

+0

嗯,我已经尝试在FFmpeg上使用HW,但它失败了。显然,我也阅读了MediaCodec的文档,但没有得到如何很好地整合这一点。从我们的项目的最小API版本是15,MediaCodec需要16,但是我认为如果有必要,我可以说服团队将最小的API升级到16。无论如何,我会仔细看看MediaCodec,希望能找到一些解决方案:)关于h264,是的,我们使用libx264,并且告诉我的老板关于许可问题。他说,不要为此烦恼,并将其留给他,正如我刚刚所做的那样 –

+0

FFmpeg的HW支持意味着SIMD加速,即适度的渐进式改进。 MediaCodec使用硬件编码器,它基本上受内存总线的限制。 –

+0

API 15是一个奇怪的限制,今天有2.2%的设备,并且从未成为流行的平台。要么坚持姜饼,要么转移到果冻豆或更高。 –