MovieWriter

Наследует: Object

Абстрактный класс для кодировщиков видеозаписи не в реальном времени.

Описание

Godot может записывать видео с симуляцией не в реальном времени. Как и аргумент командной строки --fixed-fps Руководство по командной строке, это обеспечивает одинаковое значение delta в функциях Node._process() для всех кадров, независимо от фактического времени рендеринга кадра. Это можно использовать для записи высококачественного видео с идеальной скоростью кадров независимо от возможностей вашего оборудования.

Godot имеет 3 встроенных MovieWriter:

  • OGV контейнер с Theora для видео и Vorbis для аудио (расширение файла .ogv). Сжатие с потерями, файлы среднего размера, быстрое кодирование. Качество сжатия с потерями можно настроить, изменив ProjectSettings.editor/movie_writer/video_quality и ProjectSettings.editor/movie_writer/ogv/audio_quality. TПолученный файл можно просмотреть в Godot с помощью VideoStreamPlayer и большинства видеоплееров, но не в веб-браузерах, поскольку они не поддерживают Theora.

  • AVI контейнер с MJPEG для видео и несжатого аудио (расширение файла .avi). Сжатие с потерями, средние размеры файлов, быстрое кодирование. Качество сжатия с потерями можно настроить, изменив ProjectSettings.editor/movie_writer/video_quality. Полученный файл можно просмотреть в большинстве видеоплееров, но для просмотра в Интернете или с помощью Godot его необходимо конвертировать в другой формат. VideoStreamPlayer. MJPEG не поддерживает прозрачность. AVI в настоящее время размер выходного файла ограничен максимум 4 ГБ.

  • PNG последовательность изображений для видео и WAV для аудио (расширение файла .png). Сжатие без потерь, большой размер файлов, медленное кодирование. Разработан для кодирования в видеофайл с помощью другого инструмента, например FFmpeg после записи. Прозрачность в настоящее время не поддерживается, даже если корневая область просмотра настроена как прозрачная.

Если вам нужно кодировать видео в другой формат или направлять поток через стороннее ПО, вы можете расширить класс MovieWriter для создания собственных модулей записи фильмов. Обычно для этого используется GDExtension из соображений производительности.

Использование редактора: Путь к файлу видео по умолчанию можно указать в ProjectSettings.editor/movie_writer/movie_file. В качестве альтернативы, для запуска отдельных сцен, в корневой узел можно добавить метаданные movie_file, указав путь к файлу фильма, который будет использоваться при записи этой сцены. После того как путь задан, щелкните значок видеоленты в правом верхнем углу редактора, чтобы включить режим Movie Maker, а затем запустите любую сцену как обычно. Движок начнет запись сразу после завершения отображения заставки и остановит ее только после остановки двигателя. Чтобы отключить режим Movie Maker, щелкните значок видеоленты еще раз. NОбратите внимание, что переключение режима Movie Maker не влияет на уже запущенные экземпляры проектов.

Примечание: MovieWriter доступен для использования как в редакторе, так и в экспортированных проектах, но он не предназначен для использования конечными пользователями для записи видео во время воспроизведения. Игрокам, желающим записать видео игрового процесса, следует вместо этого установить такие инструменты, как OBS Studio или SimpleScreenRecorder.

Примечание: MJPEG ооддержка (расширение файла .avi) зависит от включения модуля jpg во время компиляции (поведение по умолчанию).

Примечание: Поддержка OGV (расширение файла .ogv) зависит от включения модуля theora во время компиляции (поведение по умолчанию). Сжатие Theora доступно только в двоичных файлах редактора.

Методы

int

_get_audio_mix_rate() virtual required const

SpeakerMode

_get_audio_speaker_mode() virtual required const

bool

_handles_file(path: String) virtual required const

Error

_write_begin(movie_size: Vector2i, fps: int, base_path: String) virtual required

void

_write_end() virtual required

Error

_write_frame(frame_image: Image, audio_frame_block: const void*) virtual required

void

add_writer(writer: MovieWriter) static


Описания метода

int _get_audio_mix_rate() virtual required const 🔗

Вызывается, когда движок запрашивает частоту дискретизации звука, используемую для записи звука. Возвращаемое значение должно быть указано в Гц. По умолчанию 48000 Гц, если _get_audio_mix_rate() не переопределен.


SpeakerMode _get_audio_speaker_mode() virtual required const 🔗

Вызывается, когда движок запрашивает режим аудиодинамика, используемый для записи звука. Это может повлиять на количество выходных каналов в результирующем аудиофайле/потоке. По умолчанию AudioServer.SPEAKER_MODE_STEREO, если _get_audio_speaker_mode() не переопределен.


bool _handles_file(path: String) virtual required const 🔗

Вызывается, когда движок определяет, может ли этот MovieWriter обработать файл по адресу path. Должен вернуть true, если этот MovieWriter может обработать указанный путь к файлу, в противном случае false. Обычно _handles_file() переопределяется следующим образом, чтобы позволить пользователю записывать файл по любому пути с указанным расширением файла:

func _handles_file(path):
    #Позволяет указать выходной файл с расширением `.mkv` (без учета регистра),
    # либо в настройках проекта, либо с помощью аргумента командной строки `--write-movie <путь>`.
    return path.get_extension().to_lower() == "mkv"

Error _write_begin(movie_size: Vector2i, fps: int, base_path: String) virtual required 🔗

Вызывается один раз перед тем, как движок начнет записывать видео- и аудиоданные. movie_size — ширина и высота сохраняемого видео. fps — количество кадров в секунду, указанное в настройках проекта или с помощью --fixed-fps <fps> аргумента командной строки.


void _write_end() virtual required 🔗

Вызывается, когда движок завершает запись. Это происходит, когда движок завершает работу, нажимая кнопку закрытия оконного менеджера или когда вызывается SceneTree.quit().

Примечание: Нажатие Ctrl + C на терминале, на котором запущен редактор/проект, не приводит к вызову _write_end().


Error _write_frame(frame_image: Image, audio_frame_block: const void*) virtual required 🔗

Вызывается в конце каждого отрендеренного кадра. Аргументы функции frame_image и audio_frame_block должны быть записаны.


void add_writer(writer: MovieWriter) static 🔗

Добавляет писатель, который может использоваться движком. Поддерживаемые расширения файлов можно задать, переопределив _handles_file().

Примечание: add_writer() должен быть вызван достаточно рано при инициализации движка, чтобы работать, так как запись фильма разработана для запуска одновременно с остальной частью движка.