建立動畫影片

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

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

  • 錄製過場動畫,這些動畫將在最終遊戲中以預錄影片的方式 顯示。這樣可以不受玩家硬體限制,使用更高品質設定(但會增加檔案大小)。

  • 錄製程式化產生的動畫或動態設計。錄影時仍可進行使用者互動,也能包含音訊(但錄製期間不會有即時聲音播放)。

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

結合 Godot 的動畫功能,例如 AnimationPlayer 節點、Tweeners、粒子系統與著色器,可以高效製作各種 2D 和 3D 動畫(甚至靜態圖像)。

如果你已習慣 Godot 的工作流程,會發現用 Godot 製作影片比 Blender 更有效率。不過,像 Cycles、Eevee 這類非即時算繪器仍可產生更佳畫質(但算繪時間會更久)。

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

  • 不論你的硬體效能如何,都能使用任何圖形設定(即使是極高需求的設定)。輸出影片*永遠*有完美的影格節奏,不會掉格或卡頓。硬體越快,算繪同一動畫所需時間越短,但畫面結果完全一致。

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

  • 可以用比目標影片影格率更高的速度算繪,接著 後製產生高品質動態模糊。這也讓需跨多張影格累積的效果(如時間抗鋸齒、SDFGI、體積霧等)表現更佳。

警告

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

玩家應該使用 OBS StudioSimpleScreenRecorder 這類工具來錄製遊戲影片,這類軟體在擷取畫面合成時遠比 Godot 直接用 Vulkan 或 OpenGL 來得有效。

但如果你的遊戲錄製時能維持接近即時的速度,仍可用本功能錄影(但錄製過程中不會有即時聲音播放,聲音直接寫入影片檔)。

啟用電影製作模式

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

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

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

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

Movie Maker 模式已啟用,再點一次「電影捲軸」圖示即可關閉

Movie Maker 模式已啟用,再點一次「電影捲軸」圖示即可關閉

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

備註

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

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

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

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

你也可以在每個場景的**根節點**加上名為 movie_file 的字串型態中繼資料,來設定該場景專屬的輸出路徑。只有當主場景就是該場景,或直接用 F6`(macOS :kbd:`Cmd + R)執行場景時才會套用這個設定。

新增字串型別「movie_file」中繼資料後於屬性檢查器的畫面

新增字串型別「movie_file」中繼資料後於屬性檢查器的畫面

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

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

命令列用法

Movie Maker 也能透過 命令列 啟用:

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

如果輸出路徑是相對路徑,則是**相對於專案資料夾**,而非目前工作目錄。以上例子會將檔案寫入 /path/to/your_project/output.avi。這行為與 --export-release 參數一致。

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

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

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

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

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

備註

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

選擇輸出格式

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

PNG

用於視訊的 PNG 圖片序列以及用於音訊的 WAV。特點是無損視訊壓縮,代價是檔案大小大且編碼緩慢。這設計成用於在錄製後 使用外部工具編碼成視訊檔案

支援透明度,但根視口**必須**將其``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> 時,輸出檔案的解析度由視窗大小設定。確保在啟動畫面結束前*調整視窗大小。為此,建議調整 顯示 > 視窗 > 大小 > 視窗寬度覆蓋視窗高度覆蓋 進階專案設定。

另請參閱 以高於螢幕解析度的畫質算繪

結束 Movie Maker 模式

若要安全結束使用 Movie Maker 模式的專案,請用視窗上方的 X 按鈕,或在腳本裡呼叫 get_tree().quit()。也可用命令列參數 --quit-after N,N 為結束前要算繪幾個影格。

按下 F8 (在 macOS 上為 Cmd + .) 或在執行 Godot 的終端機上按下 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

雖然有些平台(例如 YouTube)支援直接上傳 AVI 檔案,但許多其他平台將會需要事前轉換的步驟。HandBrake (GUI) 和 FFmpeg (CLI) 是用於此目的的受歡迎開源工具。FFmpeg 的學習曲線更陡峭,但它更強大。

下列指令會將 AVI 影片轉換為 MP4(H.264),並設定恆定品質(CRF)為 15。這會產生較大的檔案,但適合多數會再次壓縮你影片的平台(如 YouTube 等分享網站):

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 來剪下影片。

影片縮放

以下指令會將影片高度縮放至 1080 像素(1080p),長寬比會自動保持不變:

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 和體積霧) 收斂得更快,因此看起來更好,因為在給定時間內可以處理更多資料。如果您想獲得這種好處而不增加動態模糊,請參閱 降低影格率