Создание фильмов

Godot может записывать видео и аудио из любого 2D- или 3D-проекта не в режиме реального времени. Этот вид записи также называется offline рендерингом. Существует множество сценариев, в которых это полезно:

  • Запись игровых трейлеров для рекламных целей.

  • Запись роликов, которые будут displayed as pre-recorded videos в финальной игре. Это позволяет использовать более высокие настройки качества (за счет размера файла) независимо от аппаратного обеспечения проигрывателя.

  • Запись процедурно сгенерированной анимации или анимационного дизайна. Во время записи видео сохраняется возможность взаимодействия с пользователем, а также может быть включен звук (хотя вы не сможете его услышать во время записи видео).

  • Сравнение визуальных результатов использования графических настроек, шейдеров или методов рендеринга в анимированной сцене.

Благодаря функциям анимации Godot, таким как узел AnimationPlayer, Tweeners, частицы и шейдеры, его можно эффективно использовать для создания любых видов 2D и 3D анимации (и неподвижных изображений).

Если вы уже привыкли к рабочему процессу Godot, возможно, использование Godot для рендеринга видео будет более продуктивным по сравнению с Blender. Тем не менее, средства визуализации, предназначенные для использования не в режиме реального времени, такие как Cycles и Eevee, могут улучшить визуальные эффекты (за счет увеличения времени рендеринга).

По сравнению с видеозаписью в реальном времени, некоторые преимущества записи не в реальном времени включают:

  • Используйте любые настройки графики (в том числе настройки, требующие повышенных требований), независимо от возможностей вашего оборудования. В выходном видео всегда будет идеальная последовательность кадров; в нем никогда не будет пропущенных кадров или заикания. Более быстрое аппаратное обеспечение позволит вам отрисовать заданную анимацию за меньшее время, но визуальный результат останется идентичным.

  • Выполняйте рендеринг с разрешением, превышающим разрешение экрана, без необходимости полагаться на специальные инструменты для драйверов, такие как NVIDIA's Dynamic Super Resolution или AMD's Virtual Super Resolution.

  • Выполните рендеринг с частотой кадров, превышающей целевую частоту кадров видео, затем post-process to generate high-quality motion blur. Это также улучшает видимость эффектов, которые сходятся на нескольких кадрах (таких как временное сглаживание, SDFGI и объемный туман).

Предупреждение

** Эта функция не предназначена для съемки видео в реальном времени во время игрового процесса.**

Игрокам следует использовать что-то вроде OBS Studio или SimpleScreenRecorder для записи игровых видеороликов, поскольку они гораздо лучше справляются с работой композитора, чем Godot, использующий Vulkan или OpenGL нативно.

Тем не менее, если при съемке ваша игра работает со скоростью, близкой к реальному времени, вы все равно можете использовать эту функцию (но при этом не будет воспроизводиться слышимый звук, так как звук сохраняется непосредственно в видеофайл).

Включение режима создания фильмов

Чтобы включить режим Movie Maker, нажмите кнопку "movie reel" в правом верхнем углу редактора перед запуском проекта:

Режим создания фильмов отключен, нажмите на значок "movie reel", чтобы включить его

Режим создания фильмов отключен, нажмите на значок "movie reel", чтобы включить его

При включении режима Movie Maker значок получает фон, соответствующий цвету акцента:

Режим Movie Maker включен. Чтобы отключить его, снова нажмите на значок "movie reel" («Кинолента»)

Режим Movie Maker включен. Чтобы отключить его, снова нажмите на значок "movie reel" («Кинолента»)

Состояние Movie Maker не сохраняется при выходе из редактора, поэтому при необходимости вам придется снова включить режим Movie Maker после перезапуска редактора.

Примечание

Переключение режима Movie Maker во время работы проекта не даст никакого эффекта до тех пор, пока проект не будет перезапущен.

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

Настройки проекта Movie Maker (с включенным переключателем «Дополнительно»)

Настройки проекта Movie Maker (с включенным переключателем «Дополнительно»)

Кроме того, вы можете задать путь к выходному файлу для каждой сцены отдельно, добавив строковый метаданные с именем movie_file в корневой узел сцены. Это используется только в том случае, если основная сцена установлена на нужную сцену, или при непосредственном запуске сцены нажатием клавиш F6 (Cmd + R у МакОсников).

Вид инспектора после создания метаданных ``movie_file`` типа String

Вид инспектора после создания метаданных movie_file типа String

Путь, указанный в настройках проекта или метаданных, может быть как абсолютным, так и относительным к корню проекта.

После настройки и включения режима Movie Maker он будет автоматически использоваться при запуске проекта из редактора.

Руководство по командной строке

Movie Maker также можно включить из command line:

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

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

Частоту кадров записи также можно переопределить в командной строке, без необходимости редактирования настроек проекта:

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

Примечание

Аргументы командной строки --write-movie и --fixed-fps доступны в экспортированных проектах. Режим Movie Maker нельзя переключить во время выполнения проекта, но можно использовать метод OS.execute() для запуска второго экземпляра экспортированного проекта, который запишет видеофайл.

Выбор выходного формата

Форматы вывода предоставляются классом MovieWriter. В Godot есть два встроенных класса MovieWriter, а дополнительные можно реализовать с помощью расширений:

PNG

Последовательность изображений PNG для видео и WAV для аудио. Обеспечивает сжатие видео без потерь, но при этом увеличивает размер файла и замедляет кодирование. Этот формат предназначен для кодирования в видеофайл с помощью внешнего инструмента после записи.

Прозрачность поддерживается, но для того, чтобы прозрачность была видна на выходном изображении, свойство transparent_bg корневой области просмотра должно быть установлено в значение true. Этого можно добиться, включив расширенный параметр проекта Rendering > Transparent Background. Параметры**Display > Window > Size > Transparent** и Display > Window > Per Pixel Transparency > Enabled можно включить дополнительно, чтобы обеспечить предварительный просмотр прозрачности во время записи видео, но для того, чтобы выходное изображение содержало прозрачность, их включение необязательно.

Чтобы использовать PNG, укажите файл .png, который нужно создать, в настройках проекта Редактор > Редактор фильмов > Файл фильма. Имя сгенерированного файла .wav будет совпадать с именем файла .png (за исключением расширения).

Настраиваемый

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

Конфигурация

В разделе Editor > Movie Writer в настройках проекта можно настроить несколько параметров. Некоторые из них становятся видны только после включения переключателя Advanced в правом верхнем углу диалогового окна настроек проекта.

  • Mix Rate Hz: Частота микширования звука, используемая в записанном аудио при создании фильма. Она может отличаться от частоты микширования проекта, но это значение должно быть кратно записанной частоте кадров в секунду, чтобы предотвратить рассинхронизацию звука со временем.

  • Speaker Mode: Режим динамиков, который будет использоваться в записанном звуке при создании фильма (стерео, объемный звук 5.1 или объемный звук 7.1).

  • MJPEG Quality: Качество JPEG, используемое при записи видео в AVI-файл, в диапазоне от «0.01» до «1.0» (включительно). Более высокие значения качества обеспечивают более качественное изображение за счёт увеличения размера файла. Рекомендуемые значения качества находятся в диапазоне от «0.75» до «0.9». Даже при качестве «1.0» сжатие JPEG остаётся с потерями. Этот параметр не влияет на качество звука и игнорируется при записи в последовательность изображений PNG.

  • Movie File: Путь к выходному файлу фильма. Может быть абсолютным или относительным к корню проекта.

  • Disable V-Sync: При включении запрашивает отключение вертикальной синхронизации при записи фильма. Это может ускорить запись видео, если оборудование достаточно быстрое для рендеринга, кодирования и сохранения видео с частотой кадров выше частоты обновления монитора. Этот параметр не работает, если операционная система или графический драйвер принудительно включают вертикальную синхронизацию и приложения не могут её отключить.

  • FPS: Количество кадров в секунду, отрендеренных в выходном фильме. Более высокие значения обеспечивают более плавную анимацию за счёт увеличения времени рендеринга и размера выходного файла. Большинство видеохостингов не поддерживают значения FPS выше 60, но вы можете использовать более высокое значение для создания эффекта размытия в движении.

Примечание

При использовании режимов disabled или 2d stretch modes , разрешение выходного файла определяется размером окна. Обязательно измените размер окна до завершения отображения заставки. Для этого рекомендуется настроить расширенные параметры проекта Display > Window > Size > Window Width Override и Window Height Override.

Ознакомьтесь так же с Рендеринг с более высоким разрешением, чем разрешение экрана.

Выход из режима Movie Maker

Чтобы безопасно выйти из проекта, использующего режим Movie Maker, используйте кнопку X в верхней части окна или вызовите get_tree().quit() в скрипте. Вы также можете использовать аргумент командной строки --quit-after N, где N — количество кадров для рендеринга перед выходом.

Нажатие клавиш F8 (Cmd + . на macOS) или Ctrl + C на терминале с запущенным Godot не рекомендуется, так как это приведёт к созданию неправильно отформатированного AVI-файла без информации о длительности. Для последовательностей изображений PNG изображения не будут подвергаться негативным изменениям, но в соответствующем WAV-файле информация о длительности по-прежнему будет отсутствовать.

Некоторые видеоплееры могут воспроизводить файлы AVI или WAV с воспроизводимым видео и звуком. Однако программы, работающие с файлами AVI или WAV, например, видеоредакторы, могут не открыть их. Использование программы-конвертера видео может помочь в таких случаях.

Если вы используете AnimationPlayer для управления «основным действием» в сцене (например, движением камеры), вы можете включить свойство Movie Quit On Finish (Завершение фильма) в соответствующем узле AnimationPlayer. Если это свойство включено, Godot автоматически завершит работу после завершения воспроизведения анимации, и если движок работает в режиме Movie Maker. Обратите внимание, что это свойство не влияет на цикличные анимации. Поэтому необходимо убедиться, что анимация нециклична.

Использование высококачественных графических настроек

movie feature tag можно использовать для переопределения определённых настроек проекта. Это полезно для включения высококачественных графических настроек, которые недостаточно быстры для работы в реальном времени на вашем оборудовании. Помните, что установка максимальных значений для каждого параметра может замедлить сохранение фильма, особенно при записи в высоком разрешении. Поэтому рекомендуется увеличивать графические настройки только в том случае, если это существенно влияет на качество выходного изображения.

Этот тег объекта также можно использовать в скрипте для повышения настроек качества, заданных в ресурсе Environment. Например, для дальнейшего улучшения детализации 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 предоставляет расширенный параметр проекта Rendering > Scaling 3D > Scale, который можно установить выше 1.0 для достижения суперсэмплинга. Затем 3D-рендеринг понижается при отображении на окне просмотра. Это обеспечивает дорогостоящий, но высококачественный вид сглаживания без увеличения конечного разрешения.

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

Если вы хотите визуализировать 2D-изображение с более высоким разрешением или вам действительно требуется большее количество необработанных пикселей для 3D-рендеринга, вы можете увеличить разрешение выше того, что позволяет экран.

По умолчанию Godot использует в проектах disabled режимы растяжения. При использовании режима растяжения disabled или canvas_items размер окна определяет разрешение выходного видео.

С другой стороны, если проект настроен на использование режима растяжения viewport, разрешение области просмотра определяет выходное разрешение видео. Разрешение области просмотра задаётся в настройках проекта Display > Window > Size > Viewport Width и Viewport Height. Это можно использовать для рендеринга видео с разрешением выше разрешения экрана.

Чтобы уменьшить размер окна во время записи, не влияя на разрешение выходного видео, можно установить для расширенных параметров проекта Display > Window > Size > Window Width Override и Window Height Override значения больше 0.

Чтобы применить переопределение разрешения только при записи фильма, вы можете переопределить эти настройки с помощью movie feature tag.

Этапы постобработки

Ниже перечислены некоторые общие этапы постобработки.

Примечание

При использовании нескольких этапов постобработки старайтесь выполнять их все одной командой FFmpeg. Это сэкономит время кодирования и повысит качество, избегая многократного кодирования с потерями.

Конвертация видео AVI в MP4

Хотя некоторые платформы, такие как YouTube, поддерживают прямую загрузку AVI-файла, многие другие требуют предварительного преобразования. HandBrake (графический интерфейс) и FFmpeg (командная строка) — популярные инструменты с открытым исходным кодом для этой цели. FFmpeg требует более сложного освоения, но и результат гораздо достойный.

Приведенная ниже команда преобразует видео AVI в видео MP4 (H.264) с коэффициентом постоянной скорости (CRF), равным 15. В результате получается относительно большой файл, но он хорошо подходит для платформ, которые перекодируют ваши видео для уменьшения их размера (например, большинство сайтов для обмена видео):

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

Чтобы получить файл меньшего размера за счет качества, увеличьте значение CRF в приведенной выше команде.

Чтобы получить файл с лучшим соотношением размера и качества (за счёт более медленного кодирования), добавьте -preset veryslow перед -crf 15 в приведённой выше команде. Напротив, -preset veryfast можно использовать для ускорения кодирования за счёт худшего соотношения размера и качества.

Конвертация последовательности изображений PNG + звука WAV в видео

Если вы решили записать последовательность изображений PNG с файлом WAV рядом, вам необходимо преобразовать их в видео, прежде чем вы сможете использовать ее где-либо еще.

Имя файла последовательности PNG-изображений, генерируемой Godot, всегда содержит 8 цифр, начиная с 0 и дополняя их нулями. Если указать путь к выходу folder/example.png, Godot запишет в эту папку folder/example00000000.png, folder/example00000001.png и так далее. Звук будет сохранён в folder/example.wav.

FPS указывается с помощью аргумента -r. Она должна соответствовать частоте кадров, указанной во время записи. В противном случае видео будет выглядеть замедленным или ускоренным, а звук будет рассинхронизирован с видео.

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

Обрезку видео можно также выполнять с помощью графического инструмента 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 и объёмный туман), и, следовательно, улучшает их внешний вид, поскольку они могут обрабатывать больше данных одновременно. Если вы хотите получить это преимущество без размытия в движении, см. Уменьшение частоты кадров.