Android,快速视频处理

Ilj*_*kin 2 video android ffmpeg

我在当前需要视频处理的项目中遇到了麻烦。基本上是裁剪功能(视频应该被平方)、修剪(视频不应该超过 30 秒)和质量降低(比特率应该等于 713K)。
我已经成功地将 FFmpeg 嵌入到应用程序中,除了一个主要细节之外,所有功能都运行良好——按照我老板的要求进行处理需要很长时间。对于大约 52 MB 持续 36 秒的视频,执行所有操作需要 50 秒(我显然在任何其他操作之前将视频修剪到 30 秒)。问题是,在 iOS 视频处理的并行项目中,对于更大的文件需要 10-15 秒。我认为这与他们使用 Apple QuickTime 格式的事实有关,该格式显然是由 Apple 开发的,因此它运行速度非常快也就不足为奇了。
好吧,这是介绍,现在我的问题是:Android 有什么方法可以在 10-15 秒内(不超过 30 秒)处理任何质量的视频(现在我们可以假设所有视频都是 h264几秒钟,正如我老板所说)?FFmpeg 的一些替代品,可以更快地执行操作?我很确定没有可能在这么短的时间内完成这样的工作,因为我已经觉得我在互联网上搜索了思想,但我想确保真的没有可能做这样的工作。如果有人能提供比 FFmpeg 更快的解决方案链接或确认没有这样的解决方案,我将不胜感激。

更新
感谢 Alex Cohn,我用 MediaCodec 解决了这个问题。过了一会儿,我对 52MB 的视频进行了 20 秒的处理,并裁剪为方形并降低比特率。对于任何未来的谷歌员工,我可以建议看看这个存储库: 关于 MediaCodec 的很多东西
,更准确地说是在这个文件中:提取、编辑和再次编码,视频和音频

Ale*_*ohn 5

如果视频是在同一台设备上录制的,那么MediaCodec和原生 Android媒体 API很有可能会更快(在硬件中同时运行解码器和编码器)。否则,您可以尝试使用 MediaCodec 解码视频,如果失败则回退到 FFmpeg 软件解码器。即便如此,如果您可以使用 MediaCodec 进行压缩,仅此一项就可以提供令您老板满意的性能。

存在一个名为 libstagefright 的(已弃用)项目,该项目构建了支持硬件编解码器的 FFmpeg,它旨在用于 API 10+。

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

顺便说一句:请注意,FFmpeg 不带有 H264 编码器,FFmpeg+x264 的典型捆绑包是 GPL,并且要求您的所有应用程序都是开源的(或者为 x264 支付高额许可费,但仍然被迫遵守 LGPL FFmpeg)。

请注意,您可以仅通过操作 MP4 标头来制作方形视频,无需转码!