Воспроизведение видео¶
Godot поддерживает воспроизведение видео с помощью узла VideoPlayer.
Supported playback formats¶
Единственный поддерживаемый формат в ядре - Ogg Theora (не путать с Ogg Vorbis audio). Расширения могут обеспечить поддержку дополнительных форматов, но по состоянию на июль 2022 года таких расширений пока не существует.
H.264 и H.265 не могут поддерживаться в ядре Godot, поскольку оба они обременены патентами на программное обеспечение. AV1 не требует авторских отчислений, но он по-прежнему медленно декодируется на CPU, а аппаратная поддержка декодирования пока доступна не на всех используемых GPU.
WebM поддерживается в ядре в Godot 3.x, но в 4.0 его поддержка будет прекращена, так как он оказался слишком глючным и сложным в обслуживании. Поэтому использование WebM не рекомендуется.
Примечание
Вы можете найти видео с расширениями .ogg
или .ogx
, которые являются общими расширениями для данных внутри контейнера Ogg.
Переименование расширений этих файлов в .ogv
может позволить импортировать видео в Godot. Однако не все файлы с расширениями .ogg
или .ogx
являются видео - некоторые из них могут содержать только аудио.
Setting up VideoPlayer¶
Создайте узел VideoPlayer с помощью диалогового окна Create New Node.
Select the VideoPlayer node in the scene tree dock, go to the inspector and load an
.ogv
file in the Stream property.Если у вас еще нет видео в формате Ogg Theora, перейдите к Рекомендуемые параметры кодировки Theora.
Если вы хотите, чтобы видео воспроизводилось сразу после загрузки сцены, установите флажок Autoplay в инспекторе. Если нет, оставьте Autoplay отключенным и вызовите
play()
на узле VideoPlayer в сценарии, чтобы начать воспроизведение, когда это необходимо.
Handling resizing and different aspect ratios¶
По-умолчанию в Godot 4.0 размер VideoPlayer автоматически изменяется в соответствии с разрешением видео. Вы можете заставить его следовать обычному размеру Control, включив Expand на узле VideoPlayer.
Чтобы настроить изменение размеров узла VideoPlayer в зависимости от размера окна, настройте якоря с помощью меню Layout в верхней части окна просмотра 2D-редактора. Однако эта настройка может оказаться недостаточно мощной для всех случаев использования, например, для воспроизведения полноэкранного видео без искажения видео (но с пустым пространством по краям). Для большего контроля вы можете использовать узел AspectRatioContainer, который предназначен для обработки такого рода случаев использования:
Добавьте узел AspectRatioContainer. Убедитесь, что он не является дочерним узлом какого-либо другого узла контейнера. Выберите узел AspectRatioContainer, затем установите для его Layout в верхней части 2D-редактора значение Full Rect. Установите Ratio в узле AspectRatioContainer в соответствии с соотношением сторон вашего видео. Вы можете использовать математические формулы в инспекторе, чтобы помочь себе. Не забудьте сделать один из операндов плавающей величиной. В противном случае результатом деления всегда будет целое число.
После настройки AspectRatioContainer переназначьте узел VideoPlayer дочерним узлом узла AspectRatioContainer. Убедитесь, что Expand отключен в VideoPlayer. Теперь ваше видео должно автоматически масштабироваться, чтобы поместиться на весь экран, избегая искажений.
См.также
See Multiple resolutions for more tips on supporting multiple aspect ratios in your project.
Отображение видео на 3D-поверхности¶
Using a VideoPlayer node as a child of a Viewport node, it's possible to display any 2D node on a 3D surface. For example, this can be used to display animated billboards when frame-by-frame animation would require too much memory.
This can be done with the following steps:
Создайте узел Viewport. Установите его размер в соответствии с размером вашего видео в пикселях.
Создайте узел VideoPlayer в качестве дочернего узла Viewport и укажите в нем путь к видео. Убедитесь, что Expand отключен, и включите Autoplay, если это необходимо.
Создайте узел MeshInstance с ресурсом PlaneMesh или QuadMesh в свойстве Mesh. Измените размер сетки в соответствии с соотношением сторон видео (в противном случае она будет выглядеть искажённой).
Создайте новый ресурс SpatialMaterial в свойстве Material Override в разделе GeometryInstance.
Включите Local To Scene в разделе ресурсов SpatialMaterial's Resource (внизу). Это требуется перед тем, как вы сможете использовать ViewportTexture в его свойстве Albedo Texture.
В SpatialMaterial установите свойство Albedo > Texture в New ViewportTexture. Отредактируйте новый ресурс, щелкнув его, затем укажите путь к узлу Viewport в свойстве Viewport Path.
Включите Albedo Tex Force sRGB в SpatialMaterial, чтобы предотвратить размывание цветов.
Если рекламный щит должен излучать собственный свет, включите Flags > Unshaded для повышения производительности рендеринга.
See Использование окон просмотра and the GUI in 3D demo for more information on setting this up.
Условия декодирования видео и рекомендуемые разрешения¶
Декодирование видео выполняется на CPU, поскольку GPU не имеют аппаратного ускорения для декодирования видео Theora. Современные настольные процессоры могут декодировать видео Ogg Theora с разрешением 1440p @ 60 FPS или более, но мобильные процессоры низкого класса, скорее всего, не справятся с видео высокого разрешения.
Чтобы обеспечить плавное декодирование ваших видео на различном оборудовании:
При разработке игр для настольных платформ рекомендуется кодировать видео в формате 1080p (желательно с частотой 30 кадров в секунду). Большинство людей по-прежнему используют дисплеи с разрешением 1080p или ниже, поэтому кодирование видео с более высоким разрешением может не стоить увеличения размера файла и требований к процессору.
При разработке игр для мобильных или веб-платформ рекомендуется кодировать в формате 720p (предпочтительно с частотой 30 кадров в секунду или даже ниже). Визуальная разница между видео 720p и 1080p на мобильном устройстве обычно не так заметна.
Playback limitations¶
Текущая реализация воспроизведения видео в Godot имеет несколько ограничений:
Досмотр видео до определенной точки не поддерживается.
Изменение скорости воспроизведения не поддерживается. VideoPlayer также не будет следовать Engine.time_scale.
Зацикливание не поддерживается, но вы можете подключить сигнал VideoPlayer'а finished к функции, которая воспроизводит видео снова. Однако это приведет к тому, что при повторном запуске видео будет виден черный кадр. Это можно обойти, добавив в видеофайл затухание до черного цвета перед окончанием видео, или скрыв видео на один кадр и отобразив TextureRect со скриншотом первого кадра видео, пока видео не будет перезапущено.
Потоковая передача видео из URL-адреса не поддерживается.
Рекомендуемые параметры кодировки Theora¶
Небольшой совет: Не полагайтесь на встроенные программы экспортирования Ogg Theora (в большинстве случаев). Есть 2 причины, по которым вы, возможно, захотите использовать внешнюю программу для кодирования вашего видео:
Некоторые программы, такие как Blender, могут выполнять рендеринг в Ogg Theora. Однако предустановки качества по умолчанию обычно очень низкие по современным стандартам. Возможно, вы сможете увеличить параметры качества в используемой программе, но качество на выходе может оказаться ниже идеального (учитывая увеличенный размер файла). Обычно это означает, что программное обеспечение поддерживает кодирование только с постоянной скоростью передачи данных (CBR), а не с переменной скоростью передачи данных (VBR). В большинстве сценариев предпочтение следует отдавать кодированию VBR, поскольку оно обеспечивает лучшее соотношение качества и размера файла.
Другие программы совсем не могут рендерить в Ogg Theora.
В этом случае можно преобразовать видео в промежуточный высококачественный формат (например, высокобитрейтный H.264), а затем повторно закодировать его в Ogg Theora. В идеале для достижения максимального качества выходного видео Ogg Theora следует использовать в качестве промежуточного формата формат без потерь или без сжатия, но это может потребовать большого объема дискового пространства.
Популярные инструменты с открытым кодом, подходящие для этой цели - HandBrake (С графическим интерфейсом) и FFmpeg (С консольным интерфейсом).
Here are example FFmpeg commands to convert a MP4 video to Ogg Theora. Since FFmpeg supports a lot of input formats, you should be able to use the commands below with almost any input video format (AVI, MOV, WebM, …).
Примечание
Make sure your copy of FFmpeg is compiled with libtheora and libvorbis support.
You can check this by running ffmpeg
without any arguments, then looking
at the configuration:
line in the command output.
Балансирует между качеством и размером файла¶
Уровень качества видео (-q:v
) должен находиться в диапазоне от 1
до 10
. Качество 6
является хорошим компромиссом между качеством и размером файла. При кодировании в высоком разрешении (например, 1440p или 4K) для сохранения приемлемого размера файла, вероятно, потребуется уменьшить -q:v
до 5
. Поскольку плотность пикселей на видео с разрешением 1440p или 4K выше, пресеты с более низким качеством при высоком разрешении будут выглядеть так же или даже лучше, чем видео с низким разрешением.
Уровень качества аудио (-q:a
) должен находиться между -1
и 10
. Качество 6
обеспечивает хороший компромисс между качеством и размером файла. В отличие от качества видео, повышение качества аудио не так сильно увеличивает размер выходного файла. Поэтому, если вы хотите получить максимально чистый звук, вы можете увеличить это значение до 9
, чтобы получить аудио без потерь для восприятия. Это особенно ценно, если ваш входной файл уже использует сжатие звука с потерями. См. на этой странице таблицу с перечнем предустановок качества звука Ogg Vorbis и соответствующих им переменных битрейтов.
FFmpeg: Конвертирование с сохранением исходного разрешения видео¶
Следующая команда преобразует видео с сохранением его исходного разрешения. Битрейт видео и аудио будет изменяться, чтобы обеспечить максимальное качество и одновременно сэкономить место в тех частях видео/аудио, которые не требуют высокого битрейта (например, в статичных сценах).
ffmpeg -i input.mp4 -q:v 6 -q:a 6 output.ogv
FFmpeg: Изменить размер видео, затем конвертировать¶
Следующая команда изменяет разрешение видео до 720 пикселей в высоту(720p), при сохранении существующего соотношения сторон. Это поможет значительно снизить размер файла, если он записан с разрешением выше чем 720p:
ffmpeg -i input.mp4 -vf "scale=-1:720" -q:v 6 -q:a 6 output.ogv