Maemaemae

Godot 内蔵録画機能のガイド

この記事で学べること

Godotエンジンには優れた内蔵録画機能があります。この記事では、外部ツールを使わずにGodotだけでゲームプレイ動画を録画する方法を解説します。デモ動画、バグレポート、プロモーション映像など、様々な用途に役立つテクニックを紹介します。

基本的な録画設定

VideoStreamの設定

GodotではVideoStreamPlayerノードを使った録画が可能です。まず必要な設定を行いましょう。

# 録画設定スクリプトの例
extends Node

func setup_recording():
    var settings = {}
    settings.fps = 60  # フレームレート設定
    settings.format = "webm"  # 出力フォーマット
    settings.video_path = "user://recordings/"  # 保存先ディレクトリ

    return settings

録画の開始と終了

# 録画の開始・終了処理
func start_recording():
    var err = get_viewport().start_recording_video("user://gameplay_record.webm")
    if err != OK:
        print("録画開始エラー: ", err)
    else:
        print("録画開始")

func stop_recording():
    get_viewport().stop_recording_video()
    print("録画終了")

高度な録画テクニック

特定のビューポート録画

複数のビューポートがある場合、特定のビューポートだけを録画する方法です。

# 特定のビューポート録画
func record_specific_viewport():
    var viewport = $SubViewport
    viewport.start_recording_video("user://viewport_record.webm")
    # 録画中の処理
    yield(get_tree().create_timer(10.0), "timeout")  # 10秒間録画
    viewport.stop_recording_video()

エディタモードでの録画

エディタ内でシーンをプレイしながら録画する方法です。

# エディタモード用録画スクリプト
tool
extends EditorScript

func _run():
    var scene = get_editor_interface().get_edited_scene_root()
    if scene:
        var viewport = scene.get_viewport()
        viewport.start_recording_video("res://editor_record.webm")
        print("エディタ録画開始")
        # 録画終了は手動で行う必要があります

録画品質の最適化

解像度とフレームレートの調整

より高品質な録画のための設定調整方法です。

# 録画品質の設定
func optimize_recording_quality():
    # プロジェクト設定で解像度を調整
    ProjectSettings.set_setting("display/window/size/width", 1920)
    ProjectSettings.set_setting("display/window/size/height", 1080)

    # フレームレート設定
    Engine.target_fps = 60

    # 録画時の負荷対策
    var use_threads = true
    OS.set_use_vsync(false)  # V-Syncをオフにして録画パフォーマンス向上

特殊効果付き録画

スローモーション録画

ゲームアクションをスローモーションで録画する方法です。

# スローモーション録画
func record_slow_motion():
    # 通常速度で録画開始
    get_viewport().start_recording_video("user://slow_motion.webm")

    # 録画中にタイムスケールを変更
    yield(get_tree().create_timer(2.0), "timeout")
    Engine.time_scale = 0.3  # スローモーション
    yield(get_tree().create_timer(5.0 * 0.3), "timeout")  # 実時間で5秒間
    Engine.time_scale = 1.0  # 通常速度に戻す

    # 録画終了
    yield(get_tree().create_timer(2.0), "timeout")
    get_viewport().stop_recording_video()

トラブルシューティング

よくあるエラーと解決策

録画時に発生しやすい問題とその対処法です。

| エラー | 原因 | 解決策 | |--------|------|--------| | 録画が開始されない | 保存先のパスが存在しない | Directory.new().make_dir_recursive()で保存先ディレクトリを作成 | | 低フレームレート | 録画中の処理負荷が高い | 録画時のみグラフィック設定を下げる | | 音声が録音されない | 音声設定の問題 | オーディオバスの設定を確認 |

# ディレクトリが存在しない場合の対処
func ensure_directory_exists(path):
    var dir = Directory.new()
    if !dir.dir_exists(path):
        dir.make_dir_recursive(path)

GUIからの録画制御

ゲーム内UIから録画操作を行うための実装例です。

# 録画ボタンの実装
func _on_RecordButton_pressed():
    if not is_recording:
        start_recording()
        $RecordButton.text = "録画停止"
        is_recording = true
    else:
        stop_recording()
        $RecordButton.text = "録画開始"
        is_recording = false

コマンドラインからの録画

ヘッドレスモードでの自動録画方法です。

# コマンドラインでの録画実行
godot --script record_script.gd --record-video=output.webm --quit
# record_script.gd
extends SceneTree

func _init():
    var scene = load("res://game_scene.tscn").instance()
    get_root().add_child(scene)

    # 設定された時間だけ実行して自動終了
    yield(create_timer(30.0), "timeout")  # 30秒間録画
    quit()

まとめ:内蔵録画のベストプラクティス

  1. 事前準備

    • 録画前にディレクトリの存在を確認
    • パフォーマンスに影響しない範囲で最適な設定を選択
  2. 品質管理

    • 重要なシーンは高フレームレート・高解像度で録画
    • デバッグ用途なら軽量設定で素早く録画
  3. 活用シナリオ

    • バグ報告用の短い録画
    • プロモーション用の高品質映像
    • チュートリアル作成のための機能デモ

参考資料


Godot 4.x を基準としています。バージョンによって一部機能や設定が異なる場合があります。

Godotゲーム開発スクリーン録画動画作成デモ制作