最近有很多读者朋友和朋友交朋友ai换脸视频制作有疑问。有网友整理了相关内容,希望能回答你的疑惑。ai换脸视频制作教程,本网站也为您找到了问题的答案,希望对您有所帮助。
对于娱乐圈来说,良好的艺术家形象是吃这碗饭的基础。对于剧组来说,最重要的是擦亮眼睛看人。如果你不小心选择了一个肮脏的艺术家,之前所有的努力都会变成泡沫!我们先列举两部电视剧,因为污点艺人播不出,一度停播。
为什么《深渊行者》《无名侦探》要讲两部剧?因为这两部电影被同一个阵容毁了,他们就是吴秀波,翟天临,难兄弟!吴秀波的出轨门彻夜毁掉了这位晚成的中年叔叔。不仅多档节目被重新编辑,主演的电视剧也被暂停。
有很多电视剧和综艺节目因为明星丑闻无法播放或剪辑或更换,只能靠剪辑拍摄的作品。简单粗暴,但会影响整个剧情的完整性。如果是一帧一帧的修复,这个工作量会让人累吐。能想象一下,能不能把不喜欢、有污点的艺人给他换脸,声音给他换声?加上喜欢的艺人呢?
转到正题,本文以技术讲解为主,通过人脸融合技术将指定人脸替换为目标选择人。这种方法可以快速融合人脸,而无需Ps或者编辑这么苦。内容首发于WX微信官方账号需要完整的代码,在微信官方账号后台回复:换脸。如下图所示:
图片提取
为方便技术展示,我们为演员杨紫选择了一段素材的演讲视频,用例仅用于技术交流演示,不针对任何指定人。
为达到我们AI为了换脸,我们首先需要将这段视频逐帧提取成照片
def vedio_2_pic(self,file,save_path): """ 逐帧取照片 file:视频的位置 save_path:保存路径 """ # 读取视频 video = cv2.VideoCapture(file) # 获取视频帧率 fps = video.get(cv2.CAP_PROP_FPS) # 获取图片大小 width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)) size = (width, height) frame_num = str(video.get(7)) ret, frame = video.read() num =1 while True: ret, frame = video.read() if ret !=True: break cv2.imwrite(save_path str(num) '.jpg', frame) num =1 video.release() return fps, size,frame_num
脸部融合
在最后一个环节,我们提取了视频的图片。我希望演员杨子能有杨幂一样的眼睛,看起来更像杨幂。那么";目标选择人";是杨幂。那么";目标选择人";是杨幂。
因为视频可能有镜头切换,焦点可能是观众或其他人,所以在面部融合之前,需要判断是否有安迪,如果有可能超过0.85是安迪,我们的面部融合,如果小于0.85概率我们不是面部融合,以下面的面部融合。
核心代码
for i in range(frame_num): image2="""/Users/***/face_ztl/picture/%d.jpg"""%(i) content = video_make.img_compare(image1,image2) try: if content >0.85: print('-----%d-----'%(i)) video_make.merge_face(image2,object_image,merge_rate=100) else: print(0) img = cv2.imread(image2) img_path = image2.replace('picture','picture_new') cv2.imwrite(img_path, img) except: pass print('第%d张有问题'%(i))
提取音频
合成后的视频为了有声音,我们提取并保存视频中的音频,代码如下:
def getMusic(self,video_name,save_path): """ 获取指定视频的音频 video_name:视频路径 save_path:音频保存路径 举例 save_path='/Users/***/vedio/1.wav' """ # 读取视频文件 video = VideoFileClip(video_name) # 返回音频 audio = video.audio audio.write_audiofile(save_path)
合成视频
至此我们得到了音频、融合后的图片,接下来就是最后一步合成视频了,代码如下:
""" 图片转视频 save_path:视频保存路径 """ # 写入视频 fourcc = cv2.VideoWriter_fourcc(*'mp4v') video = cv2.VideoWriter(save_path, fourcc, fps, size) # 排序目的 for item in range(int(frame_num)): path = pic_path +str(item) + '.jpg' if os.path.exists(path): # 读取原图像 img = cv2.imread(path) # 写入视频 video.write(img) video.release()
成果展示
至此我们已经完成了所有环节,成果见于WX公众号,名称与头像号同名,请在留言区说出来。
主题测试文章,只做测试使用。发布者:艾迪号,转转请注明出处:https://www.cqaedi.cn/fenxiang/38035.html