這個時代,隨著游戲引擎技術的快速發展,游戲畫面越來越精美,許多人迷上了游戲內的角色、場景。
尤其是端游,顯卡技術能夠支撐精美的游戲畫面,最有名的莫過于《地平線》系列游戲。
很多玩家希望拍攝這些精美游戲中的畫面,尤其是希望能拍攝到游戲內不同時刻的畫面,為了滿足這個需求,我們就需要用上延時攝影。游戲內的時間過得比現實世界更快,一個小時內可能你就能經歷白天的夜晚的變化,這也為延時攝影提供了很好的環境。
那么究竟怎么在拍攝中實現延時的效果呢?方法大致有兩種,最簡單的可以先錄制視頻,然后用后期剪輯軟件或者特效軟件通過丟幀的方法實現,但這樣一來便造成了巨大的浪費。拍幾個小時的視頻,如果通過丟幀實現延時效果,最后轉換為幾十分鐘的片段,那么被丟掉的幀就要比最后留下的多得多。如果要實現更高速的畫面運動,這種浪費無疑將會被更加擴大。
本篇教程介紹第二種方法,定時截圖的形式,我們將結合前面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 moviepy
pip install pypiwin32
pip install pillow
本文所有代碼均開源在:https://github.com/Ckend/python-time-lapse-photo 倉庫,如果你無法訪問GitHub,也可以在Python實用寶典后臺回復 延時攝影 下載。
2.定時"拍攝"
為了實現定時拍攝的邏輯,我們需要用到pypiwin32模塊和pillow模塊,在之前的這篇文章中有介紹過:
分為三個步驟:
- 獲得游戲窗口界面
- 獲得游戲界面大小
- 截圖
每隔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文章
2674瀏覽量
47350 -
python
+關注
關注
56文章
4783瀏覽量
84474 -
PIL
+關注
關注
0文章
19瀏覽量
8603
發布評論請先 登錄
相關推薦
評論