9月16日,在北京举行的“火山引擎增长沙龙-人工智能专场” 上,火山引擎智能视频编辑相关技术人员出席活动,详细讲解了字节跳动音视频编辑中间件非线性编辑器的核心原理。
火山引擎认为,对于任何一款移动端APP产品来说,优质的内容生态都离不开优秀的创作者,也离不开优秀的工具加持。火山引擎的非线性编辑器采用了一种新型的“数据驱动模型”。与传统的事件驱动范式相比,这一模型通过对五种模型的组合使用,即可实现各种各样的编辑能力。
那么,在这一“新潮”的产品理念的背后,原理是怎样的呢?为什么更改一些数据或模型,就可以最终影响视频生成的效果呢?它背后的引擎是如何操作、如何与数据关联起来的呢?
火山引擎智能视频编辑相关技术人员在讲解中表示,在编辑器中,如果将定义的模型抽象开来,可以认为它是一棵树,其根接点就是NLEModel,在它的字节点下面可以定义不同的Track,Track下面又可以定义不同的片段Slot,每个Slot可以定义它的资源。基于这一基础,再去做最终引擎的操作和数据的对应就非常方便。
在编辑过程中,用户对视频编辑的每一次操作都会生成一棵新的树,有了这棵新的树之后,再和原始的树做对比,就知道这个中间发生了哪些过程,最终要呈现给用户的是一种什么样的形态。
详细来说,本来这棵树的每个节点定义了两个属性,一个是name,一个是ID。name相同,ID发生了变化,说明它的属性或者它的子节点发生了变化。举例来说,如果拿原始的树跟生成的新树进行对比,发现前者的NLETrack2没有了,但多了一款NLETrack3,就可以知道,它删掉了Track2,添加了Track3。那么,基于这些增量的信息,就可以对整个模型进行一次增量的重演,就达到了数据和底层引擎的映射。
此外,redo/undo的实现是另一个关键操作。用户在添加完轨道以后,每一次都会基于当前的状态生成一个新树。此时这个树处于只读状态,当用户操作完之后、需要生成redo/undo记录点时,就可以调用done的方法,编辑器就会把这棵树包装成NLECommit,存储到redo/undo队列里面。之后用户切换不同的状态,撤销重做这些动作实际上是切换不同的NLECommit,将其对应的树做一次重演就达到了恢复的状态。
基于用户的实际需求,火山引擎在编辑器中还对Commit和done做了分离。具体出发点很简单,以调节滤镜为例,用户在一次调节中可能做了多次尝试,最终确定了某种效果。但如果想要恢复的时候,用户并不需要记录中间的每一次操作,只需要知道他做了“一次”滤镜调节的动作即可。
所以正是基于这一理解,火山引擎在redo/undo队列里面存储了不同的数据模型,这些数据模型可以非常方便的做序列化和反序列化存储本地的草稿。换句话说,草稿里面已经存储好了它的redo/undo的功能,所以它是一个非常完整的从草稿到当时编辑状态的模式。这也正是火山引擎视频编辑器的另外一个特点。
据悉,火山引擎增长沙龙邀请了火山引擎内部技术专家,从技术、产品、 应用和体验4大维度,剖析智能互动特效和智能编辑在泛娱乐行业中的业务增长逻辑,探讨泛娱乐行业增长的新引擎。未来,火山引擎还会继续将成熟的技术探索、实践经验和产品方法论分享给行业,共创行业技术繁荣。