如何使用Python在游戏中实现延时摄影

这个时代,随着游戏引擎技术的快速发展,游戏画面越来越精美,许多人迷上了游戏内的角色、场景。
尤其是端游,显卡技术能够支撑精美的游戏画面,最有名的莫过于《地平线》系列游戏。
很多玩家希望拍摄这些精美游戏中的画面,尤其是希望能拍摄到游戏内不同时刻的画面,为了满足这个需求,我们就需要用上延时摄影。游戏内的时间过得比现实世界更快,一个小时内可能你就能经历白天的夜晚的变化,这也为延时摄影提供了很好的环境。
那么究竟怎么在拍摄中实现延时的效果呢?方法大致有两种,最简单的可以先录制视频,然后用后期剪辑软件或者特效软件通过丢帧的方法实现,但这样一来便造成了巨大的浪费。拍几个小时的视频,如果通过丢帧实现延时效果,最后转换为几十分钟的片段,那么被丢掉的帧就要比最后留下的多得多。如果要实现更高速的画面运动,这种浪费无疑将会被更加扩大。
本篇教程介绍第二种方法,定时截图的形式,我们将结合前面python实用宝典使用过的三个模块——moviepy、win32gui 及 pil 为大家讲解如何使用python在游戏中实现延时摄影,我还将教你如何将图片拼接成视频、添加背景音乐一条龙操作。
1.准备
开始之前,你要确保python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细python安装指南 进行安装。
**(可选1) **如果你用python的目的是数据分析,可以直接安装anaconda:python数据分析与挖掘好帮手—anaconda,它内置了python和pip.
**(可选2) **此外,推荐大家用vscode编辑器,它有许多的优点:python 编程的最好搭档—vscode 详细指南。
请选择以下任一种方式输入命令安装依赖 :
windows 环境 打开 cmd (开始-运行-cmd)。macos 环境 打开 terminal (command+空格输入terminal)。如果你用的是 vscode编辑器 或 pycharm,可以直接使用界面下方的terminal.pip install moviepypip install pypiwin32pip install pillow本文所有代码均开源在:https://github.com/ckend/python-time-lapse-photo 仓库,如果你无法访问github,也可以在python实用宝典后台回复 延时摄影 下载。
2.定时拍摄
为了实现定时拍摄的逻辑,我们需要用到pypiwin32模块和pillow模块,在之前的这篇文章中有介绍过:
超方便的 python 自动唤醒窗口截图脚本
分为三个步骤:
获得游戏窗口界面获得游戏界面大小截图每隔n秒定时循环执行以上三个步骤,代码如下:
# main.py# python实用宝典# 2022-03-25import timeimport win32guifrom pil import imagegrabdef get_window_pos(name): name = name handle = win32gui.findwindow(0, name) if handle == 0: return none else: return win32gui.getwindowrect(handle), handlewhile true: try: (x1, y1, x2, y2), handle = get_window_pos('极限竞速:地平线 4') win32gui.setforegroundwindow(handle) img_ready = imagegrab.grab((x1, y1, x2, y2)) img_ready.save(f./result/{time.time()}.jpg) time.sleep(5) except exception as e: print(e)请注意,极限竞速:地平线 4 要改成你对应拍摄的游戏名称,这样,运行程序后就会自动在result文件夹下定时生成截图:
成功截取你想要的时间段的场景图片后,就可以进行下面的拼接和补充背景音乐部分。
3.拼接延时摄影视频
为了达到延时摄影的效果,我们在这一部分中将使用moviepy模块,拼接所有图片到一个视频中。
当然还要补充背景音乐,代码其实非常简单,调用了部分moviepy模块的功能:
# jointer.py# python实用宝典# 2022-03-25import osimport moviepyimport moviepy.video.io.imagesequenceclipfrom moviepy.editor import *def pics2video(frames_dir, video_dst, music, fps=10): 图片合成mp4 args: frames_dir (str): 图片目录 video_dst (str): 目标目录 fps (int, optional): 帧数. defaults to 25. frames_name = sorted(os.listdir(frames_dir)) frames_path = [frames_dir+frame_name for frame_name in frames_name] clip = moviepy.video.io.imagesequenceclip.imagesequenceclip(frames_path, fps=fps) audio_clip = audiofileclip(music).volumex(0.5) audio = afx.audio_loop( audio_clip, duration=clip.duration) final_video = clip.set_audio(audio) final_video.write_videofile(video_dst, codec='libx264')music = '打上花火.mp3'frames_dir = './result/'video_dst = 'screenshots.mp4'pics2video(frames_dir, video_dst, music)1.将你的音乐放在当前目录下,修改music变量为对应的文件名。
2.调整你想要的fps参数——帧数,这个值越低,画面越顺畅。
运行此文件后就会在当前文件夹下生成 'screenshots.mp4'. 这个就是我们的处理结果了。

电动汽车合资浪潮,长城汽车与宝马汽车合资生产电动MINI
BTA24-600BWRG 1000个一包STOCK
ADI将通过ADI基金会发起全球范围内助力抗击新冠肺炎疫情
德州仪器LED驱动器提供PWM调光及过热保护功能
液压马达的选择_液压马达的转速控制回路
如何使用Python在游戏中实现延时摄影
深兰AI产品亮相武夷路“城市会客厅”用科技点亮生活之美
美国国防部和SpaceX合作研究使用火箭通过太空运送货物
开关二极管的工作原理
路由器定时关机装置,Timer for router
特斯拉model3怎么样?特斯拉Model 3驾驶体验评测:车顶全玻璃 低价可定制 运动模式操作方便
有源晶振的EMC方面的设计考虑
国外牛人超强DIY:一支激光笔实现千里传音
柔性传感-羊肉新鲜度无损检测双参数柔性温度-阻抗传感器
高压线性恒流icSM2082K在LED灯驱动照明方案中可替换CL1570RM9003B
海域环境远距离监控系统的结构组成及方案设计
医疗废物在线监测系统三大创新
永磁电机在电动汽车领域应用的瓶颈问题
功率分配器或合成器选择的关键性能参数研究
DC/DC和LDO的区别是什么?低压差线性稳压器的主要参数