詳解如何利用Python拍攝延時攝影
前言
這個時代,隨著游戲引擎技術(shù)的快速發(fā)展,游戲畫面越來越精美,許多人迷上了游戲內(nèi)的角色、場景。
尤其是端游,顯卡技術(shù)能夠支撐精美的游戲畫面,最有名的莫過于《地平線》系列游戲。
使用Python拍攝的《地平線4》延時攝影作品
很多玩家希望拍攝這些精美游戲中的畫面,尤其是希望能拍攝到游戲內(nèi)不同時刻的畫面,為了滿足這個需求,我們就需要用上延時攝影。游戲內(nèi)的時間過得比現(xiàn)實世界更快,一個小時內(nèi)可能你就能經(jīng)歷白天的夜晚的變化,這也為延時攝影提供了很好的環(huán)境。
那么究竟怎么在拍攝中實現(xiàn)延時的效果呢?方法大致有兩種,最簡單的可以先錄制視頻,然后用后期剪輯軟件或者特效軟件通過丟幀的方法實現(xiàn),但這樣一來便造成了巨大的浪費(fèi)。拍幾個小時的視頻,如果通過丟幀實現(xiàn)延時效果,最后轉(zhuǎn)換為幾十分鐘的片段,那么被丟掉的幀就要比最后留下的多得多。如果要實現(xiàn)更高速的畫面運(yùn)動,這種浪費(fèi)無疑將會被更加擴(kuò)大。
本篇教程介紹第二種方法,定時截圖的形式,我們將結(jié)合前面Python實用寶典使用過的三個模塊——moviepy、win32gui 及 PIL 為大家講解如何使用Python在游戲中實現(xiàn)延時攝影,我還將教你如何將圖片拼接成視頻、添加背景音樂一條龍操作。
準(zhǔn)備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上。
(可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda,它內(nèi)置了Python和pip.
(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點。
請選擇以下任一種方式輸入命令安裝依賴:
1. Windows 環(huán)境 打開 Cmd (開始-運(yùn)行-CMD)。
2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip?install?moviepy pip?install?pypiwin32 pip?install?pillow
本文所有代碼均開源在倉庫
定時"拍攝"
為了實現(xiàn)定時拍攝的邏輯,我們需要用到pypiwin32模塊和pillow模塊,在之前的這篇文章中有介紹過:
分為三個步驟:
1. 獲得游戲窗口界面
2. 獲得游戲界面大小
3. 截圖
每隔N秒定時循環(huán)執(zhí)行以上三個步驟,代碼如下:
# 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" 要改成你對應(yīng)拍攝的游戲名稱,這樣,運(yùn)行程序后就會自動在result文件夾下定時生成截圖:
成功截取你想要的時間段的場景圖片后,就可以進(jìn)行下面的拼接和補(bǔ)充背景音樂部分。
拼接延時攝影視頻
為了達(dá)到延時攝影的效果,我們在這一部分中將使用moviepy模塊,拼接所有圖片到一個視頻中。
當(dāng)然還要補(bǔ)充背景音樂,代碼其實非常簡單,調(diào)用了部分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): 目標(biāo)目錄 ????????fps (int, optional): 幀數(shù). 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.將你的音樂放在當(dāng)前目錄下,修改music變量為對應(yīng)的文件名。
2.調(diào)整你想要的fps參數(shù)——幀數(shù),這個值越低,畫面越順暢。
運(yùn)行此文件后就會在當(dāng)前文件夾下生成 'screenshots.mp4'. 這個就是我們的處理結(jié)果了,雙擊打開試試吧:
以上就是詳解如何利用Python拍攝延時攝影的詳細(xì)內(nèi)容,更多關(guān)于Python延時攝影的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python中將字典形式的數(shù)據(jù)循環(huán)插入Excel
這篇文章主要介紹了python中將字典形式的數(shù)據(jù)循環(huán)插入Excel的方法,需要的朋友可以參考下2018-01-01Keras中的多分類損失函數(shù)用法categorical_crossentropy
這篇文章主要介紹了Keras中的多分類損失函數(shù)用法categorical_crossentropy,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python中import導(dǎo)入不同目錄的模塊方法詳解
這篇文章主要介紹了Python中import導(dǎo)入不同目錄的模塊方法詳解,需要的朋友可以參考下2020-02-02