我想从多个图像创建视频并在图像之间添加交叉消解效果。添加交叉消解效果 - 创建iOS视频
这怎么办?我知道图像可以写入视频文件,但我看不到应用效果的位置。应该将每幅图像转换为视频,然后将视频写入带有过渡效果的填充视频中?
我已经四处搜索,无法找到有关如何完成这方面的许多信息,例如,如何使用AVMutableComposition以及如果可以创建包含单个图像的视频,然后应用交叉消解效果。
任何信息将不胜感激。
我想从多个图像创建视频并在图像之间添加交叉消解效果。添加交叉消解效果 - 创建iOS视频
这怎么办?我知道图像可以写入视频文件,但我看不到应用效果的位置。应该将每幅图像转换为视频,然后将视频写入带有过渡效果的填充视频中?
我已经四处搜索,无法找到有关如何完成这方面的许多信息,例如,如何使用AVMutableComposition以及如果可以创建包含单个图像的视频,然后应用交叉消解效果。
任何信息将不胜感激。
如果你想在AVFoundation的这种情况的肠子周围挖,我强烈建议你take a look at this presentation, especially starting at slide 74准备做大量的工作,拉这一关......
如果您想获得业务要快好几个数量级,而且不介意加入第三方库,我会很高兴recommend you try GPUImage
你会发现把图像压入视频并随意交换出来很简单,就像以及将任意数量的混合滤波器应用于转换,只需在转换发生的时候改变混合滤波器的单个混合属性即可。
我目前正在执行此操作。为了简化:您需要一个AVPlayer
,您可以将其放置为空的AVPlayerItem
。然后,您需要将AVPlayerItem
的forwardPlaybackEndTime
设置为动画的持续时间。然后,您创建一个AVPlayerLayer
,通过AVPlayer
启动。 (其实你可能不需要AVPlayerLayer
,如果你不会把视频放入你的动画中,那么重要的一点是,你创建一个AVSynchronizedLayer
,你以前的AVPlayerItem
,这个AVSynchronizedLayer
和它所拥有的任何子图层将与你的AVPlayerItem
同步。然后,您可以创建一些简单的CALayer
(通过contents
属性并将您的CAKeyframeAnimation
添加到opacity
属性中的图层上,现在这些子图层上的任何动画都将按照您的AVPlayerItem
的时间开始动画,只需致电play
即可您的AVPlayer
。这是播放的理论。如果你想导出这个动画在MP4中,你将需要使用AVVideoCompositionCoreAnimationTool
,但它非常相似。
感谢尼古拉斯,我已经制定了一个更简单的方式来显示使用UIView + transitionFromView:toView:duration:options:completion:我再看看AVVideoCompositionCoreAnimationTool,但可能会像Ryan提到的那样使用GPUImage。 – jarryd
@NicolasManzini forwardPlaybackEndTime不起作用,它是否适合你 – onmyway133
事实上,它不适用于AVSynchronizedLayer,你需要有一个具有动画所需持续时间的播放器项目,否则它将不会移动。 –
谢谢瑞安。这些幻灯片几乎是我在它上面找到的唯一信息,看起来好像还有很多信息缺失,无法完全理解它。我实际上在这个应用程序中使用GPUImage来将滤镜应用于图像,但我从不知道视频的过渡效果。如何在录制视频时使用混合滤镜? – jarryd
我会将两个不同的GPUImagePicture送入您的混合(GPUImageDissolveBlend也许?),然后设置一个NSTimer,每隔0.1秒钟滴答一次,并在每个滴答上增加/减少混合过滤器的.mix属性。我还会回收GPUImagePicture对象并根据需要更换它们的图像,而不是每次都设置并拆除新的GPUImagePictures。这会招致一点addTarget/removeTarget startProcessing/stop舞蹈,但应该感觉用户无缝。 –
哦,你会在你的界面中同时定位一个GPUImageView,并且你的dissolveBlend过滤器会同时定位一个GPUImageMovieWriter。然后您可以同时获得用户回放和录制文件。如果遇到任何障碍,请随意私下ping我。联系信息在ryancumley dot com –