Cabbage icon indicating copy to clipboard operation
Cabbage copied to clipboard

技术解决方案探讨

Open xhzengAIB opened this issue 6 years ago • 6 comments

你好!

我们在你的中文说明当中看到以下信息: 对 CALayer 的支持,可以把 CALayer 所支持的所有 CoreAnimation 动画带入到视频画面中。比如使用 Lottie,设计师在 AE 中导出的动画配置,客户端用配置生成 CALayer 类,添加到 AVVideoCompositionCoreAnimationTool 中就可以很方便的实现视频中做贴纸动画的功能。

能否提供1~2个相应使用Lottie导出的动画配置做的视频合成的例子吗?

Jack WeChat:15915895880

xhzengAIB avatar May 14 '19 07:05 xhzengAIB

最近比较忙,没有时间搞这个 demo。

用 AVVideoCompositionCoreAnimationTool 只能离线下使用,如导出、截图的情况。使用 AVPlayerItem 做实时预览需要把 lottie 的 layer 添加到 AVSynchronizedLayer 上,AVSynchronizedLayer 再添加到播放视图上进行预览。

这个方案的实现方式比较蛋疼,渲染和预览需要走两套逻辑,所以我就没在项目里面写。

vitoziv avatar May 29 '19 05:05 vitoziv

也可以通过继承Resource,然后重写open override func image(at time: CMTime, renderSize: CGSize) -> CIImage? 来获取每一帧的画面, Lottie里面有提供方法来获取每一帧的画面

zhengrush avatar Oct 21 '20 07:10 zhengrush

继承的 resource 建议放到 Timeline 的 passingThroughVideoCompositionProvider 去过效果,如果是放到 videoChannel 下,会占用轨道资源

vitoziv avatar Oct 21 '20 08:10 vitoziv

谢谢大佬回复,我是放在passingThroughVideoCompositionProvider 来处理浮层,比如文字,静态图片,动态贴纸,其实你说AVSynchronizedLayer的那种实现方案应该更符合项目的需求,因为在预览的过程中可能会调整layer层的展示效果,比如调整大小,旋转角度之类的

zhengrush avatar Oct 21 '20 08:10 zhengrush

也可以通过继承Resource,然后重写open override func image(at time: CMTime, renderSize: CGSize) -> CIImage? 来获取每一帧的画面, Lottie里面有提供方法来获取每一帧的画面

Lottie有获取方法么

MQZHot avatar Nov 03 '20 04:11 MQZHot

也可以通过继承Resource,然后重写open override func image(at time: CMTime, renderSize: CGSize) -> CIImage? 来获取每一帧的画面, Lottie里面有提供方法来获取每一帧的画面

Lottie有获取方法么

要改写下Lottie的代码,通过time计算出动画的progress,然后渲染layer,最后把layer变成CIImage,具体参考https://github.com/lvpengwei/LottieInVideo

zhengrush avatar Nov 03 '20 05:11 zhengrush