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

Posted

技术标签:

【中文标题】如何在 iOS 中将一个视频叠加到另一个视频上?【英文标题】:How to overlay one video on another in iOS? 【发布时间】:2015-03-31 05:59:45 【问题描述】:

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

【问题讨论】:

您是想生成一个包含裁剪视频的文件,还是只想在裁剪成圆形的屏幕上实时显示? 我有两个视频,我想把圆圈视频放在其他视频的顶部,圆圈视频是透明的。 但是你是想把合并后的图像写入文件,还是直接显示在屏幕上? 这是一个视频。我想将视频裁剪成一个圆圈并将该视频放在另一个视频的顶部。该视频不保存透明度,所以我不知道如何组合这两个视频。然后我想保存视频 @BlaneTownsend 是否有机会帮助我完成发布的代码抢劫,我一直在尝试对我想要的内容进行一些更改,但不能完全得到它? 【参考方案1】:

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

您不需要AVCaptureSession,因为您不是在捕捉视频。你想要一个AVMutableComposition。您需要阅读“Editing” section of the AV Foundation Programming Guide。以下是您需要做的总结:

    为您的视频创建 AVAsset 对象并等待它们加载其曲目。

    创建一个AVMutableComposition

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

    创建一个AVMutableVideoComposition

    创建一个AVMutableVideoCompositionInstruction

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

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

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

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

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

    使用第 1 步中的合成创建 AVAssetExportSession

    设置会话的输出 URL 和文件类型。

    将会话的 videoComposition 设置为第 4 步中的视频合成。

    将会话告诉exportAsynchronouslyWithCompletionHandler:。可能会很慢!

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

【讨论】:

Rob 这太棒了,非常感谢。 @BlaneTownsend 嘿,我想知道如何在视图控制器.m 中将圆形视频制作到屏幕上?谢谢 @iqueqiorio AV Foundation Programming Guide 有一整章是关于播放视频的,Apple 也有关于它的示例代码和 WWDC 视频。 非常感谢抢。我的视频现在可以正常工作了,但是我无法将内部椭圆设置为正确的尺寸,以便捕获适量的内部视频。如果您能抽出一点时间帮助我,我将不胜感激,我邀请您聊天,或者我的 Skype 是 spennyfontein。谢谢大佬 rob 如果你愿意,我可以开始赏金,我只是需要一些关于大小的帮助吗? 我不能保证会帮助你,但听起来你应该发布自己的问题。

以上是关于如何在 iOS 中将一个视频叠加到另一个视频上?的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg - 将一个视频叠加到另一个视频上?

IOS safari 中的画布叠加在视频上

如何在iOS中将一张图像合并到另一张图像的中心?

在 OpenCV 中将视频序列插入到另一个视频

ffmpeg:如何使用 ffmpeg 在视频中仅放置颜色叠加视频或应用不同类型的滤色器(如 instagram)

在 iOS 上播放 360° 全景视频