目录
前言准备定时"拍摄"拼接延时摄影视频前言
这个时代,随着游戏引擎技术的快速发展,游戏画面越来越精美,许多人迷上了游戏内的角色、场景。
尤其是端游,显卡技术能够支撑精美的游戏画面,最有名的莫过于《地平线》系列游戏。
使用Python拍摄的《地平线4》延时摄影作品
很多玩家希望拍摄这些精美游戏中的画面,尤其是希望能拍摄到游戏内不同时刻的画面,为了满足这个需求,我们就需要用上延时摄影。游戏内的时间过得比现实世界更快,一个小时内可能你就能经历白天的夜晚的变化,这也为延时摄影提供了很好的环境。
那么究竟怎么在拍摄中实现延时的效果呢?方法大致有两种,最简单的可以先录制视频,然后用后期剪辑软件或者特效软件通过丢帧的方法实现,但这样一来便造成了巨大的浪费。拍几个小时的视频,如果通过丢帧实现延时效果,最后转换为几十分钟的片段,那么被丢掉的帧就要比最后留下的多得多。如果要实现更高速的画面运动,这种浪费无疑将会被更加扩大。
本篇教程介绍第二种方法,定时截图的形式,我们将结合前面Python实用宝典使用过的三个模块——moviepy、win32gui 及 PIL 为大家讲解如何使用Python在游戏中实现延时摄影,我还将教你如何将图片拼接成视频、添加背景音乐一条龙操作。
准备
开始之前,你要确保Python和pip已经成功安装在电脑上。
(可选1)如果你用Python的目的是数据分析,可以直接安装Anaconda,它内置了Python和pip.
(可选2)此外,推荐大家用VSCode编辑器,它有许多的优点。
请选择以下任一种方式输入命令安装依赖:
1. Windows 环境 打开 Cmd (开始-运行-CMD)。
2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install moviepy pip install pypiwin32 pip install pillow
本文所有代码均开源在仓库
定时"拍摄"
为了实现定时拍摄的逻辑,我们需要用到pypiwin32模块和pillow模块,在之前的这篇文章中有介绍过:
超方便的 Python 自动唤醒窗口截图脚本
分为三个步骤:
1. 获得游戏窗口界面
2. 获得游戏界面大小
3. 截图
每隔N秒定时循环执行以上三个步骤,代码如下:
# main.py # Python实用宝典 # 2022-03-25 import time import win32gui from PIL import ImageGrab def get_window_pos(name): name = name handle = win32gui.FindWindow(0, name) if handle == 0: return None else: return win32gui.GetWindowRect(handle), handle while 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文件夹下定时生成截图:
成功截取你想要的时间段的场景图片后,就可以进行下面的拼接和补充背景音乐部分。
拼接延时摄影视频
为了达到延时摄影的效果,我们在这一部分中将使用moviepy模块,拼接所有图片到一个视频中。
当然还要补充背景音乐,代码其实非常简单,调用了部分moviepy模块的功能:
# jointer.py # Python实用宝典 # 2022-03-25 import os import moviepy import moviepy.video.io.ImageSequenceClip from 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". 这个就是我们的处理结果了,双击打开试试吧:
以上就是详解如何利用Python拍摄延时摄影的详细内容,更多关于Python延时摄影的资料请关注脚本之家其它相关文章!
上一篇:Go语言的变量定义详情
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?