Відтворення відео¶
Godot підтримує відтворення відео за допомогою вузла VideoPlayer.
Підтримувані формати відтворення¶
Єдиним підтримуваним форматом в ядрі є Ogg Theora (не плутати з Ogg Vorbis audio). Розширення можуть додавати підтримку додаткових форматів, але станом на липень 2022 року таких розширень ще не існує.
H.264 і H.265 не підтримуються в ядрі Godot, оскільки обидва вони обтяжені патентами на програмне забезпечення. AV1 не потребує ліцензійних відрахувань, але він повільно декодується на CPU, а апаратна підтримка декодування поки що доступна не на всіх графічних процесорах, що використовуються.
WebM підтримується в основному в Godot 3.x, але його підтримку буде припинено у версії 4.0, оскільки він виявився надто глючним і складним для підтримки. Тому використовувати WebM не рекомендується.
Примітка
Ви можете знайти відео з розширеннями .ogg
або .ogx
, які є загальними розширеннями даних у контейнері Ogg.
Перейменування цих розширень на .ogv
може дозволити імпортувати відео до Godot. Однак не всі файли з розширеннями .ogg
або .ogx
є відео - деякі з них можуть містити лише аудіо.
Налаштування VideoPlayer¶
Створіть вузол VideoPlayer за допомогою діалогового вікна Створити новий вузол.
Виберіть вузол VideoPlayer на панелі дерева сцен, перейдіть до інспектора і завантажте файл
.ogv
у властивість Stream.Якщо у вас ще немає відео у форматі Ogg Theora, перейдіть за посиланням Рекомендовані параметри кодування Theora.
Якщо ви хочете, щоб відео почало відтворюватися відразу після завантаження сцени, встановіть галочку Autoplay в інспекторі. Якщо ні, залиште Autoplay вимкненим і викличте
play()
на вузлі VideoPlayer у скрипті, щоб почати відтворення по необхідності.
Робота зі зміною розміру та різними співвідношеннями сторін¶
За замовчуванням у Godot 4.0 VideoPlayer автоматично змінює розмір відповідно до роздільної здатності відео. Ви можете зробити так, щоб він відповідав звичайному розміру Control, увімкнувши опцію Expand (Розгорнути) у вузлі VideoPlayer.
Щоб налаштувати зміну розмірів вузла VideoPlayer залежно від розміру вікна, налаштуйте прив'язки за допомогою меню Макет у верхній частині області перегляду 2D-редактора. Однак цього налаштування може бути недостатньо для всіх випадків використання, наприклад, для відтворення повноекранного відео без спотворення зображення (але з порожнім простором по краях). Для більшого контролю ви можете скористатися вузлом AspectRatioContainer, який призначено для обробки таких випадків використання:
Додайте вузол AspectRatioContainer. Переконайтеся, що він не є нащадком іншого вузла контейнера. Виділіть вузол AspectRatioContainer, а потім встановіть його Макет у верхній частині 2D-редактора на Увесь прямокутник. Встановіть Ratio у вузлі AspectRatioContainer відповідно до співвідношення сторін вашого відео. Ви можете використовувати математичні формули в інспекторі, щоб допомогти собі. Не забудьте зробити один з операндів десятковим. Інакше результат ділення завжди буде цілим числом.
Після налаштування AspectRatioContainer зробіть ваш вузол VideoPlayer дочірнім для вузла AspectRatioContainer. Переконайтеся, що у VideoPlayer вимкнено опцію Expand (Розгорнути). Тепер ваше відео має автоматично масштабуватися на весь екран без спотворень.
Дивись також
Дивіться Multiple resolutions для отримання додаткових порад щодо підтримки різних співвідношень сторін у вашому проекті.
Відображення відео на 3D-поверхні¶
Використовуючи вузол VideoPlayer як нащадка вузла Viewport, можна відобразити будь-який 2D-вузол на 3D-поверхні. Наприклад, це може бути використано для відображення анімованих білбордів, коли покадрова анімація вимагала б занадто багато пам'яті.
Це можна зробити за допомогою наступних кроків:
Створіть вузол Viewport. Встановіть його розмір відповідно до розміру вашого відео у пікселях.
Створіть вузол VideoPlayer в якості нащадка вузла Viewport і вкажіть у ньому шлях до відео. Переконайтеся, що Expand (Розгорнути) вимкнено, а також увімкніть Autoplay (Автовідтворення), якщо це необхідно.
Створіть вузол MeshInstance з ресурсом PlaneMesh або QuadMesh у властивості Mesh. Змініть розмір меша відповідно до співвідношення сторін відео (інакше воно буде виглядати спотвореним).
Створіть новий ресурс SpatialMaterial у властивості Material Override у розділі GeometryInstance.
Увімкніть Local To Scene на SpatialMaterial у розділі Resource (внизу). Це необхідно перед тим, як ви зможете використовувати ViewportTexture у її властивості Albedo Texture.
У SpatialMaterial встановіть для властивості Albedo > Texture значення New ViewportTexture. Відредагуйте новий ресурс, клацнувши його, а потім вкажіть шлях до вузла Viewport у властивості Viewport Path.
Увімкніть Albedo Tex Force sRGB у SpatialMaterial, щоб запобігти розмиванню кольорів.
Якщо білборд має випромінювати власне світло, увімкніть Flags > Unshaded, щоб покращити продуктивність рендерингу.
Дивіться Using Viewports та демонстрацію графічного інтерфейсу у 3D для отримання додаткової інформації про налаштування.
Умови декодування відео та рекомендована роздільна здатність¶
Декодування відео виконується на центральному процесорі, оскільки графічні процесори не мають апаратного прискорення для декодування відео Theora. Сучасні настільні центральні процесори можуть декодувати відео Ogg Theora з роздільною здатністю 1440p при 60 FPS або більше, але мобільні процесори низького класу, швидше за все, не зможуть впоратися з відео високої роздільної здатності.
Щоб забезпечити плавне декодування ваших відео на різному обладнанні:
При розробці ігор для настільних платформ рекомендується кодувати відео з роздільною здатністю не вище 1080p (бажано з частотою 30 кадрів в секунду). Більшість людей все ще використовують дисплеї з роздільною здатністю 1080p або нижчою, тому кодування відео з вищою роздільною здатністю може бути не варте збільшення розміру файлу та вимог до процесора.
При розробці ігор для мобільних або веб-платформ рекомендується кодувати в 720p максимум (бажано з частотою 30 кадрів в секунду або навіть нижче). Візуальна різниця між відео 720p і 1080p на мобільному пристрої зазвичай не дуже помітна.
Обмеження відтворення¶
Існує кілька обмежень у поточній реалізації відтворення відео в 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 (GUI) та FFmpeg (CLI) - популярні інструменти з відкритим вихідним кодом для цієї мети. FFmpeg має крутішу криву навчання, але він більш потужний.
Нижче наведено приклади команд FFmpeg для перетворення MP4-відео в Ogg Theora. Оскільки FFmpeg підтримує багато вхідних форматів, ви зможете використовувати наведені нижче команди майже з будь-яким вхідним форматом відео (AVI, MOV, WebM, ...).
Примітка
Переконайтеся, що вашу копію FFmpeg скомпільовано з підтримкою libtheora і libvorbis. Ви можете перевірити це, виконавши команду ffmpeg
без жодних аргументів, а потім переглянувши рядок configuration:
у виведенні команди.
Баланс якості та розміру файлу¶
Рівень якості відео (-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