使用前准备
1.照下面的清单开新资料夹
┌fakes(父)
│─data_A
│─data_B
│─model
2. 开新资料夹取名叫"Sequence"并将FFmpeg/bin/ffmpeg.exe 复制过去
3.准备你影片主角的照片并放入data_B资料夹
a.格式必须为png
b.大小不能超过1200 * 700 (可用格式工厂之类的快速转档)
c.最好有不同角度不同表情
d.越多越好,个人觉得至少100张,合照最好把其他人的脸裁掉(我没裁)
4.准备你想替换主角的影片
a.与你的主角越像越好
b. 10~15秒即可,越长算越久
c.解析度不超过720p
d.确认影片的FPS (用AE看之类的,右键内容写的不准)
5.将影片拆成序列图(FFmpeg,用别的软体拆也可以)
a.到Sequence资料夹按住Shift +滑鼠右键,点选"在此处开启命令视窗"
b.复制指令并修改参数ffmpeg -i [档名].mp4 -vf fps=[FPS] "out%d.png"
c.右键贴上至CMD并按Enter,完成后,资料夹就会出现序列图
d.将这些序列图复制到data_A资料夹
e.开"NoFace"新资料夹,将没有清楚出现脸的图片移动过去(脸不清楚也要)
6.最后你的data_A要有主角的照片,格式为png并不超过1200 * 700
data_B要有被替换主角影片的序列图,每张都有清楚的脸
NoFace有序列图没脸的图片跟不清楚脸的图片
开始使用FakeApp
1. 开启"fakeapp.bat",你会看到Extract / Train / Covert三个选项
2. "Extract",从你的图片中抓取所有的脸
a. "Paths"的"Data",贴上Data_A的路径将"\"换成"/",然后按下"Start"
b.完成后你会看到Data_A里多了"alignments.json"以及" aligned"资料夹,
里面都是被抓取出来的脸
c. 同a、b步骤,接下来对data_B也做一次,然后到data_B的aligned,把其他人的脸删除(如果有的话)
3. "Train",让软体开始比较两张脸
a.照以下规格贴上对应的路径,记得"\"换成"/",并按下"Start"
Model :贴Model路径
Data A :贴data_A /aligned的路径
Data B :贴data_B/aligned的路径
b. Training至少要6小时以上,建议放着跑一个晚上,直到合成的脸清楚
c.满意之后可按下q停止(直接按叉叉也可以,我按q没反应),"model"下就会多出"decoder_A.h5"、"decoder_B.h5"、"encoder.h5"这三个档案
4. " Convert",替换data_A的脸
a. "Paths"的"Data"贴上data_A的路径,按"Start"
b.完成后,data_A下会出现"merged"资料夹,里面即是完成替换的序列图
将完成替换的序列图合并成影片
1.整理完成的序列图
a.把Sequence资料夹原来的序列图删除,或是你要留着
b.完成的序列图复制到Sequence资料夹
c.把前面移走的不清楚脸图片移动回来
d .检查一下数字正不正常,一定要连号
2.开始合并序列图
a.按住Shift +滑鼠右键,点选”在此处开启命令视窗”
b.修改指令参数贴上按Enter,ffmpeg -f image2 -i out%d.png -vcodec libx264 -crf [FPS] -pix_fmt yuv420p [档名].mp4
c.如果结果影片怪怪的,用AE合并会比较好
d.大功告成
备注
Data_A也可放入更多不同表情不同角度的照片来算
算出model之后,Data_A再放入同样人不同影片的序列图来合并也可行
举例来说,我Data_A放入更多小劳勃道尼来算,会更精准,算好后,可以再把其他钢铁人的片段拿去Extract后Covert
经我实测,Train重开后会按照原进度继续算,我有把Data_B没删掉的脸删掉再开,一样能继续算