Reproduciendo videos¶
Godot admite la reproducción de video con el nodo VideoPlayer.
Formatos de reproducción admitidos¶
El único formato admitido en el núcleo es Ogg Theora (no debe confundirse con el audio Ogg Vorbis). Es posible que las extensiones brinden soporte para formatos adicionales, pero hasta julio de 2022 no existen extensiones de este tipo.
H.264 y H.265 no pueden ser admitidos en el núcleo de Godot, ya que ambos están afectados por patentes de software. AV1 es libre de regalías, pero aún es lento para decodificar en la CPU y el soporte de decodificación de hardware no está ampliamente disponible en todas las GPU que se utilizan actualmente.
WebM es compatible en el núcleo de Godot en la versión 3.x, pero el soporte para él será eliminado en la versión 4.0, ya que ha demostrado ser demasiado problemático y difícil de mantener. Por lo tanto, no se recomienda usar WebM.
Nota
Puedes encontrar videos con extensiones .ogg
o .ogx
, que son extensiones genéricas para datos dentro de un contenedor Ogg.
Renombrar estas extensiones de archivo a .ogv
puede permitir la importación de los videos en Godot. Sin embargo, no todos los archivos con extensiones .ogg
o .ogx
son videos, algunos de ellos pueden contener solo audio.
Configurando el VideoPlayer (reproductor de video)¶
Crea un nodo VideoPlayer utilizando el diálogo "Crear Nuevo Nodo".
Selecciona el nodo VideoPlayer en el panel del árbol de escenas, ve al inspector y carga un archivo
.ogv
en la propiedad Stream.Si aún no tienes tu video en formato Ogg Theora, ve a Configuraciones recomendadas para la codificación de Theora para obtener la configuración recomendada de codificación de Theora.
Si deseas que el video se reproduzca tan pronto como se cargue la escena, marca la casilla Autoplay en el inspector. Si no, deja desactivada la opción Autoplay y llama a
play()
en el nodo VideoPlayer desde un script para iniciar la reproducción cuando lo desees.
Manejo de redimensionamiento y relaciones de aspecto diferentes¶
De forma predeterminada en Godot 4.0, el VideoPlayer se redimensionará automáticamente para que coincida con la resolución del video. Puedes hacer que siga las dimensiones habituales de Control activando la opción Expand en el nodo VideoPlayer.
Para ajustar cómo se redimensiona el nodo VideoPlayer según el tamaño de la ventana, ajusta los anclajes utilizando el menú Layout en la parte superior del viewport del editor 2D. Sin embargo, esta configuración puede no ser suficientemente potente para manejar todos los casos de uso, como reproducir videos en pantalla completa sin distorsionar el video (pero con espacio vacío en los bordes en su lugar). Para obtener un mayor control, puedes utilizar un nodo AspectRatioContainer, que está diseñado para manejar este tipo de casos de uso:
Agrega un nodo AspectRatioContainer. Asegúrate de que no sea un hijo de ningún otro nodo contenedor. Selecciona el nodo AspectRatioContainer y luego establece su opción Layout en la parte superior del editor 2D en Full Rect. Establece el valor de Ratio en el nodo AspectRatioContainer para que coincida con la relación de aspecto de tu video. Puedes utilizar fórmulas matemáticas en el inspector para ayudarte. Recuerda convertir uno de los operandos en un número decimal (float). De lo contrario, el resultado de la división siempre será un número entero.
Una vez que hayas configurado el AspectRatioContainer, cambia el padre de tu nodo VideoPlayer para que sea hijo del nodo AspectRatioContainer. Asegúrate de que la opción Expand esté desactivada en el VideoPlayer. Ahora tu video se debería escalar automáticamente para ajustarse a toda la pantalla sin distorsión.
Ver también
Consulta Múltiples resoluciones para obtener más consejos sobre cómo admitir múltiples relaciones de aspecto en tu proyecto.
Monstrando un video en una superficie 3D¶
Usando un nodo VideoPlayer como hijo de un nodo Viewport, es posible mostrar cualquier nodo 2D en una superficie 3D. Por ejemplo, esto se puede utilizar para mostrar carteles animados cuando la animación fotograma a fotograma requeriría demasiada memoria.
Esto se puede hacerse siguiendo los pasos:
Crea un nodo Viewport. Establece su tamaño para que coincida con el tamaño de tu video en píxeles.
Crea un nodo VideoPlayer como hijo del nodo Viewport y especifica una ruta de video en él. Asegúrate de que Expand esté desactivado y habilita Autoplay si es necesario.
Crea un nodo MeshInstance con un recurso de PlaneMesh o QuadMesh en su propiedad Mesh. Ajusta el tamaño de la malla para que coincida con la relación de aspecto del video (de lo contrario, aparecerá distorsionado).
Crea un nuevo recurso SpatialMaterial en la propiedad Material Override en la sección de GeometryInstance.
Activa la opción Local To Scene en la sección de recursos de SpatialMaterial (en la parte inferior). Esto es necesario antes de poder usar un ViewportTexture en su propiedad Albedo Texture.
En el SpatialMaterial, establece la propiedad Albedo > Texture en New ViewportTexture. Edita el nuevo recurso haciendo clic en él, luego especifica la ruta al nodo Viewport en la propiedad Viewport Path.
Activa la opción Albedo Tex Force sRGB en el SpatialMaterial para evitar que los colores se desvanezcan.
Si se supone que el cartel debe emitir su propia luz, activa la opción Flags > Unshaded para mejorar el rendimiento de renderizado.
Consulta Usando Viewports y el demo de GUI en 3D para obtener más información sobre cómo configurar esto.
Condiciones de decodificación de video y resoluciones recomendadas¶
La decodificación de video se realiza en la CPU, ya que las GPU no tienen aceleración de hardware para decodificar videos Theora. Las CPU de escritorio modernas pueden decodificar videos Ogg Theora a 1440p @ 60 FPS o más, pero las CPU móviles de gama baja probablemente tendrán dificultades con videos de alta resolución.
Para asegurarte de que tus videos se decodifiquen sin problemas en diferentes hardware:
Al desarrollar juegos para plataformas de escritorio, se recomienda codificar como máximo en 1080p (preferiblemente a 30 FPS). La mayoría de las personas todavía utilizan pantallas con resolución de 1080p o inferior, por lo que codificar videos de mayor resolución puede no valer la pena debido al aumento del tamaño de archivo y los requisitos de la CPU.
Al desarrollar juegos para plataformas móviles o web, se recomienda codificar como máximo en 720p (preferiblemente a 30 FPS o incluso menos). La diferencia visual entre videos de 720p y 1080p en un dispositivo móvil generalmente no es muy notable.
Limitaciones de reproducción¶
La actual implementación de la reproducción de vídeo en Godot presenta varias limitaciones:
No se admite buscar (hacer un salto) en un video hasta un punto específico.
No se admite cambiar la velocidad de reproducción. El VideoPlayer tampoco seguirá Engine.time_scale.
No se admite la repetición en bucle (looping), pero puedes conectar la señal finished del VideoPlayer a una función que reproduzca el video nuevamente. Sin embargo, esto causará que se vea un fotograma en negro cuando el video se reinicie. Esto se puede solucionar agregando un fundido a negro en el archivo de video antes de que finalice, o ocultando el video durante un fotograma y mostrando un TextureRect con una captura de pantalla del primer fotograma del video hasta que se reinicie el video.
No se admite la transmisión de un video desde una URL.
Configuraciones recomendadas para la codificación de Theora¶
Un consejo es evitar depender de los exportadores incorporados de Ogg Theora (la mayoría de las veces). Hay dos razones por las que puede ser preferible usar un programa externo para codificar tu video:
Algunos programas como Blender pueden renderizar en Ogg Theora. Sin embargo, los pre-ajustes de calidad por defecto suelen ser muy bajos según los estándares actuales. Es posible que puedas aumentar las opciones de calidad en el software que estás utilizando, pero es posible que encuentres que la calidad de salida sigue siendo menos que ideal (dado el aumento del tamaño del archivo). Esto generalmente significa que el software solo admite la codificación a tasa de bits constante (CBR), en lugar de tasa de bits variable (VBR). En la mayoría de los escenarios, se debe preferir la codificación VBR, ya que ofrece una mejor relación calidad-tamaño de archivo.
Algunos otros programas no pueden renderizar en Ogg Theora en absoluto.
En este caso, puedes renderizar el video en un formato intermedio de alta calidad (como un video H.264 de alta tasa de bits) y luego volver a codificarlo en Ogg Theora. Idealmente, deberías utilizar un formato sin pérdida o sin comprimir como formato intermedio para maximizar la calidad del video Ogg Theora resultante, pero esto puede requerir mucho espacio en el disco.
HandBrake (interfaz gráfica de usuario) y FFmpeg (línea de comandos) son herramientas de código abierto populares para este propósito. HandBrake es más fácil de usar con su interfaz gráfica, mientras que FFmpeg tiene una curva de aprendizaje más pronunciada pero es más potente.
Aquí tienes ejemplos de comandos FFmpeg para convertir un video MP4 a Ogg Theora. Dado que FFmpeg admite muchos formatos de entrada, deberías poder utilizar los comandos a continuación con casi cualquier formato de video de entrada (AVI, MOV, WebM, ...).
Nota
Asegúrate de que tu versión de FFmpeg esté compilada con soporte para libtheora y libvorbis. Puedes verificar esto ejecutando el comando ffmpeg
sin argumentos y luego revisando la línea configuration:
en la salida del comando.
Balanceando calidad y tamaño de archivo¶
El nivel de calidad de video (-q:v
) debe estar entre 1
y 10
. La calidad 6
es un buen compromiso entre calidad y tamaño de archivo. Si estás codificando a una alta resolución (como 1440p o 4K), probablemente querrás disminuir -q:v
a 5
para mantener los tamaños de archivo razonables. Dado que la densidad de píxeles es mayor en un video de 1440p o 4K, los pre-ajustes de calidad más bajos en resoluciones más altas se verán igual de bien o mejor en comparación con videos de baja resolución.
El nivel de calidad de audio (-q:a
) debe estar entre -1
y 10
. La calidad 6
proporciona un buen equilibrio entre calidad y tamaño de archivo. A diferencia de la calidad de video, aumentar la calidad de audio no aumenta tanto el tamaño del archivo de salida. Por lo tanto, si deseas tener el audio más limpio posible, puedes aumentar esto a 9
para obtener un audio percibíblemente sin pérdidas. Esto es especialmente valioso si tu archivo de entrada ya utiliza compresión de audio con pérdida. Consulta esta página para ver una tabla que muestra los preajustes de calidad de audio de Ogg Vorbis y sus respectivas tasas de bits variables.
FFmpeg: Convertir preservando la resolución de video original¶
El siguiente comando convierte el video manteniendo su resolución original. La tasa de bits del video y del audio será variable para maximizar la calidad al mismo tiempo que se ahorra espacio en partes del video/audio que no requieren una alta tasa de bits (como escenas estáticas).
ffmpeg -i input.mp4 -q:v 6 -q:a 6 output.ogv
FFmpeg: Cambiar el tamaño del video y luego convertirlo¶
El siguiente comando cambia el tamaño de un video para que tenga una altura de 720 píxeles (720p), mientras se conserva su relación de aspecto existente. Esto ayuda a reducir considerablemente el tamaño del archivo si la fuente se grabó a una resolución superior a 720p:
ffmpeg -i input.mp4 -vf "scale=-1:720" -q:v 6 -q:a 6 output.ogv