3

我想通过更改像素的颜色来处理我在 Android 手机上录制的视频。我知道如何进行我想要的处理,但我不知道将所有内容放在一起的最佳方式。

到目前为止,我能做的事情是:

  • 从视频中获取单帧作为 YCrCb (YUV)
  • 修改YCrCb中的字节我想要的
  • 将 YCrCb 转换为 RGB 数组
  • 将 RGB 数组转换为位图

如何将所有内容放在一起并将其保存为可以在 Android 上播放的视频?我可以直接从 YCrCb 信息中获取信息吗?还是我需要先转换为 RGB 或其他格式?

我不需要实时执行此操作,目的是录制视频,保存,然后处理并保存处理后的视频。但是我确实有速度。我可以使用他们的库来加快流程吗?我知道 Android 提供了 OpenGL 的使用,并且我读过 ffmpeg,但我不确定最佳路径。

如果有人能指出我正确的方向,我将不胜感激!=D

谢谢!!=D

4

1 回答 1

2

您从相机获得的帧是未压缩的。这通常不是存储视频的方式,因为未压缩的帧太大而无法被播放器实时读取和显示。相反,您希望对 yuv 或 rgb 帧进行编码,以使帧更小,并且播放期间的 I/O 负载很小。

您应该使用的编码格式必须是您的设备可以在硬件中解码的一种,因为在 CPU 中解码也非常昂贵。现在,如果您将 H.264 用于视频,将 AAC 用于音频,并使用 MP4 容器,您应该会很好。不幸的是,如果您在您的应用程序中包含 H.264/AAC 编码器(甚至是开源编码器)并计划从中赚钱,那么您可能会得到MPEG LA的访问,他们可能想要向您收集,因为 H. 264 和 AAC 需要许可。我相信如果您使用已获得许可并安装在设备中的编解码器(例如相机应用程序用于录制的编解码器),则可以避免这种情况。我不知道Android平台是否允许您访问相机编解码器。

至于库,我认为 ffmpeg 项目中的 libavcodec 和 libavformat 是最完整的。使用这些库,您可以对 H.264/AAC/MP4 文件进行编码,假设许可问题不会影响您。

于 2011-12-01T04:08:39.813 回答