腾讯开源 Kotlin 高性能特效动画组件!
点击上方“Github中文社区”,关注
看遍Github好玩的项目
大家好,我是huer!
有人留言咨询有没有kotlin相关的开源,今天给大家推荐一款,先看一下效果展示:
1. VAP
VAP(Video Animation Player)是企鹅电竞开发,用于播放酷炫动画的实现方案。
相比Webp, Apng动图方案,具有高压缩率(素材更小)、硬件解码(解码更快)的优点
相比Lottie,能实现更复杂的动画效果(比如粒子特效) 而且VAP还能在动画中融入自定义的属性(比如用户名称, 头像)
2. 项目背景
企鹅电竞是个直播平台,需要在直播间里显示酷炫的送礼动画。
动画越酷炫,对素材大小与解码性能要求越高,调研了很多方案,先给对比表:
测试参数:
手机: 小米mix3
素材: 736 × 576 80帧
Apng: 75质量; Webp: 75质量; VAP: 2000码率
调研方案:
1.矢量动画方案(代表Lottie): Lottie矢量动画压缩率很高,但因为无法显示特殊效果(比如粒子特效),所以此方案不适合;
2.动图方案(代表GIF, Apng, Webp):
GIF: 只支持8位颜色,颜色丢失严重,解码性能低,无法满足特效效果;
Apng, Webp: 能够满足特效效果,但文件大,软解效率低(低端的手机上,比如当年的红米1,解码过程甚至能导致整个直播间卡顿),这些问题很难接受;
3.视频方案(代表mp4): 采用H264编码,相比动图方案,有很高的压缩率,硬件解码效率很高,缺点很明显,无法支持透明背景;
调研后发现,要么特效表现无法达到要求(Lottie, GIF),要么文件太大而且还是软解(Webp, Apng),要么不支持透明度(mp4),这些方案都不能满足我们的需求,高性能动画组件VAP诞生。
3. 实现原理
方案选择
mp4视频方案无论从效果、大小与解码性能上都是最优的,但H264的里存的是YUV数据,并没有带透明通道。VAP方案基于mp4,解决视频里透明度的问题,这样就能兼具更好的压缩效率,与更好的解码性能。
视频透明度实现
H264解码出来每一帧的数据是YUV,转换为RGB后是不带Alpha通道的,而我们可以在视频中额外开辟一块区域,在RGB通道里存储Alpha的值,最后利用OpenGL将这些数据合成为ARGB图像(带透明通道的图像)。
举个例子,解码器解码出一帧原始图像后,合成原理如图所示:
每一帧都做相同的事情,就是得到带透明度的视频,实际视频如下:原始视频中,黑白区域承载Alpha数据。VAP最新版本里实现了Alpha区域大小可变,通过缩小Alpha区域大小,在不影响最终显示效果的同时,能有效减少视频分辨率,提高机型兼容性,而且为VAP的融合特性空余出多余的区域。
动画配置信息
动画播放过程中,需要一些配置信息协助播放(比如Alpha区域声明,包括融合动画信息),配置是JSON格式。为了组件更方便使用,所有相关文件都合并到mp4文件里,这样播放动画只需要一个mp4文件即可。
mp4的组织方式与JSON的key-value组织方式很像,被称为一个BOX,我们创建一个新的BOX(vapc VAP Config),JSON内容放到这个BOX里,播放前先读取此BOX然后播放(ps: mp4规范里定义如果无法识别的BOX自动忽略,不影响mp4正常播放流程)。
VAP融合动画
VAP还支持在动画中融入自定义属性,比如用户名称, 头像。我们称其为VAP融合动画。
视频内容无法直接实现属性的插入,只能曲线救国,通过对属性图片进行修剪,欺骗用户的眼睛,让其看起来像是在视频内容里,实现最终的融合效果(效果如文章开头展示)。
为实现属性图片处理,需要引入“遮罩”素材,利用遮罩与属性图片进行Porter-Duff操作,就能得到需要的形状
再将结果贴到视频对应坐标位置,就能实现最后的融合效果。
“遮罩”素材保存在每一帧视频内容里,之前通过缩小Aplha区域,空出来的区域得到利用。
配套工具
为大家更方便的使用组件,还有配套的素材制作工具
项目地址
开源地址:https://github.com/Tencent/vap
OK!到这就是这期分享如果觉得文章有用,请点赞在看,分享。历史阅读
★ 中国 GitHub 霸榜乱象!国内程序员的脸都被丢尽了!★ GitHub 上 22 万star的第一抢票神器,3秒钟抢到!★ GitHub上10k+点赞,一套强大的后台管理系统竟然出了详细教程!★一款实现 C++、Java、Python 代码互译的工具,用起来很爽
点个在看呗
腾讯开源 Kotlin 高性能特效动画组件!相关推荐
- 腾讯开源Android动画库,腾讯开源的酷炫动画播放解决方案Vap初体验
同事在群里有提到Vap,播放炫酷动画的,可以让动画背景透明,就去了解了下. 也可以看下面的视频播放效果(不动点击播放): 原本以为是直接弄个视频就可以播放. 后来查看官方案例,为了让动画背景有半透明特 ...
- 腾讯开源的kotlin高性能组件!
1. VAP VAP(Video Animation Player)是企鹅电竞开发,用于播放酷炫动画的实现方案. 相比Webp, Apng动图方案,具有高压缩率(素材更小).硬件解码(解码更快)的优点 ...
- 高性能动画组件VAP开源啦!
VAP(Video Animation Player)是企鹅电竞开发,用于播放酷炫动画的实现方案. 相比Webp,Apng动图方案,具有高压缩率(素材更小).硬件解码(解码更快)的优点 相比Lotti ...
- 腾讯PAG动画组件技术,8K内容生产和传输应用实践,xR虚拟拍摄技术探索,影视生产与互联网音视频...
腾讯PAG动画组件技术 Topic <动效素材极速交付:腾讯PAG动画组件技术揭秘> 陈仁健 腾讯 OVBU 计算内容中心副总监 音视频产品中的动效素材需求是源源不断的,例如贴纸花字,转 ...
- 腾讯研发动画组件,以后动画制作用PAG
你好,我是tiantian. 我们知道,动画特效可以辅助视觉制作焦点,引导注意力的方向,越来越为广大视觉设计师青睐,并广泛应用于各类场景开发. 关于动画设计工具,既有 Framer.js.Origam ...
- 腾讯万亿级大数据组件 TubeMQ 正式开源
点击上方"民工哥技术之路"选择"星标" 每天10点为你分享不一样的干货 来源:腾讯开源 9月12日,Apache软件基金会成立20周年之际,腾讯在Apach ...
- html5 特效 背景 腾讯,html5腾讯QQ登录界面背景动画特效
特效描述:html5 腾讯QQ 登录界面 背景动画特效.腾讯QQ登陆界面动态背景,直接从腾讯网站获取,js代码有加密,做了个简单地示例 代码结构 1. 引入JS 2. HTML代码 *{margin: ...
- 腾讯开源项目盘点:WeUI,WePY,Tinker,Mars等
开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来. 腾讯开源了个 ...
- 第一篇|腾讯开源项目盘点:WeUI,WePY,Tinker,Mars等
开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来. 腾讯开源了个 ...
最新文章
- 猫和老鼠服务器维修有问题,猫和老鼠:游戏中大范围的断网掉线问题 玩家:土豆服务器就这样...
- HTML --- 盒模型
- java职业发展路线图_Java程序员如何选择未来的职业路线
- LeetCode上求两个排序数组中位数问题—— Median of Two Sorted Arrays
- Oracle中rownum用法警示
- 跨平台APP JQuery Mobile开发-张晨光-专题视频课程
- shiro---注解
- 据说网易搜索引擎-超越GOOGLE
- (3)JavaScript 的注释
- delete index mysql_为什么MySQL不建议delete删除数据「心得分享」
- matlab 查找脉冲产生时间,脉冲时间信号MATLAB表示
- MRTG 监控主机流量
- Usb设备驱动5:usb-firmware简易框架
- 解锁三星bl锁有几种方法_三星S8有几种解锁方式?三星S8解锁方法介绍
- 三明计算机动漫与游戏制作,福建中小学电脑制作-福建中等职业教育与终身教育网.DOC...
- 【二十二】 H.266/VVC | 选择最优的仿射AMVP候选项 | xEstimateAffineAMVP函数
- 进入BeOS的花花世界 系列三
- Composer 原理使用
- 峨眉派的创始人真的是郭襄吗?
- Java初学者作业——为某超市设计管理系统,需要在控制台展示系统菜单,菜单之间可以完成跳转。