Bla*_*end 2 crop video-processing avfoundation ios
我正在尝试将已拍摄的视频裁剪为iOS中的圆圈.我该怎么做呢?我知道如何使用AVCaptureSession进行此操作,但我不知道将已经拍摄的视频传递给AVCaptureDevice?有没有办法将视频裁剪成圆圈.我想将它叠加在另一个视频的顶部,因此它必须具有透明背景.谢谢.
rob*_*off 12
我想你想要产生这样的东西:
你不想要AVCaptureSession,因为你没有捕捉视频.你想要一个AVMutableComposition.您需要阅读AV Foundation编程指南的"编辑"部分.以下是您需要做的总结:
AVAsset为您的视频创建对象,并等待他们加载他们的曲目.
创建一个AVMutableComposition.
AVMutableCompositionTrack为每个输入视频添加单独的合成.确保为每个轨道分配明确的不同轨道ID.如果您让系统选择,它将为每个系统使用轨道ID 1,您将无法在稍后的合成器中访问它们.
创建一个AVMutableVideoComposition.
创建一个AVMutableVideoCompositionInstruction.
对于每个输入视频,创建一个AVMutableVideoCompositionLayerInstruction并明确指定您在步骤3中使用的曲目ID.
将AVMutableVideoCompositionInstruction's' 设置为layerInstructions您在步骤6中创建的两层指令.
将AVMutableVideoComposition's' 设置为instructions您在步骤5中创建的指令.
创建一个实现AVVideoCompositing协议的类.将customVideoCompositorClass视频合成(在步骤4中创建)设置为此自定义类(例如videoComposition.customVideoCompositorClass = [CustomVideoCompositor class];).
在自定义合成器中,从中获取输入像素缓冲区AVAsynchronousVideoCompositionRequest并使用它们绘制合成帧(包含由前景视频帧的圆形块覆盖的背景视频帧).你可以随心所欲地做到这一点.我使用Core Graphics做到了这一点很容易,但你可能想要在生产应用程序中使用OpenGL(或者可能是Metal)来提高效率.请务必指定kCVPixelBufferOpenGLESCompatibilityKey是否使用OpenGL.
AVAssetExportSession使用步骤1中的合成创建一个.
设置会话的输出URL和文件类型.
videoComposition将会话设置为步骤4中的视频合成.
告诉会话exportAsynchronouslyWithCompletionHandler:.它可能会很慢!
您可以在此github存储库中找到我的测试项目.
| 归档时间: |
|
| 查看次数: |
2196 次 |
| 最近记录: |