gpt4 book ai didi

ios - 如何在 iOS 中将一个视频叠加在另一个视频上?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:07 37 4
gpt4 key购买 nike

我正在尝试将已拍摄的视频裁剪成 iOS 中的一个圆圈。我该怎么做。我知道如何使用 AVCaptureSession 来实现,但我不知道将已拍摄的视频作为 AVCaptureDevice 传递?有没有办法将视频裁剪成一个圆圈。我想将它叠加在另一个视频之上,因此它也必须具有透明背景。谢谢。

最佳答案

我猜你想制作这样的东西:

demo of video overlay with oval crop

您不需要 AVCaptureSession,因为您没有捕获视频。您需要一个 AVMutableComposition。您需要阅读 “Editing” section of the AV Foundation Programming Guide .以下是您需要执行的操作的摘要:

  1. 为您的视频创建 AVAsset 对象并等待它们加载轨道。

  2. 创建一个AVMutableComposition

  3. 为每个输入视频的合成添加一个单独的 AVMutableCompositionTrack。确保为每个轨道分配明确的、不同的轨道 ID。如果您让系统选择,它将为每个轨道使用轨道 ID 1,您稍后将无法在合成器中访问这两个轨道。

  4. 创建一个AVMutableVideoComposition

  5. 创建一个AVMutableVideoCompositionInstruction

  6. 对于每个输入视频,创建一个 AVMutableVideoCompositionLayerInstruction 并明确分配您在第 3 步中使用的轨道 ID。

  7. AVMutableVideoCompositionInstructionlayerInstructions 设置为您在第 6 步中创建的两层指令。

  8. AVMutableVideoCompositioninstructions 设置为您在第 5 步中创建的指令。

  9. 创建一个实现AVVideoCompositing 协议(protocol)的类。将视频合成(在第 4 步中创建)的 customVideoCompositorClass 设置为此自定义类(例如 videoComposition.customVideoCompositorClass = [CustomVideoCompositor class];)。

    <
  10. 在您的自定义合成器中,从 AVAsynchronousVideoCompositionRequest 获取输入像素缓冲区,并使用它们绘制合成帧(包含由前景视频帧的圆形 block 覆盖的背景视频帧).您可以根据需要执行此操作。我使用 Core Graphics 做到了这一点,因为这很容易,但您可能希望使用 OpenGL(或者可能是 Metal)来提高生产应用程序的效率。如果您使用 OpenGL,请务必指定 kCVPixelBufferOpenGLESCompatibilityKey

  11. 使用第 1 步中的合成创建一个 AVAssetExportSession

  12. 设置 session 的输出 URL 和文件类型。

  13. 将 session 的 videoComposition 设置为第 4 步中的视频组合。

  14. 告诉 session exportAsynchronouslyWithCompletionHandler:。它可能会很慢!

你可以找到我的测试项目in this github repository .

关于ios - 如何在 iOS 中将一个视频叠加在另一个视频上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28258270/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com