本文介绍若何通过 Windows 自带的 Xbox Game Bar 录造游戏视频,并通过 Python 利用 u2net 的 AI 模子对视频停止布景往除,生成含有通明通道的视频。最初连系 Html5 的相机并播放 webm 视频,实现简单的 AR 才能。
媒介
做为一个天边明月刀游戏的端游老玩家,天刀的画量是没的说的。玩天刀的七年,我独一更大的收获就是拐了女伴侣回家。至此,双十一降临之际,我告急把之前想写的教程赶了出来。为了让独身的少侠能够在现实世界有本身游戏角色的陪同,不再那么孤独,我可实是操碎了心,三更把网页赶了出来。其实独身和非独身的双十一区别不是很大,只是食土的体例纷歧样罢了。话不多说,我们先来看下效果:
效果图
啊,不合错误,放错图了,下面那个,下面那个……
效果图
在线演示地址:/
实现思绪
加强现实(AR)那个概念想必各人都不陌生,按照其定义我们只需要将虚拟信息与实在世界交融就算的上是 AR 啦,那里我们不会用到三维建模、空间注册定位、智能交互等高峻上的手艺,也不会用到 ARCore、ARKit、Vuforia 等相关平台,今天仅实现简单的视频叠加效果。
在最末呈现上,我们通过天边明月刀客户端供给的天边一瞬功用录造视频素材,然后利用 AI 往除视频中的布景,生成含有 alpha 通明通道的视频。接着设想一个网页,翻开摄像头并播放那个视频,如许一来,一个简单的 AR 功用就实现了。
录造素材
在游戏中翻开天边一瞬摄影系统,利用自在镜头,将视角画面翻转 90 度,在粉饰中更改画面布景为第一个,如许便于后期抠图处置。关于灯光效果等其他设置各人根据本身的爱好来设置即可,当然衣服配饰什么的,优先考虑下后期抠图的效果。
天边一瞬
设置完成播放本身想录造的动做就能够预备录造了,那里我利用的是 Windows 系统自带的 Xbox Game Bar ,按住 Win + G 唤出录造界面,点击录造按钮即可起头录造,你也能够间接按 Win + Alt + R 利用灵敏按键间接起头录造。关于 N 卡的用户,也可利用 NVIDIA GeForce Experience 的游戏录造功用停止录造。
那里我抉择的动做是晨夕杏时茶时拆的春时舞,动做挈放后会反复施行,但是音乐只要一次,起头录造的时机可能会欠好掌握,那么动做能够在完毕前起头录造,然跋文得要 Ctrl + U 隐躲游戏 UI ,后期做裁剪就能够了。后期处置能够利用 必剪 [1] 等东西停止,导出 mov 格局。
视频处置 视频帧提取
视频抠图我们利用 Python 处置,当然为什么不消 After Effect 或是其他处置软件,以至必剪都带有抠图。话不克不及那么说,软件本身扣了,哪轮得到我写点代码呢?
那里会用到 OpenCV 、rembg 、PIL 等库。关于 AI 往布景能够看那一篇文章:《AI一键往布景》。
#导进所需的库
importcv2
importos
importmath
fromPIL importImage
fromrembg importremove
接下来,我们定义视频转换图片函数,先利用 cv2 将视频文件逐帧存储为 .jpg 文件
defgetFrame(video_name,save_path):
video =cv2.VideoCapture(video_name)
# 获取视频帧率fps =video.get(cv2.CAP_PROP_FPS)print(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))name =int(math.pow(10,len(frame_num)))ret,frame =video.readwhileret:cv2.imwrite(save_path +str(name)+'.jpg',frame)ret,frame =video.readname +=1video.releasereturnfps,size,frame_num
施行挪用后,法式会将 video.mov 视频逐帧:
#将视频按帧保留为图片frame_path ="./frames/"ifnotos.path.exists(frame_path):os.makedirs(frame_path)fps,size,frame_number =getFrame("video.mov",frame_path)print(fps,size,frame_number)
逐帧往布景
对逐帧保留的所有图片逐个停止往除布景操做:
defgetRemoveBg(frames):
output_dir='./output/'ifnotos.path.exists(output_dir):os.makedirs(output_dir)
files =[frames +i fori inos.listdir(frames)]forfiinfiles:fisave =fi.replace("frames","output").replace("jpg","png")ifnotos.path.exists(fisave):input =Image.open(fi)output=remove(input)output.save(fisave)
getRemoveBg("./frames/")
图片布景处置好的放在文件夹 output,上面的逐帧抠图确实很慢,归正还要写文章,一边写一边等了,没需要如今优化成多线程了。
导出PNG 视频合并
在我们得到一堆通明 PNG 的序列图后,只需要通过 ffmpeg 东西将其合并成视频即可。
需要安拆有 ffmpeg 软件,Windows 电脑需要设置装备摆设好情况变量。
ffmpeg -r 30-i output/1%06d.png -i music.mp3 -y output.webm
ffmpeg
参数解释:生成 30 帧的视频,输进一个是 png 序列,一个是 music.mp3 配乐文件,最初导出为 webm 格局。
网页效果
网页的设想十分简单,供给了强迫的手机后背摄像头画面的衬着,以及 webm 视频文件的播放。操做控造按钮供给了全屏,视频文件的放大和缩小,以及起头播放功用。轻触角色会询问能否容许拜候摄像头,点击容许,之后就能够点击角色,将其挈放到适宜位置了。
网页界面 食用教程
1.克隆或下载存储库 文件
重视
需要重视的是,颠末测试,因为摄像头挪用和视频播放没有适配 IOS设备,别的是通明布景视频 webm 的视频编码 VP9 是一个由 Google 开发的开放格局,只要在 webkit 内核的阅读器才能够播放,所以那个网页仅有安卓用户能够一般拜候,在微信中或是手机版的 Chrome,Edge 阅读器拜候即可看到效果。
总结
录造的素材和春时舞的配乐各人可前去 Github 仓库,或前去 CSDN 下载 [2] 。
总体来说,最末的效果还算能够,就是抠图确实仍是存在很大的瑕疵。
期看天刀天边一瞬功用后期能够将布景增加一个绿幕,或者能够间接录造通明布景的视频,为少侠们缔造更多的快乐和灵感。别的,N 卡的亮点,主动录造,图片形式等各类功用在 64 位呈现后就不断没再撑持了,如今 32 位退役就彻底用不了了。
“掌中舞罢箫声绝,三十六宫秋夜长。”
正午的阳光实好,少侠们,带上本身的游戏角色,往尽情起舞吧!
References