0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-30 09:52 次阅读

这个时代,随着游戏引擎技术的快速发展,游戏画面越来越精美,许多人迷上了游戏内的角色、场景。

尤其是端游,显卡技术能够支撑精美的游戏画面,最有名的莫过于《地平线》系列游戏。

很多玩家希望拍摄这些精美游戏中的画面,尤其是希望能拍摄到游戏内不同时刻的画面,为了满足这个需求,我们就需要用上延时摄影。游戏内的时间过得比现实世界更快,一个小时内可能你就能经历白天的夜晚的变化,这也为延时摄影提供了很好的环境。

那么究竟怎么在拍摄中实现延时的效果呢?方法大致有两种,最简单的可以先录制视频,然后用后期剪辑软件或者特效软件通过丢帧的方法实现,但这样一来便造成了巨大的浪费。拍几个小时的视频,如果通过丢帧实现延时效果,最后转换为几十分钟的片段,那么被丢掉的帧就要比最后留下的多得多。如果要实现更高速的画面运动,这种浪费无疑将会被更加扩大。

本篇教程介绍第二种方法,定时截图的形式,我们将结合前面Python实用宝典使用过的三个模块——moviepy、win32gui 及 PIL 为大家讲解如何使用Python在游戏中实现延时摄影,我还将教你如何将图片拼接成视频、添加背景音乐一条龙操作。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

**(可选1) **如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

**(可选2) **此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南

请选择以下任一种方式输入命令安装依赖

  1. Windows 环境 打开 Cmd (开始-运行-CMD)。
  2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
  3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install moviepy
pip install pypiwin32
pip install pillow

本文所有代码均开源在:https://github.com/Ckend/python-time-lapse-photo 仓库,如果你无法访问GitHub,也可以在Python实用宝典后台回复 延时摄影 下载

2.定时"拍摄"

为了实现定时拍摄的逻辑,我们需要用到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文件夹下定时生成截图:

成功截取你想要的时间段的场景图片后,就可以进行下面的拼接和补充背景音乐部分。

3.拼接延时摄影视频

为了达到延时摄影的效果,我们在这一部分中将使用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'. 这个就是我们的处理结果了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2670

    浏览量

    47340
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84451
  • PIL
    PIL
    +关注

    关注

    0

    文章

    19

    浏览量

    8603
收藏 人收藏

    评论

    相关推荐

    电容式感应在电玩游戏中的应用

    电容式感应在电玩游戏中的应用  电玩游戏应用拥有多项技术层级,尤其是软件方面,然而游戏本身的才是主角。   绘图与处理速度能限制或展现游戏中
    发表于 09-12 16:43

    延时摄影怎么玩?但如果你有一台compass……

    记录片的部分片段。我们先来看延时摄影的原理是什么?它以一种将时间压缩的拍摄技术。一段延时摄影视频中,物体或者景物缓慢变化的过程被压缩到一个
    发表于 12-19 09:48

    玩转延时摄影,compass黑盒子的秘密

    拍照录视频,重要的是还有延时摄影的功能。以前一提到延时摄影,以前听起来就很高大上,不是什么摄影大V都玩不好的样子。但是现在越来越简便设备和处
    发表于 01-12 21:35

    Python

    的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是您使用扩展类库时可
    发表于 04-14 10:15

    电容式感应在电玩游戏中的应用

      电玩游戏应用拥有多项技术层级,尤其是软件方面,然而游戏本身的才是主角。  绘图与处理速度能限制或展现游戏中软件的开发状况,因此最容易受到消费者和评论家关注。而主机控制器(cons
    发表于 10-25 11:17

    采用单片机来实现的智能俄罗斯方块游戏

    俄罗斯方块游戏算法请参考俄罗斯方块游戏的算法1.概述俄罗斯方块是一款风靡全球的益智游戏。它规则简单,容易上手,且游戏过程变化无穷,使用户
    发表于 11-19 08:26

    水滴摄影是如何实现的?

    水滴摄影摄影是一门通过探索和学习来灌输的艺术。数百次点击就能捕捉到一张完美的照片,摄影师脸上的满足感眨眼之间就被掩盖了。各种类型的
    发表于 05-01 16:25

    单片机游戏中的实际应用

    本软件介绍单片机游戏中的实际应用,你必须使用正常方式驱动!
    发表于 03-23 17:24 1次下载

    vr游戏中的应用案例分析

    传统的网络游戏技术,目的是仅仅是为了满足玩家的精神追求,更加注重游戏世界的设定,而忽视了玩家体验,将玩家拒之于显示器之外,玩家只能通过操作角色来体验游戏中的各种设定,游戏体验仅仅停留于
    发表于 03-08 08:42 2.5w次阅读

    游戏中视觉风格的历史和现状

    Double Fine(残酷传奇,破碎时代)的Lee Petty介绍了游戏中视觉风格的历史和现状,并提供了如何使用视觉风格您自己的游戏中产生最大影响的见解。
    的头像 发表于 11-08 06:19 2772次阅读

    游戏中怎么实现AI?

    游戏开发人员的挑战在于如何不断突破极限,开发出越来越引人注目的游戏。 计算机控制的人工智能 (AI) 已经发生了多种形式的演变,以满足测试要求。 然而,为游戏玩家设计符合其动作并促进玩家数量增长的自适应对手并非易事。
    的头像 发表于 01-03 12:38 2762次阅读

    使用Python实现游戏APP充值API调用的代码实例

    本文档的主要内容详细介绍的是使用Python实现游戏APP充值API调用的代码实例。
    发表于 01-15 11:34 38次下载

    Imagination和完美世界游戏携手推进光线追踪游戏中的应用

    Imagination Technologies和完美世界游戏(Perfect World Games)宣布,双方正在合作将光线追踪技术(ray tracing)整合至完美世界游戏的移动游戏中
    发表于 05-06 10:09 666次阅读

    简单的延时摄影PiCamera

    电子发烧友网站提供《简单的延时摄影PiCamera.zip》资料免费下载
    发表于 10-28 14:50 0次下载
    简单的<b class='flag-5'>延时</b><b class='flag-5'>摄影</b>PiCamera

    Xbox应用新增“游戏中心”功能

    微软 Xbox 体验高级产品经理 Dylan Meade表示,“游戏中心”便于玩家追踪游戏进展,发现游戏最新内容和扩展包,与友人联机竞技,接收开发商的最新新闻等。
    的头像 发表于 02-27 14:02 640次阅读