Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

建立節點

Godot 可以為任何 2D 或 3D 專案錄製**非即時**音影片。這種錄製也叫*離線渲染*。適合很多不同的場景:

  • 錄製遊戲預告片以供促銷使用。

  • 錄製過場動畫,這些過場動畫將在最終遊戲中顯示為預先錄製的影片 <doc_playing_videos>`。這允許使用更高品質的設定(以檔案大小為代價),而不管播放器的硬體如何。

  • 記錄程式產生的動畫或動作設計。在視訊錄製期間仍然可以進行使用者互動,並且也可以包含音訊(儘管在視訊錄製時您將聽不到)。

  • 比較動畫場景中圖形設定、著色器或渲染技術的視覺輸出。

借助 Godot 的動畫功能,例如 AnimationPlayer 節點、Tweeners、粒子和著色器,它可以有效地用於建立任何型別的 2D 和 3D 動畫(以及圖像)。

如果您已經習慣了 Godot 的工作流程,您可能會發現使用 Godot 進行影片渲染會比 Blender 更加高效。 也就是說,非即時渲染器(例如 Cycles 和 Eevee)可以帶來更好的視覺效果(代價是更長的渲染時間)。

與即時錄影相比,非即時錄影的一些優點包括:

  • 無論您的硬體功能為何,都可以使用任何圖形設定(包括極高要求的設定)。輸出影片*始終*具有完美的影格節奏;它永遠不會出現丟影格或卡頓的情況。更快的硬體將允許您在更短的時間內渲染給定的動畫,但視覺輸出保持不變。

  • 以比螢幕解析度更高的解析度進行渲染,而無需依賴特定於驅動程式的工具,例如 NVIDIA 的動態超級解析度或 AMD 的虛擬超級解析度。

  • 以高於視訊目標影格率的影格率進行渲染,然後進行後處理以產生高品質的運動模糊 <doc_creating_movies_motion_blur>`。這也使得在多個影格上聚合的效果(例如時間抗鋸齒、SDFGI 和體積霧)看起來更好。

警告

此功能並非專為在遊戲過程中捕捉即時鏡頭而設計。

玩家應該使用`OBS Studio <https://obsproject.com/>`__或`SimpleScreenRecorder <https://www.maartenbaert.be/simplescreenrecorder/>`__之類的東西來錄製遊戲影片,因為它們做得更好的攔截合成器工作比 Godot 本身使用 Vulkan 或 OpenGL 所能完成的工作還要多。

也就是說,如果您的遊戲在捕獲時以接近即時的速度運作,您仍然可以使用此功能(但它將缺乏可聽見的聲音播放,因為聲音直接保存到視訊檔案中)。

啟用電影製作模式

若要啟用 Movie Maker 模式,請在*運作專案之前*點擊編輯器右上角的「電影捲軸」按鈕:

Movie Maker 模式已停用,點擊「電影捲軸」圖示即可啟用

Movie Maker 模式已停用,點擊「電影捲軸」圖示即可啟用

當啟用 Movie Maker 模式時,圖示的背景會與強調色相符:

Movie Maker 模式啟動後,再次點擊“movie reel”圖示關閉

Movie Maker 模式啟動後,再次點擊“movie reel”圖示關閉

當編輯器退出時,Movie Maker 狀態**不會**保留,因此如果需要,您必須在重新啟動編輯器後再次重新啟用 Movie Maker 模式。

備註

在專案重新啟動之前,執行專案時切換 Movie Maker 模式不會產生任何效果。

在透過執行專案錄製影片之前,您仍然需要配置輸出檔案路徑。可以在Project Settings中為所有場景設定該路徑:

Movie Maker 專案設定(啟用進階切換)

Movie Maker 專案設定(啟用進階切換)

或者,您可以透過將名為「movie_file」的字串元資料新增至場景的**根節點**來設定每個場景的輸出檔案路徑。只有當主場景設定為相關場景時,或按下:kbd:F6 (在 macOS 上:kbd:Cmd + R)直接執行場景時,才會使用此功能。

建立字串型別的「movie_file」元資料後的屬性面板視圖

建立字串型別的「movie_file」元資料後的屬性面板視圖

專案設定或元資料中指定的路徑可以是絕對路徑,也可以是相對於專案根目錄的路徑。

配置並啟用 Movie Maker 模式後,從編輯器執行專案時將自動使用該模式。

命令行教學

更多有關命令行參數的資訊,請參考 命令行教學

godot --path /path/to/your_project --write-movie output.avi

如果輸出路徑是相對的,那麼它是**相對於專案資料夾**,而不是目前工作目錄。在上面的範例中,檔案將被寫入“/path/to/your_project/output.avi”。此行為類似於“--export”命令列參數。

由於 Movie Maker 的輸出解析度是由視窗大小設定的,因此如果專案使用「disabled」或「canvas_items」:ref:拉伸模式 <doc_multiple_analysis>,您可以在啟動時調整視窗大小以覆蓋它:

godot --path /path/to/your_project --write-movie output.avi --resolution 1280x720

請注意,視窗大小受顯示器解析度的限制。如果您需要以比螢幕解析度更高的解析度錄製影片,請參閱 doc_creating_movies_recording_at_higher_resolution`。

錄製 FPS 也可以在命令列上覆蓋,而無需編輯專案設定:

godot --path /path/to/your_project --write-movie output.avi --fixed-fps 30

備註

“--write-movie” 和 “--fixed-fps” 命令列參數在匯出的專案中都可使用。專案執行時間無法切換 Movie Maker 模式,但您可以使用 OS.execute() <class_OS_method_execute>` 方法執行匯出專案的第二個實例來錄製影片檔案。

選擇動畫

輸出格式由:ref:MovieWriter <class_MovieWriter> 類別提供。 Godot 有 2 個內建的 MovieWriters <class_MovieWriter>`,更多可以透過擴充來實作:

PNG

用於視訊的 PNG 影像序列和用於音訊的 WAV 影像序列。具有無損視訊壓縮功能,但代價是檔案較大且編碼速度較慢。這被設計為在錄製 <doc_creating_movies_converting_avi> 後使用外部工具編碼為視訊檔案。

支援透明度,但根視口**必須**將其``transparent_bg``屬性設為``true``以使透明度在輸出影像上可見。這可以透過啟用 渲染 > 透明背景 高級專案設定來實作。 顯示 >視窗 > 大小 > 透明顯示 > 視窗 > 每像素透明度 > 啟用 可以選擇啟用,以允許在錄製影片時預覽透明度,但不必在錄製影片時啟用它們。輸出影像包含透明度。

若要使用 PNG,請指定要在 編輯器 > 影片編寫器 > 影片檔案 專案設定中建立的 .png 檔案。產生的 .wav 檔案將與 .png 檔案同名(減去副檔名)。

自定功能

如果您需要直接編碼為不同的格式或透過第三方軟體傳輸串流,您可以擴充 MovieWriter 類別來建立您自己的電影編寫器。出於性能原因,這通常應該使用 GDExtension 來完成。

配置

在專案設定的 編輯器 > 影片編寫器 部分中,您可以配置多個選項。其中一些僅在啟用“專案設定”對話框右上角的“高級”切換後才可見。

  • 混合率 Hz: 編寫影片時在錄製的音訊中使用的音訊混合率。這可能與專案的混合速率不同,但該值必須能被記錄的 FPS 整除,以防止音訊隨著時間的推移而失去同步。

  • 揚聲器模式: 編寫影片時錄製的音訊中使用的揚聲器模式(立體聲、5.1 環繞聲或 7.1 環繞聲)。

  • MJPEG 品質: 將影片寫入 AVI 檔案時所使用的 JPEG 質量,介於「0.01」和「1.0」(含)之間。品質值越高,輸出效果越好,但檔案大小越大。建議的品質值在“0.75”和“0.9”之間。即使質量為“1.0”,JPEG 壓縮仍然是有損的。此設定不會影響音訊質量,並且在寫入 PNG 影像序列時會被忽略。

  • 電影檔案: 電影的輸出路徑。這可以是絕對的或相對於專案根的。

  • 停用垂直同步: 如果啟用,則在寫入影片時要求停用垂直同步。如果硬體夠快,能夠以高於顯示器更新率的影格速率渲染、編碼和保存影片,這可以加快視訊寫入速度。如果作業系統或圖形驅動程式強制垂直同步且應用程式無法停用它,則此設定無效。

  • FPS: 輸出影片中每秒渲染的影格數。值越高,動畫越平滑,但代價是渲染時間更長和輸出檔案大小更大。大多數影片託管平台不支援高於 60 的 FPS 值,但您可以使用更高的值並用它來產生運動模糊。

備註

當使用「disabled」或「2d」:ref:拉伸模式 <doc_multiple_resolutions> 時,輸出檔案的解析度由視窗大小設定。確保在啟動畫面結束前*調整視窗大小。為此,建議調整 顯示 > 視窗 > 大小 > 視窗寬度覆蓋視窗高度覆蓋 進階專案設定。

另請參閱:ref:doc_creating_movies_recording_at_higher_resolution

內建變數和渲染模式

To safely quit a project that is using Movie Maker mode, use the X button at the top of the window, or call get_tree().quit() in a script. You can also use the --quit-after N command line argument where N is the number of frames to render before quitting.

**不建議**按:kbd:F8`(在macOS 上按:kbd:`Cmd + .)或在執行Godot 的終端機上按:kbd:Ctrl + C,因為這會導致格式不正確沒有持續時間資訊的 AVI 檔案。對於 PNG 影像序列,PNG 影像不會被負面改變,但關聯的 WAV 檔案仍然缺少持續時間資訊。

某些視訊播放器可能仍能夠播放包含有效視訊和音訊的 AVI 或 WAV 檔案。但是,使用 AVI 或 WAV 檔案的軟體(例如影片編輯器)可能無法開啟該檔案。 使用視訊轉換器程式 在這些情況下可以提供協助。

如果您使用 AnimationPlayer 來控制場景中的「主要動作」(例如攝影機移動),則可以在相關的 AnimationPlayer 節點上啟用 Movie Quit On Finish 屬性。啟用後,當動畫播放完畢*並且*引擎在 Movie Maker 模式下運作時,此屬性將使 Godot 自行退出。請注意,此屬性對循環動畫沒有影響。因此,您需要確保動畫設定為非循環。

使用高品質的圖形設定

movie 功能標籤 可用來覆寫特定的專案設定。這對於啟用高品質圖形設定非常有用,但這些設定的速度不足以在硬體上以即時速度運作。請記住,將每個設定設為最大值仍然會降低影片保存速度,尤其是在以更高解析度錄製時。因此,仍建議僅在圖形設定對輸出影像產生有意義的影響時才增加圖形設定。

也可以在腳本中查詢此功能標記,以提高環境資源中設定的品質設定。例如,為了進一步改善SDFGI細節並減少漏光:

extends Node3D

func _ready():
    if OS.has_feature("movie"):
        # When recording a movie, improve SDFGI cell density
        # without decreasing its maximum distance.
        get_viewport().world_3d.environment.sdfgi_min_cell_size *= 0.25
        get_viewport().world_3d.environment.sdfgi_cascades = 8

以比螢幕解析度更高的解析度進行渲染

透過4K或8K等高解析度渲染可以顯著提高整體渲染品質。

備註

對於 3D 渲染,Godot 提供了 渲染 > 縮放 3D > 縮放 高級專案設定,可以將其設定為高於“1.0”以獲得*超級取樣抗鋸齒*。當 3D 渲染在視窗上繪製時,它會被「下取樣」。這提供了一種昂貴但高品質的抗鋸齒形式,而不會增加最終的輸出解析度。

首先考慮使用此專案設定,因為與實際增加輸出解析度相比,它可以避免減慢影片寫入速度並增加輸出檔案大小。

如果您希望以更高解析度渲染 2D,或者您實際上需要更高的原始像素輸出來進行 3D 渲染,則可以將解析度提高到螢幕允許的解析度以上。

預設情況下,Godot 在專案中使用「停用」:ref:伸展模式 <doc_multiple_resolutions>。如果使用「disabled」或「canvas_items」拉伸模式,視窗大小決定輸出視訊解析度。

另一方面,如果專案配置為使用「視口」拉伸模式,則視口解析度決定輸出視訊解析度。視窗解析度使用 顯示 > 視窗 > 大小 > 視窗寬度視窗高度 專案設定進行設定。這可用於以比螢幕解析度更高的解析度渲染影片。

若要在錄製過程中縮小視窗而不影響輸出視訊分辨率,您可以將 顯示 > 視窗 > 大小 > 視窗寬度覆蓋視窗高度覆蓋 進階專案設定設為大於「0」的值`。

若要僅在錄製影片時套用解析度覆蓋,您可以使用「影片」:ref:功能標籤 <doc_feature_tags> 覆寫這些設定。

後處理:

以下列出一些常見的後期處理步驟。

備註

當使用多個後處理步驟時,請嘗試在單一 FFmpeg 命令中執行所有這些步驟。這將透過避免多個有損編碼步驟來節省編碼時間並提高品質。

轉換縮排為 Tab

`HandBrake <https://handbrake.fr/>`__(GUI)和 `FFmpeg <https://ffmpeg.org/>`__(CLI)都是這方面非常流行的開源工具。FFmpeg 的學習曲線相對陡峭,但功能也更強大。

下面的命令將 AVI 視訊轉換為恆定速率因子 (CRF) 為 15 的 MP4 (H.264) 視訊。這會產生相對較大的檔案,但非常適合將視訊重新編碼為減少它們的大小(例如大多數影片分享網站):

ffmpeg -i input.avi -crf 15 output.mp4

要以犧牲品質為代價獲得較小的檔案,請*增加*上述命令中的 CRF 值。

要獲得具有更好的大小/品質比的檔案(以較慢的編碼時間為代價),請在上述命令中的“-crf 15”之前新增“-preset veryslow”。相反,「-preset veryfast」可用於實作更快的編碼,但代價是尺寸/品質比更差。

將 PNG 圖像序列 + WAV 音訊轉換為影片

如果您選擇錄製 PNG 圖像序列並在其旁邊新增 WAV 檔案,則需要先將其轉換為影片,然後才能在其他地方使用。

Godot 產生的 PNG 影像序列的檔案名稱始終包含 8 位數字,從 0 開始,數字以零填充。如果指定輸出路徑“folder/example.png”,Godot 將在該資料夾中寫入“folder/example00000000.png”、“folder/example00000001.png”等。音訊將保存在“folder/example.wav”中。

FPS 使用“-r”參數指定。它應該與錄製期間指定的 FPS 相符。否則,視訊會顯得速度減慢或加快,且音訊與視訊不同步。

ffmpeg -r 60 -i input%08d.png -i input.wav -crf 15 output.mp4

如果您在啟用透明度的情況下錄製了 PNG 影像序列,則需要使用支援儲存透明度的影片格式。 MP4/H.264 不支援儲存透明度,因此您可以使用 WebM/VP9 作為替代方案:

ffmpeg -r 60 -i input%08d.png -i input.wav -c:v libvpx-vp9 -crf 15 -pix_fmt yuva420p output.webm

建立節點

錄製影片後,您可以修剪不想保留的影片部分。例如,要丟棄 12.1 秒之前的所有內容並僅保留該點之後 5.2 秒的影片:

ffmpeg -i input.avi -ss 00:00:12.10 -t 00:00:05.20 -crf 15 output.mp4

也可以使用 GUI 工具 LosslessCut 來剪下影片。

影片縮放

以下命令會在保持現有長寬比的前提下將影片調整到 720 像素高(720p)。如果原始檔解析度是大於 720p 的,就能夠顯著降低檔大小:

ffmpeg -i input.avi -vf "scale=-1:1080" -crf 15 output.mp4

新增腳本

以下命令將影片的影格速率更改為 30 FPS,如果輸入影片中有更多影格,則丟棄一些原始影格:

ffmpeg -i input.avi -r 30 -crf 15 output.mp4

使用 FFmpeg 生成累積運動模糊

Godot 沒有內建對運動模糊的支援,但仍然可以在錄製的影片中建立運動模糊。

如果您以原始影格速率的倍數錄製影片,則可以將影格混合在一起,然後減少影格速率以產生具有*累積運動模糊*的影片。這種運動模糊看起來非常好,但生成可能需要很長時間,因為您必須每秒渲染更多影格(除了後製所花費的時間之外)。

以 240 FPS 來源視訊為例,產生 4 倍運動模糊並將其輸出影格速率降低至 60 FPS:

ffmpeg -i input.avi -vf "tmix=frames=4, fps=60" -crf 15 output.mp4

這也使得在多個影格上收斂的效果(例如時間抗鋸齒、SDFGI 和體積霧)收斂得更快,因此看起來更好,因為它們將能夠在給定時間處理更多資料。如果您想在不新增運動模糊的情況下獲得此優勢,請參閱 doc_creating_movies_reducing_framerate`。