Запись кадров: OGV, PNG и звук
Рабочая запись через CLI, число кадров, форматы и проверка результата.
Что делает Movie Maker
Movie Maker запускает проект с фиксированным шагом и записывает изображение окна вместе с микшируемым звуком. Это запись результата рендеринга проекта, не захват рабочего стола и не видеоредактор. Длина ролика определяется числом записанных кадров и FPS; время вычисления на компьютере может быть другим.
Подготовить проверочный проект
Создайте проект с уровнем Control, прикрепите RecordingSlate.cs, соберите C# и назначьте этот уровень главным. Обычный F6 показывает движущийся синий квадрат и время. Используйте чётные размеры viewport, например 1280 × 720; учебный ролик записан при 512 × 288.
RecordingSlate.cs
using Reckfell;
public partial class RecordingSlate : Control
{
private double _time;
private Label _label = null!;
public override void _Ready()
{
SetAnchorsAndOffsetsPreset(LayoutPreset.FullRect);
_label = new Label { Position = new Vector2(16, 12) };
AddChild(_label);
}
public override void _Process(double delta)
{
_time += delta;
_label.Text = $"Reckfell 1.0.0 {_time:0.00} s";
QueueRedraw();
}
public override void _Draw()
{
DrawRect(new Rect2(Vector2.Zero, Size), new Color(.03f, .03f, .04f));
float x = 24 + (float)(_time * 100 % Mathf.Max(1, Size.X - 96));
DrawRect(new Rect2(x, 70, 64, 64), new Color(.15f, .35f, 1));
DrawLine(new Vector2(24, 150), new Vector2(Size.X - 24, 150), Colors.White, 2);
}
}Записать 4 секунды через PowerShell
В первой строке укажите настоящий путь к консольному бинарнику Reckfell, во второй — свой проект. Новая подпапка Capture отделяет запись от предыдущих кадров. Путь проекта должен содержать project.reckfell, главный уровень должен быть назначен, C#-сборка — готова.
$engine = 'C:/Tools/Reckfell/Reckfell Engine.console.exe'
$project = 'C:/Projects/RecordingDemo'
$output = Join-Path $project ('Capture/' + (Get-Date -Format 'yyyyMMdd-HHmmss'))
New-Item -ItemType Directory -Path $output
& $engine --path $project --write-movie "$output/slate.ogv" --fixed-fps 30 --quit-after 120 --disable-vsyncОжидается slate.ogv и сообщение 120 frames at 30 FPS. Это 4 секунды видео. --quit-after здесь ограничивает число итераций записываемого запуска, а не задаёт длительность в секундах. Без явного окончания запись продолжается до закрытия приложения или GetTree().Quit().
Не добавляйте --headless: обычный headless использует фиктивный рендерер и не даёт кадры этого примера. Нужен работающий графический драйвер. --disable-vsync может уменьшить ожидание синхронизации, но не обещает запись быстрее реального времени. Частоту симуляции и аппаратную скорость записи не следует путать.
Выбрать формат
| Выход | Что хранится и когда выбирать |
|---|---|
.ogv | Theora + Vorbis; компактный файл, воспроизводимый встроенным VideoStreamPlayer; размеры должны быть чётными |
.png | Последовательность PNG без потерь и отдельный WAV PCM; удобно для монтажа и проверки отдельных кадров, нужно больше места |
.avi | MJPEG + PCM; большой файл с 32-битными полями размеров, проверяйте совместимость целевого плеера и избегайте длинных высокобитрейтных записей |
| MP4 / WebM | Отдельное перекодирование или собственный MovieWriter; расширение само по себе не создаёт такой писатель |
Для PNG используйте подготовленные выше переменные и ту же новую папку:
& $engine --path $project --write-movie "$output/frames.png" --fixed-fps 30 --quit-after 120 --disable-vsyncПолучатся frames00000000.png, следующие номера и frames.wav, а не один файл frames.png. Устанавливайте тот же FPS при сборке последовательности во внешнем редакторе. Для каждой новой последовательности берите новую папку: старые кадры с большим номером не должны попасть в новый монтаж.
Пример AVI:
& $engine --path $project --write-movie "$output/slate.avi" --fixed-fps 30 --quit-after 120 --disable-vsyncДругие контейнеры/кодеки добавляются реализацией MovieWriter или внешним инструментом, например FFmpeg. Его установка не нужна для встроенных трёх вариантов и не выполняется этими командами.
Настройки и звук
| Project Settings | Назначение |
|---|---|
editor/movie_writer/fps | FPS при обычном включении режима в редакторе; CLI --fixed-fps задаёт частоту запуска явно |
editor/movie_writer/movie_file | Путь записи из редактора |
editor/movie_writer/video_quality | Качество сжатия для соответствующего писателя, не качество рендеринга сцены |
editor/movie_writer/mix_rate | Частота аудио; для 30/60 FPS удобно 48000 Гц без дробного числа аудиокадров на кадр видео |
editor/movie_writer/ogv/keyframe_interval | Интервал ключевых кадров OGV; влияет на сжатие и последующую перемотку |
PNG-писатель создаёт WAV с 32-битным PCM; настройка битности AVI не превращает его в другой формат. При частоте аудио, не делящейся на FPS, движок предупреждает о возможном рассогласовании. Видео без активных звуков всё равно может иметь тихую аудиодорожку.
В редакторе откройте Open Movie Maker Settings…, задайте файл, включите Enable Movie Maker Mode, затем запустите проект. После записи выключите режим перед обычной интерактивной проверкой. Закрывайте запись штатно: завершение дописывает индексы и размеры контейнера; принудительное завершение процесса может оставить неполный файл.
Разрешение и качество
Фактические ширина и высота выводятся в логе начала записи. Настройте viewport проекта до запуска. Если размер окна и целевой кадр различаются, текущий писатель может обрезать по пропорциям и масштабировать изображение; проверьте края кадра, не только размеры файла. Включение высокого качества графики не изменяет разрешение автоматически.
Для воспроизводимого ролика используйте фиксированные данные, seed случайности и локальные ресурсы. Movie Maker не делает сетевые ответы и действия пользователя детерминированными. Для длинного рендера сначала запишите короткий фрагмент с теми же настройками.
Проверить готовый результат
Сравните лог количества кадров, FPS и ожидаемую длительность. Откройте начало и конец, проверьте движение, размеры и звук. Учебный готовый OGV можно проверить встроенным VideoDemo. Проверки этого руководства также декодируют реальные PNG/JPEG-кадры, сверяют WAV и воспроизводят OGV; это не сертификация всех внешних плееров.
Если запись не началась, проверьте расширение писателя, существование выходной папки, права и свободное место. Если кадры пустые — выбранную сцену, графический драйвер и отсутствие headless. Если файл короткий — условия Quit в игровом коде. Не ограничивайте видеозапись слепо временем настенных часов: при тяжёлом кадре она может считать медленнее.