音频到视频部分出现的术语:
- stock video footage:the many hours of online weekly address video
- source:the input audio track
- target video: stock video clip into which we composite the synthesized mouth region
音频到landmarks
- 音频部分的处理:
- 给定16KHz单声道音频, 使用ffmpeg的RMS-based normalization 正则化volume
- 在每个25ms长的滑动窗口上进行离散傅里叶变换, 采样间隔为10ms
- 在傅里叶功率谱上应用40个三角形的Mel-scale lters,对输出进行对数处理。
- 应用离散余弦变换,将维度降低到13维矢量。
最后输出28维度的向量, 13维度加上对数平均能量和其一阶导数
- 脸部的处理:
- 对每帧obama的脸进行frontalize, 正面化, 用了14年的论文:Total moving face reconstruction
- 然后检测嘴部landmarks, 这里是给出了18个点, 也就是36个数, 然后PCA到20维的系数
- Finally, we temporally upsample the mouth shape from 30Hz to 100Hz by linearly interpolating PCA coeffcients, to match the audio sampling rate. Note that this upsampling is only used for training; we generate the final video at 30Hz.(最后,我们通过线性插值PCA系数将口型从30Hz升采样到100Hz,以匹配音频采样率。请注意,这种上采样只用于训练;我们以30Hz的频率生成最终视频。)
之前音频间隔是10ms也就是1s取100次, 视频1s100hz也就是1s采样100次,和音频一一对应, 这里是正常取了30,中间的通过插值得到
- RNN的处理:
重要的点:音频和嘴部并不完全同步, 举个例子, 比如你张开嘴发出啊的声音, 但是可能张嘴要比出声早了一点时间, 所以说网络需要看到未来的一部分音频信息, 比如我关注到几十个ms后的啊了我就知道应该张嘴了
-
所以在这里很重要的一点是要添加time delay, 把网络输出在时间上向前移动, 为输出增加时间延迟, 也就是说输入是当前的声音, 但是预测的landmarks有些许的延后, 这样效果挺好
-
time-delayed RNN的delay为2, 网上一般叫target-delay, 搜了好长时间才发现····
效果图如下:

这里有个疑问, 这样的话输入和输出相比不是一一对应的, 前面说是音频和视频采样率调整到一致了, 这个地方是怎么处理的呢?
是不是输出还是同样的, 但是我不取前两个而是取后面的作为输出? -
cell state c是60维, time delay是20 steps(200 ms), 也就是预测的嘴部会落后音频200ms
这部分我看了源码之后懂了, 来自Obama Net的train.py:
timeDelay = 20
lookBack = 10
n_epoch = 20
n_videos = 12
for key in tqdm(keys[0: n_videos]):
audio = audioKp[key]
video = videoKp[key]
if (len(audio) > len(video)):
audio = audio[0: len(video)]
else:
video = video[0: len(audio)]
start = (timeDelay - lookBack) if (timeDelay - lookBack > 0) else 0
for i in range(start, len(audio

本文介绍了将音频转换为视频中嘴部运动的详细过程,涉及音频预处理、唇形关键点检测、时间延迟RNN以及面部纹理合成。在纹理合成中,通过加权中位数和牙齿代理图像融合技术,实现了精细的牙齿细节重建。这一方法可以用于视频人物对话生成,提高合成视频的真实感。
最低0.47元/天 解锁文章
1527





