基于Unity尝试唇同步LipSyncOVRLipSync(附Demo及源码)在视频创作的时候,这个⼩破站的审核制度有点⽓⼈。所以想着写⼀个⼯具,以相对较⼩的成本,尽可能快的加⼯视频。算是在唇同步技术上的⼀个⼩尝试。
⽬的和初步的想法
基于Unity3D开发语⾳输⼊与3D模型开发唇同步软件,以此来丰富个⼈视频创作的内容,解决个⼈创作资源相对匮乏的局⾯,让个⼈可以把更多的精⼒投⼊到内容的组织上去,是这个软件所要解决的问题。
在Unity3D中加载已经组织好的视频,利⽤Oculus Lipsync视频中的⾳频所拥有的⾯部动作,并在选中的模型上播放该动作,并逐帧录制导出视频。软件提供提供两种模式,⼀个是视频识别,流程⼤致为选中模型-导⼊视频-播放识别-导出视频。另⼀个是麦克风识别,流程⼤致为选中模型-导⼊视频-语⾳录⼊识别-导出视频。
通过识别⾳频波形或语⾳图像中分析出特有的⾯部数据,并以此在3D模型上模拟相应的⾯部的动画是实现唇同步技术常⽤的⽅案,这项技术已被应⽤在虚拟主播、动画制作、游戏开发等领域。传统的唇同步的实现⽅案⼤多是根据⼀段段语⾳制作对应的⾯部动画库,然后根据具体的业务逻辑对⾯部动画进⾏拼接融合。这种识别模拟的唇同步技术成本和效率要远远优于传统的唇同步技术。
开发环境
环境配置:.Net Standard 2.0,开发引擎:Unity3D 2019.4.1f1,代码编辑:Visual Studio 2019。
唇同步技术应⽤的现状
唇同步技术多半是有由语⾳来驱动三维⼈脸动画,这种技术⽤途⾮常⼴泛,如影视创作、虚拟主播、游戏开发、⼈机交互等领域,⽆论是哪种⽤途,最后都需要涉及三个技术环节,⼈物建模、语⾳来源、识别与动画关键帧匹配。
⼈物建模环节主要是决定基础外观模型,⽀撑指定⾯部动作的⾻骼动画⼜或者是⾯部参数。不同的唇同步技术实现都会预先选定⼀些固定的⾳素,不同的语种所对应的⾳素也会有差异,然后在模型中预制这些预选⾳素的动画⽚段或者是⾯部参数。
语⾳来源,顾名思义就是语⾳的来源,⼀般有两种,⼀是真⼈配⾳,语⾳⾃由度最⼤,真实度最好。另⼀个是通过语⾳合成技术
(Text To Speech,简称TTS),在时间、空间以及实现成本上有很⼤优势。在语⾳驱动⼈脸动画领域,有⼀个重要的步骤——获取基于时间轴的⾳素序列,真⼈配⾳很难直接获取准确的基于时间轴的⾳素序列,通过TTS技术产⽣语⾳序列的同时获得序列相对来说很容易。
识别与动画关键帧匹配。识别是指在语⾳波段中识别⾳素,所谓⾳素是构成⾳节的最⼩单位,⼜或者说是最⼩语⾳⽚段,以汉语为例,每个独⽴的声母,单韵母都是⼀个独⽴的⾳素,普通话中声母有23个,单韵母有10个,⿐辅⾳2个,在英⽂中有20个元⾳和28个辅⾳,地位同汉语中声韵母相当。识别出的⾳素之后调⽤⼈物模型中有对应的动画或者是⾯部参数
在虚拟⼈脸图像动画⽣成⽅⾯,主要存在两种技术,⼀是通过技术合成三维⼈物,其⾯部表情主要通过建模时制作好的渐变动画实现,通过动画参数来驱动,具有实时性和可操作性好的特点;第⼆种是通过从真⼈视频语料库中提取所需嘴形以及神态的⽚段,拼接成视频的合成技术,这种技术具有真实感强的特点。现有的唇同步技术多使⽤基于MPEG-4视频编码标准中的⼈脸动画参数。
唇同步中所需⾳素的特点与局限
⾳素的合适与否直接影响着⾯部动画的真实及其⾃然程度,选定的语素过多会增加识别算法的计算量,识别精度也会⼤打折扣,语素过少,则会导致唇同步的⾯部表情不流畅,不⾃然,真实度也会⼤⼤折扣,在保证⼀定真实度的情况下,可以剔除⼀些⼝形相近的语素,⼀般情况下,7-15个基础语素就可以满⾜唇同步技术的需要。不同语种的⼀些基础⾳素的⼝形上有⼀定相似性,因此在⼀些对真实感要求不⾼的情况下,基础语素组可以跨语种使⽤的,即同⼀种唇同步技术可以跨语种使⽤。
前⾯提到真⼈配⾳很难直接获取准确的基于时间轴的⾳素序列,识别⾳素需要先确定每个基础语素所
对应的特征参数,然后根据特征参数去语⾳波形中识别中语素序列。这种⽅案有很⼤的局限性,不同的情况下,很有可能识别的结果也不⼀样,如在环境是否噪杂,说话快慢,不同的语境,声⾳⾼低,甚⾄是不同的⼈。
解决识别误差的问题⼀般会采取两个⽅案,⼀个是利⽤机器学习针对具有同⼀⽂字的语⾔做⼤量的训练,或者是针对具有⼝形的视频语⾔⽚段做⼤量训练,以此来保证识别结果的真实度。另⼀个则是利⽤完全不真实动画,如卡通,⼆次元等,通过夸张,另类的⾯部表情,让看到的⼈不再考虑真实感的问题。unity3d animation
⼝形数据的识别
1. 从⾳频中计算出⼀个变化的权重值
这种⽅案相对简单,效率⾼,但真实感差,它只需要识别出⼝形⼤⼩的线性权重数值,然后制定不同区间下的⾯部动画,如定义权重区间为[0-10],规定区间[0-2]播放动画A,区间(2-4]播放动画B…… Salsa Lip Sync就是这种⽅案的实现之⼀。
2.从⾳频中识别⾳素的特征参数
这种⽅案⽐较复杂,效率⾼,但真实感差。该技术的实现主要有三部分,语⾳信号的预处理和特征提
取、特定语种下的语素的特征录制、利⽤BP神经⽹络来做⾳素分类算法分析。识别结果受训练数据的影响⽐较⼤,⽐如以经济为训练材料的技术实现,对经济内容识别结果会⽐较好,但对⽂学内容的识别结果就会⽐较差。如Oculus的OVRLipSync。
开发构想
此软件的定位为唇同步技术在个⼈视频创作⽅向上的应⽤的⼀种实现,主要是⾯向在知识类演讲类的视频的创作。希望软件操作简单,学习使⽤低时间成本。⽤户导⼊⾃⼰喜欢的⼀个视频,提供实时录制语⾳识别和视频⾳频识别两种语⾳识别模式。⽤户可以选择⾃⼰喜欢的⼈物模型,⾃定义⼤⼩和位置,录制完即导出视频。软件需要开发热更功能,以此来实现对⼈物模型的增加与维护,使得⽤户有更多的选择⽅案来实现。该软件的开发为Window平台软件。
功能设计
唇同步的软件主要分为以下⼏个⼤的模块热更资源、UI交互、资源处理、视频处理、唇同步识别。
热更资源
热更资源主要包括资源差异检查和资源下载两个业务实现。如图1 热更资源业务图
在Unity3d的开发当中,⽂件差异⽐对⼀般是使⽤md5码来处理。在资源打包阶段,每⼀个AssetBundle⽂件都会获取其对应的md5码,每个更新迭代版本都⽤⼀个单独的⽂件⽤于存储所有AssetBundle⽂件的md5码。
当软件打开后,软件会先从资源服务器下载最新的md5码列表⽂件,然后读取本地的md5码列表⽂件,对⽐并获取⼆者的差异列表。如果远端列表与本地列表同⼀⽂件下的md5码出现差异,则认为该⽂件需要更新,如果远端列表中出现了本地列表没有的⽂件及其md5码,认为该⽂件为新增,需要更新。如果差异列表为空,则认为不需要更新,进⼊下⼀步。如果差异列表不为空,则进⼊资源下载的步骤,下载完成之后,进⼊下⼀步。如图2 热更业务流程图。
图1 热更资源业务图
图2 热更业务流程图
UI交互
UI交互是⼀个软件必不可少的部分,它直观的向⽤户展⽰出软件所拥有的功能。UI交互模块向⽤户提供了⾏为有选择⾓⾊、选择视频,选择麦克风⾳频输⼊源、选择视频⾳频输⼊源、开始录制。如图3 UI交互业务图。
进⼊软件主界⾯时,会将配置的所有⾓⾊展⽰,并由⽤户决定⾓⾊⼤⼩和位置,视频时,⾓⾊的位置和⼤⼩不开放调整。选择⾓⾊之后,需要⽤户选择导⼊准备好的背景视频,背景视频的格式⽀持mp4、avi两种格式。选择视频之后,需要⽤户选择⾳频的录制源,软件提供麦克风、视频⾳频两种⽅式。完成以上设置,最后是开始录制。
图3  UI交互业务图
资源处理
资源处理模块包括AssetBundle打包、AssetBundle上传资源服务器、本地资源加载三个业务。如图4 资源模块业务图。
图4 资源模块业务图
AssetBundle是Unity中的⼀种资源包,这种资源包可以是游戏内要⽤到的⼏乎所有资源,例如:模型
、纹理、预设、场景等⼤部分⽂件更新,并且可以在运⾏时动态加载。AssetBundle是可以多个⽂件⼀起打包(如图5),例如将要打包的资源做成预设后再进⾏打包,这样可以将预设上⾯附带的组件、纹理、⼦对象等⼀并打包,加载后直接实例化就能直接使⽤了。AssetBundle 可以选择压缩后再进⾏⽹络传输,提升传输效率,减少包体⼤⼩等。AssetBundle⽀持3中格式的压缩选择,分别是LZMA,LZ4,⽆压缩。默认是LZMA格式的压缩,但是这样虽然可以使资源⽂件⼤⼩⼤⼤缩⼩,利于下载,但是也有不利的⼀⾯,在使⽤时会先解压再使⽤,所以会造成加载时间过长。它的主要⽤途有实现资源的热更、减少初始包体⼤⼩、做分包处理、可以利⽤⼆进制⽂件做资源加密等等。
图5 AssetBundle原理⽰意图
AssetBundle打包为后台维护业务,当发布新包或者更新新的版本的时候,需要根据打包规则将软件所需包设置成多个AssetBundle包,并将所有AssetBundle包的md5码列表写到⼀个单独的⽂件。之后将打包的AssetBundle包和md5码列表上传到资源服务器,当软件重新打开时,会通过热更模块将资源更新⾄⽬标客户端。本地资源加载,显⽰将对应AssetBundle加载⾄内存,然后再从内存中的AssetBundle中加载所需资源。
视频处理模块
视频处理模块分为加载视频⽂件、播放视频⽂件、视频的录制与导出。如图6 视频处理业务。视频处理⽀持mp4、avi视频两种格式,导出只会导出mp4视频格式。导出视频与导⼊视频分辨率相同,时长相同。由于Unity3D在视频录制⽅⾯不是太过理想,且官⽅也没有给出⽐较合理的解决⽅案,所以视频录制和导出业务则使⽤Unity AssetStore中的AV Pro Video插件来处理。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。