前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PAG 4.2 版本正式发布:新增 3D 图层与视频替换能力,大幅优化 UI 播放性能

PAG 4.2 版本正式发布:新增 3D 图层与视频替换能力,大幅优化 UI 播放性能

作者头像
陈仁健
发布2023-04-18 11:40:39
1.7K0
发布2023-04-18 11:40:39
举报

PAG 4.2 版本在以下几个层面进行了完善:AE 特性支持方面,新增支持了 3D 图层、色相/饱和度、亮度和对比度;推出了全新的 UI 场景播放组件 PAGImageView,相比之前方案可以大幅降低 70% 以上的内存和 28.6% ~ 41.6% 的 CPU 占用;针对音视频的垂直使用场景,增加了内置的占位图替换视频、音频播放及导出视频文件的能力;针对素材防盗用的需求推出了 PAG 素材加密的能力。

4.2 版本主要修改内容

AE 特性新增支持

● 3D 图层 (3D Layer)

● 色相/饱和度(Hue/Saturation)

● 亮度和对比度(Brightness & Contrast)

接口新增

● 新增 PAGImageView 类:针对 UI 场景设计的专用播放组件,基于图片解码器+磁盘缓存模式,能够避免 OpenGL 跟 UI 视图桥接的额外开销,大幅降低内存和 CPU 占用。

● 新增 PAGDecoder 类:支持通过 PAGFile 或 组合的 PAGComposition 创建,将 PAG 当作标准图片解码器使用,快捷获取某一帧的渲染内容。

● PAGSurface 类:新增 copyPixelsTo 接口,支持将 PAGSurface 渲染的像素内容拷贝至业务方给定的内存地址。

能力新增

● 占位图替换视频,视频文件可以像普通图片一样一键替换到指定的占位图上,快速实现视频模板能力。

● 导出视频文件,替换占位图或修改文本之后的 PAG 动效可以快速导出成视频文件。

● 音频播放,内置音频播放能力,包含 PAG 素材自带的音频以及用户替换的视频包含的音频轨道。

● 素材加密播放,支持通过桌面 PAGViewer 工具加密后的 PAG 素材进行授权播放。

能力优化

● 文本渲染支持含有多个 unicode 的 emoji 表情 (Android 端需要使用带 -harfbuzz 后缀的版本)。

● DisplacementMap 现已支持所有图层类型,不限制用于 BMP 预合成图层。

● PAGView 首帧播放渲染优化,避免出现首帧跳帧的情况。

● 优化存在多个图层交错引用同一个 BMP 预合成情况下的播放卡顿问题。

桌面端配套工具

● macOS 平台导出插件和桌面预览工具全面支持苹果 M1 芯片架构。

● 桌面端预览工具支持素材加密以及批量添加水印的能力。

4.2 版本主要功能解读

AE 特性新增支持

● 3D 图层 (3D Layer)

3D 图层的支持使得 3D 特效不再需要通过 BMP 预合成导出折衷实现,从而可以矢量导出特效素材,降低特效文件的大小以及提升渲染的性能,同时支持 3D 图层中的文本和占位图二次编辑,更好的发挥设计师的创意。

● 色相/饱和度(Hue/Saturation)

● 亮度和对比度(Brightness & Contrast)

色相/饱和度、亮度和对比度的支持, 使得占位图支持更丰富的颜色调节能力,替换占位图后这些效果也将得到保留,用户素材与整个素材色调和谐统一,为设计师提供了更多可发挥的空间。

全新 UI 场景播放组件

从 4.2 版本开始增加了针对 UI 场景的专用播放组件 PAGImageView,可以有效绕开 GPU 实时渲染方案在 UI 场景下劣势。尤其是对 UI 列表或同一页面中同时播放多个 PAG 文件的场景(如下图),可以显著降低内存占用同时提升渲染性能。其主要原理是充分利用了磁盘缓存,在渲染当前帧的同时,也将当前帧的渲染数据缓存到本地。单个动效文件在整个生命周期中用户只会看到一次短暂基于 GPU 实时渲染的画面,后续都是直接读取高速的磁盘缓存来呈现,并且即使重启 App 后缓存也仍然有效。从而降低整个渲染过程中因为 GPU 实时渲染而引入的额外基础开销。另外由于 PAGImageView 跟 UI 框架之间并没有 GPU 桥接层,天然的能够高性能混合,也就无需处理任何额外的合并播放逻辑。

性能数据

测试条件:

机型:iOS:iPhone 12 Pro,

          Android:三星 S21

测试方法:进入一个空白页面记录起始内存,然后添加多个 View,记录稳定后的内存,得到内存增量和 CPU 占用。

从上图的测试数据可以看出,iOS / Android 平台在 UI 场景中渲染数量众多的独立 View 时,使用 PAGImageView 相对于之前 PAGView 的方案,以同时渲染 20 个为例(渲染效果如上),内存占用分别减少了 89.1%、75.5%, CPU 相比之减少了 41.2%、28.6%。如果渲染场景对于清晰度要求不高,还可以通过 setRenderScale 降低缓存尺寸,进一步降低内存和 CPU 占用,当 RenderScale 为 0.5 时,相比之前内存占用减少了 96%、84.8%, CPU 减少了 65.7%、42.9%。优化非常显著。

除此之外, PAGImageView 还提供了开启全内存缓存的开关,针对一些极度流畅但对分辨率又不高的动效内容,可以使用这种模式将所有帧数据缓存至内存,实现极低的 CPU 占用率,适用于对于 CPU 占用要求较高且渲染尺寸较小的场景,如上表中 PAGImageView 全内存缓存模式下,渲染 5 个、10 个 和 20 个 iOS 平台的 CPU 占用分别为 4%、6%、11%, Android 端分别为 4%、5%、5%。刨除 App 本身的基础 CPU 占用,可以看到随着动画个数的增长 CPU 占用的增量几乎没有变化。

这里需要说明一下内存增量的测试方法,由于 OpenGL 环境一旦执行,系统可能会缓存对应的动态库和运行环境以加速后续的调用。这部分内存增量虽然无法释放,但它并不会跟随动画数量线性增长,而且会跟 App 中其他 OpenGL 模块共享占用。因此为了更加准确地反映真实使用场景中的实际内存增量,在测试过程中我们需要在首次文件缓存完成后杀掉 App,重启 App 再播放动画查看内存占用,这样得到的才是排除 OpenGL 环境缓存后的实际内存增量。

以上测试主要针对 PAG 在 UI 播放的场景下的对比数据,但如果是非 UI 场景下播放,例如视频编辑处理,要实时渲染海量的同屏动效素材,使用 PAGView 合并渲染仍然是最优的方案。另外 PAGImageView 在极大分辨率的渲染场景下也会有劣势,虽然可以通过 renderScale 提升性能,但是也降低了清晰度,而 PAGView 在保持清晰度的前提下,渲染大分辨率动画的性能还是更加优异。可以根据具体的业务需求特点进行选择使用。

开箱即用视频模板能力

PAG 诞生之初就是为了解决音视频编辑场景下的复杂动效渲染需求,并提供了相关接口可以便捷地与原生视频渲染链路相整合。但从原理上 PAG 本身并不是音视频编辑框也不包含对应处理能力,它只负责通用动效素材的渲染和还原。在各种垂直的使用场景下,需要业务方自己开发对应的业务框架或者接入行业里成熟的解决方案搭配使用。但这部分的研发工作对大部分业务来说还是太过复杂,例如常见的视频模板相关功能,不仅需要理解跨平台的 GPU 渲染框架,同时处理海量的硬件兼容性问题。

针对这块的业务痛点,从 4.2 版本我们也开始探索将部分垂直使用场景的需求进行开箱即用的封装。我们首次在 PAG 内提供了视频模板处理能力的 PAGMovie 模块,包含占位图一键替换视频,音频播放,以及导出视频等完整的能力。这个模块整体上基于已在腾讯系产品中广泛使用的成熟音视频框架 TAVMedia,并进行了精简抽离。接入后除了可以显著降低从头研发音视频处理能力的成本外,内置到 PAG 的使用模式也极大简化了接口调用的复杂度。让业务方可以无需关心底层复杂的音视频处理细节,像操作图片库一样轻松完成视频模板相关的需求。

● 占位图替换视频

占位图替换视频功能允许业务方直接将视频文件替换到图片图层中。替换时,SDK 支持设置视频的速度,音量,截取时间范围等参数,满足接入方对视频细粒度的修改。同时,通过结合导出插件在 AE 中设置的 TimeRemap 参数,视频可以一键应用各种 PAG 时间特效,完成视频定格、慢放、快放、巡回等等视频效果。

● 内置音频播放

在之前的版本中,音频播放需要业务方读取 PAG 素材中的 PCM 音频数据自己处理音频播放与音画同步。在 4.2 版本中,我们内部实现了音频播放的能力,支持通过 PAGView 播放动画的同时播放音效,且支持占位图中传入的视频中的音频也可以和 PAG 素材中的音频相混合。

● 导出视频文件

4.2 版本支持了 PAGComposition 的导出功能。当接入方编辑完PAGComposition后,可以直接将 PAGComposition 导出成视频,极大地减少接入方开发成本。在导出时,音视频轨道会分别异步导出,从而尽可能利用设备的硬件条件,保证整体导出效率。

官方素材加密能力

随着 PAG 接入的业务方数量日益增多和素材格式的广泛普及,素材的安全性也变得越来越重要。第三方通过 hook 等技术手段,可以很轻松盗取业务方耗费大量人力设计出来的通用 PAG 素材。为此,我们在 4.2 版本中也开始提供了第一方的素材加密保护能力,为业务提供法务途径之外的有效技术保护手段。业务团队目前也可以基于 PAG 开源的代码自行加密素材,但都没法做到有效的保护。核心原因是无法绕过内存抓取这个最大的漏洞。业务的加密手段无论再复杂,都还是需要在内存解密后再依赖开源 SDK 渲染,第三方只需要 hook 开源 SDK 里解码函数的对应指针地址,就可以无视任何加密手段,直接提取内存中解密后的素材文件。而 PAG 官方提供的素材加密模块确保了渲染过程中都不存在解密后的文件,也完全无法再次被编码成 PAG 文件。从源头上彻底杜绝了内存抓取的问题

新增商业化版本

参考行业里成熟且活跃维护的开源项目,无一例外背后都有完善的商业化体系支撑。只有充分商业化开源项目,才可能有更多的资源持续投入到免费功能的迭代以及社区用户对接中。因此 PAG 团队也将从 4.2 版本开始逐步探索最合适自身的配套商业化路径,整体策略会在开源免费版本的基础上,额外为更多的重度使用场景提供高阶的增值技术能力和服务。目前 PAG 的桌面预览工具和 AE 导出插件仍然完全免费,而 PAG SDK 从 4.2 版本开始将会提供两个版本:

社区版完全开源免费,采用 Apache 2.0 协议,可以自由商用,社区版只专注于通用的动效渲染还原以及动效文件格式的标准化,并针对动效播放等轻度使用场景提供开箱即用的支持。历史已有的开源免费能力都包含其中,未来也都不会转为付费,而且后续还会不断更新 AE 新特性支持。

企业版付费授权使用,在通用功能的基础上会持续增加一些针对重度使用场景的高阶能力封装,例如开箱即用的视频模板相关能力,以及素材加密等。业务侧选购后除了能显著减少自行封装实现的大量研发成本外,还可以获得官方团队一对一的即时技术支持服务,加速产品需求的高效落地。

社区版和企业版详细的功能对比可以点击阅读原文访问 PAG 官网。

总结

PAG 4.2 版本新增支持了大家需求比较强烈的 3D 图层,针对需要同时播放多个 PAG 动效的 UI 及列表场景进行了优化,同时在视频后编辑和素材加密等垂直领域进行了封装,满足特定场景的用户需求。PAG 4.3 版本我们将会针对 PAG 素材中的 BMP 预合成做磁盘缓存,进一步优化 PAG 在 UI 场景的性能,同时也会支持更多的 AE 特性。

微信公众号:PAG 动效

 已正式开源

 Github地址:https://github.com/Tencent/libpag

 如果想了解、接入 PAG,欢迎访问 PAG 的官网或微信公众号

 PAG 官网:https://pag.art/

 加入 QQ 群进行用户交流&官方互动:893379574

 PAG 动效经验交流可访问官方论坛:https://bbs.pag.art/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PAG动效 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
媒体处理
媒体处理(Media Processing Service,MPS)是一种云端音视频处理服务。基于腾讯多年音视频领域的深耕,为您提供极致的编码能力,大幅节约存储及带宽成本、实现全平台播放,同时提供视频截图、音视频增强、内容理解、内容审核等能力,满足您在各种场景下对视频的处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档