Lire des vidéos¶
Godot supporte la lecture de vidéos avec le nœud VideoPlayer.
Supported playback formats¶
The only supported format in core is Ogg Theora (not to be confused with Ogg Vorbis audio). It's possible for extensions to bring support for additional formats, but no such extensions exist yet as of July 2022.
H.264 and H.265 cannot be supported in core Godot, as they are both encumbered by software patents. AV1 is royalty-free, but it remains slow to decode on the CPU and hardware decoding support isn't readily available on all GPUs in use yet.
WebM is supported in core in Godot 3.x, but support for it will be removed in 4.0 as it proved to be too buggy and difficult to maintain. Therefore, using WebM is not recommended.
Note
Vous pouvez trouver des vidéos avec une extension .ogg
ou .ogx
, qui sont des extensions génériques pour les données d'un conteneur Ogg.
Renommer ces extensions de fichiers en .ogv
peut permettre ces vidéos d'être importées dans Godot. Cependant, tous les fichiers avec des extensions .ogg
ou ``.ogx``ne sont pas des vidéos - certaines d'entre elles peuvent ne contenir que de l'audio.
Setting up VideoPlayer¶
Create a VideoPlayer node using the Create New Node dialog.
Select the VideoPlayer node in the scene tree dock, go to the inspector and load an
.ogv
file in the Stream property.Si vous n'avez pas encore votre vidéo en format Ogg Theora, consultez Paramètres recommandés pour l'encodage Theora.
Si vous voulez que la vidéo soit jouée dès que la scène est chargée, cochez Autoplay dans l'inspecteur. Si non, laissez Autoplay désactivé et appelez
play()
dans un script du nœud VideoPlayer pour commencer la lecture quand vous le désirez.
Handling resizing and different aspect ratios¶
By default in Godot 4.0, the VideoPlayer will automatically be resized to match the video's resolution. You can make it follow usual Control sizing by enabling Expand on the VideoPlayer node.
To adjust how the VideoPlayer node resizes depending on window size, adjust the anchors using the Layout menu at the top of the 2D editor viewport. However, this setup may not be powerful enough to handle all use cases, such as playing fullscreen videos without distorting the video (but with empty space on the edges instead). For more control, you can use an AspectRatioContainer node, which is designed to handle this kind of use case:
Add an AspectRatioContainer node. Make sure it is not a child of any other container node. Select the AspectRatioContainer node, then set its Layout at the top of the 2D editor to Full Rect. Set Ratio in the AspectRatioContainer node to match your video's aspect ratio. You can use math formulas in the inspector to help yourself. Remember to make one of the operands a float. Otherwise, the division's result will always be an integer.
Once you've configured the AspectRatioContainer, reparent your VideoPlayer node to be a child of the AspectRatioContainer node. Make sure Expand is disabled on the VideoPlayer. Your video should now scale automatically to fit the whole screen while avoiding distortion.
Voir aussi
See Résolutions multiples for more tips on supporting multiple aspect ratios in your project.
Afficher une vidéo sur une surface 3D¶
En utilisant un noeud VideoPlayer comme enfant d'un noeud Viewport, il est possible d'afficher n'importe quel noeud 2D sur une surface 3D. Par exemple, cela peut être utilisé pour afficher des panneaux publicitaires animés quand l'animation trame par trame nécessiterait trop de mémoire.
This can be done with the following steps:
Créez un noeud Viewport. Réglez sa taille pour qu'il corresponde à la taille de votre vidéo en pixels.
Créez un nœud VideoPlayer en tant qu'enfant du nœud Viewport et spécifiez lui le chemin de la vidéo. Vérifiez que Expand est désactivé, et activez Autoplay si besoin.
Créez un nœud MeshInstance avec une ressource PlaneMesh ou QuadMesh dans la propriété Mesh. Redimensionnez le maillage pour qu'il corresponde au format de la vidéo (sinon, celle-ci apparaîtra déformée).
Créez une nouvelle ressource SpatialRessource dans la propriété Material Override de la section GeometryInstance.
Enable Local To Scene in the SpatialMaterial's Resource section (at the bottom). This is required before you can use a ViewportTexture in its Albedo Texture property.
Dans le SpatialMaterial, définissez la propriété Albedo > Texture à New ViewportTexture. Editez la nouvelle ressource en cliquant dessus, puis spécifiez le chemin vers le nœud Viewport dans la propriété Viewport Path.
Activez Albedo Tex Force sRGB dans le SpatialMaterial pour éviter que les couleurs ne soient délavées.
Si le panneau d'affichage est censé émettre sa propre lumière, activez Flags > Unshaded pour améliorer les performances de rendu.
See Utilisation de Viewports and the GUI in 3D demo for more information on setting this up.
Video decoding conditions and recommended resolutions¶
Video decoding is performed on the CPU, as GPUs don't have hardware acceleration for decoding Theora videos. Modern desktop CPUs can decode Ogg Theora videos at 1440p @ 60 FPS or more, but low-end mobile CPUs will likely struggle with high-resolution videos.
Pour s'assurer que vos vidéos se décodent sans problème sur tout type de matériel :
Lorsque vous développez des jeux pour des plateformes de bureau, il est recommandé d'encoder en 1080p au maximum (de préférence à 30 IPS). La plupart des gens utilisent encore des écrans à résolution 1080p ou inférieure, et l'encodage de vidéos à plus haute résolution ne vaut pas forcément la peine d'augmenter la taille du fichier et les exigences du processeur.
Lorsque vous développez des jeux pour des plateformes mobiles ou web, il est recommandé d'encoder en 720p au maximum (de préférence à 30 IPS ou même moins). La différence visuelle entre les vidéos 720p et 1080p sur un appareil mobile n'est généralement pas très marquée.
Playback limitations¶
L'implémentation actuelle de la lecture vidéo dans Godot présente plusieurs limitations :
Lancer la vidéo à un moment précis n'est pas pris en charge.
Changing playback speed is not supported. VideoPlayer also won't follow Engine.time_scale.
Looping is not supported, but you can connect a VideoPlayer's finished signal to a function that plays the video again. However, this will cause a black frame to be visible when the video restarts. This can be worked around by adding a fade to black in the video file before the video ends, or by hiding the video for one frame and displaying a TextureRect with a screenshot of the first frame of the video until the video is restarted.
Le streaming d'une vidéo à partir d'une URL n'est pas prise en charge.
Paramètres recommandés pour l'encodage Theora¶
Un conseil : évitez de vous fier aux exportateurs Ogg Theora intégrés (la plupart du temps). Il y a deux raisons pour lesquelles vous pouvez préférer l'utilisation d'un programme externe pour encoder votre vidéo :
Certains programmes tels que Blender peuvent effectuer un rendu en Ogg Theora. Cependant, les préréglages de qualité par défaut sont généralement très bas par rapport aux normes actuelles. Vous pouvez peut-être augmenter les options de qualité dans le logiciel que vous utilisez, mais la qualité de sortie risque de ne pas être idéale (compte tenu de la taille accrue du fichier). Cela signifie généralement que le logiciel ne prend en charge que l'encodage à débit binaire constant (CBR), au lieu du débit binaire variable (VBR). L'encodage VBR est préférable dans la plupart des cas, car il offre un meilleur rapport qualité/taille de fichier.
Certains autres programmes ne peuvent pas du tout effectuer le rendu en Ogg Theora.
Dans ce cas, vous pouvez rendre la vidéo dans un format intermédiaire de haute qualité (comme une vidéo H.264 à haut débit) puis la réencoder en Ogg Theora. Idéalement, vous devriez utiliser un format sans perte ou non compressé comme format intermédiaire pour maximiser la qualité de la vidéo Ogg Theora de sortie, mais cela peut nécessiter beaucoup d'espace disque.
HandBrake (GUI) et FFmpeg (CLI) sont des outils open source populaires à cet effet. FFmpeg a une courbe d'apprentissage plus raide, mais il est plus puissant.
Voici des exemples de commandes FFmpeg pour convertir une vidéo MP4 en Ogg Theora. Comme FFmpeg supporte de nombreux formats d'entrée, vous devriez pouvoir utiliser les commandes ci-dessous avec presque tous les formats vidéo d'entrée (AVI, MOV, WebM, ...).
Note
Assurez-vous que votre copie de FFmpeg est compilée avec le support de libtheora et libvorbis. Vous pouvez vérifier cela en exécutant ffmpeg
sans aucun argument, puis en regardant la ligne configuration:
dans la sortie de la commande.
Équilibrer la qualité et la taille des fichiers¶
** Le niveau de qualité de la vidéo **(-q:v
) doit être compris entre 1
et 10
. La qualité 6
est un bon compromis entre la qualité et la taille du fichier. Si vous encodez à une haute résolution (comme 1440p ou 4K), vous voudrez probablement diminuer -q:v
à 5
pour garder une taille de fichier raisonnable. La densité de pixels étant plus élevée sur une vidéo 1440p ou 4K, les préréglages de qualité inférieure à des résolutions plus élevées auront un aspect aussi bon, voire meilleur, que les vidéos à basse résolution.
Le niveau de qualité audio (-q:a
) doit être compris entre -1
et 10
. La qualité 6
offre un bon compromis entre la qualité et la taille du fichier. Contrairement à la qualité vidéo, l'augmentation de la qualité audio n'augmente pas autant la taille du fichier de sortie. Par conséquent, si vous voulez le son le plus propre possible, vous pouvez augmenter cette qualité à 9
pour obtenir un son perçu comme sans perte. Ceci est particulièrement utile si votre fichier d'entrée utilise déjà une compression audio avec perte. Voir cette page pour un tableau listant les préréglages de qualité audio Ogg Vorbis et leurs débits variables respectifs.
FFmpeg : Convertissez en préservant la résolution vidéo d'origine¶
La commande suivante convertit la vidéo tout en conservant sa résolution d'origine. Le débit binaire de la vidéo et de l'audio sera variable pour maximiser la qualité tout en économisant de l'espace dans les parties de la vidéo/audio qui ne nécessitent pas un débit binaire élevé (comme les scènes statiques).
ffmpeg -i input.mp4 -q:v 6 -q:a 6 output.ogv
FFmpeg : Redimensionner la vidéo puis la convertir¶
La commande suivante permet de redimensionner une vidéo pour qu'elle ait une taille de 720 pixels (720p), tout en préservant son rapport hauteur/largeur existant. Cela permet de réduire considérablement la taille du fichier si la source est enregistrée à une résolution supérieure à 720p :
ffmpeg -i input.mp4 -vf "scale=-1:720" -q:v 6 -q:a 6 output.ogv