Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用AVAssetWriter向视频添加静态和动态覆盖?_Ios_Avfoundation_Avassetwriter - Fatal编程技术网

Ios 如何使用AVAssetWriter向视频添加静态和动态覆盖?

Ios 如何使用AVAssetWriter向视频添加静态和动态覆盖?,ios,avfoundation,avassetwriter,Ios,Avfoundation,Avassetwriter,向使用AVAssetWriter创建的视频添加图像覆盖的正确方法是什么 AVAssetExportSession可以实现这一点,但这个问题是关于如何使用AVAssetWriter实现这一点,以便更好地控制质量和输出 有两种情况: 1) 简单:添加在整个视频持续时间内呈现的单个覆盖(类似于水印) 2) 复杂:添加不同的覆盖层,在不同的时间在视频中显示动画(类似于使用AVVideoCompositionCoreAnimationTool)。有很多不同的方法,正确的答案将取决于您的用例 在高层次上,有

向使用AVAssetWriter创建的视频添加图像覆盖的正确方法是什么

AVAssetExportSession可以实现这一点,但这个问题是关于如何使用AVAssetWriter实现这一点,以便更好地控制质量和输出

有两种情况:

1) 简单:添加在整个视频持续时间内呈现的单个覆盖(类似于水印)


2) 复杂:添加不同的覆盖层,在不同的时间在视频中显示动画(类似于使用AVVideoCompositionCoreAnimationTool)。

有很多不同的方法,正确的答案将取决于您的用例

在高层次上,有三种方法:

  • 您似乎已经熟悉AVVideoCompositionCoreAnimationTool。您可以将其与AVAssetWriter一起使用。查看哪一个是AVAssetExportSession的替代品,它允许您传递正在查找的AVAssetWriter设置(因为它在内部使用AVAssetWriter)
  • 如果您想将水印之类的内容合成到实时视频中(如本问题中),那么实际上可以修改示例缓冲区,该缓冲区由AVCaptureVideoDataOutputSampleBufferDelegate传递给captureOutput函数。这里的典型方法是将CMSampleBuffer转换为CIImage,然后执行任何您喜欢的操作,最后将CIImage转换回CMSampleBuffer并将其写出。在问题链接中,CMSampleBuffer只是简单地传递,没有任何操作。注意:从CIImage返回CMSampleBuffer的步骤相对较低,但是有很多关于StackOverflow的示例,尽管Swift中的示例并不多。这里有一个实现(但是对于OSX)
  • 根据所需操作的复杂程度,您可以通过创建一个符合AVVideoComposition并在AVVideoComposition中引用的类来实现自己的自定义合成器。这是一个复杂且(可能)过度的过程-如果您不知道为什么需要这样做,那么您可能不需要这样做。如果您开始遇到诸如“如何在视频中的不同轨迹上设置多个动画层,而不是在一个轨迹上设置所有动画层”或“如何在图像帧内旋转、缩放和设置移动视频的动画-如视频在帧中播放时旋转的宝丽来片”。。。这就是你需要调查的

  • 如果您需要进一步的信息,然后如果您对您正在尝试做的事情进行澄清,我可能可以扩展此答案,以添加有关适当方法的更多详细信息。

    再次感谢Tim!我们将调查这些问题并报告。如果水印不需要是实时的,即用户捕获视频,然后我们添加水印,听起来像#1最好?#1有缺点吗?或者对于非实时覆盖选择#2而不是#1的原因吗?没有技术原因,只是用户体验原因。如果你的应用程序只是制作视频,而你只是在做后期处理来添加水印,那么在我看来,最好是同时制作(使用#2)。如果您正在对用户录制的内容进行更复杂的后期处理,那么#1是一个不错的选择。好的,谢谢。。。澄清一下,你基本上是说#2将比#1更快地生成视频,因此用户等待的时间更短?很酷,这非常有用。将首先尝试#1,因为它更容易,并且对于一个用例来说后处理很简单。不幸的是,添加不同的多个覆盖层(对于单轨)似乎需要#3。祝你在Mixbit上好运。你的业力太低了3个数量级;你应该得到更多!好的,很酷,再次感谢!不,两个用例只需要一个视频曲目。所以使用动画工具不会影响质量?质量完全由AVAssetWriter中的设置决定?此外,AVAssetExportSession大约需要10-20秒才能将多个覆盖(而不是单个水印)动画化为60秒的用户视频。使用AVAssetWriter使用#1会提高性能吗?还是需要一些#2的混合?