Reproduzindo videos¶
Godot suporta a reprodução de vídeo com o nó VideoPlayer.
Formatos de reprodução suportados¶
O único formato suportado no núcleo é Ogg Theora (não confundir com áudio Ogg Vorbis). É possível que as extensões tragam suporte para formatos adicionais, mas essas extensões ainda não existem em julho de 2022.
H.264 e H.265 não podem ser suportados no núcleo do Godot, pois ambos estão protegidos por patentes de software. O AV1 é isento de royalties, mas permanece lento para decodificar na CPU e o suporte de decodificação de hardware ainda não está disponível em todas as GPUs em uso.
O WebM é suportado no núcleo no Godot 3.x, mas o suporte para ele será removido no 4.0, pois provou ser muito bugado e difícil de manter. Portanto, o uso do WebM não é recomendado.
Nota
Você pode encontrar vídeos com extensões .ogg
ou .ogx
, que são extensões genéricas para dados dentro de um contêiner Ogg.
Renomear essas extensões de arquivo para .ogv
talvez possa permitir que os vídeos sejam importados no Godot. No entanto, nem todos os arquivos com extensões .ogg
ou .ogx
são vídeos - alguns deles podem conter apenas áudio.
Configurando o VideoPlayer¶
Crie um nó VideoPlayer usando a caixa de diálogo Adicionar/Criar Novo Nó.
Selecione o nó VideoPlayer no painel da árvore de cena, vá para o inspetor e carregue um arquivo
.ogv
na propriedade Stream.Se você ainda não tem seu vídeo no formato Ogg Theora, vá para Configurações recomendadas de codificação Theora.
Se quiser que o vídeo seja reproduzido assim que a cena for carregada, marque Autoplay no inspetor. Caso contrário, deixe Autoplay desativado e chame
play()
no nó VideoPlayer em um script para iniciar a reprodução quando desejado.
Lidando com redimensionamento e diferentes proporções¶
Por padrão no Godot 4.0, o VideoPlayer será redimensionado automaticamente para corresponder à resolução do vídeo. Você pode fazê-lo seguir o dimensionamento normal Control habilitando Expand no nó VideoPlayer.
Para ajustar como o nó VideoPlayer é redimensionado dependendo do tamanho da janela, ajuste as âncoras usando o menu Layout na parte superior da janela de visualização do editor 2D. No entanto, essa configuração pode não ser poderosa o suficiente para lidar com todos os casos de uso, como reproduzir vídeos em tela cheia sem distorcer o vídeo (mas com espaço vazio nas bordas). Para obter mais controle, você pode usar um nó AspectRatioContainer, que é projetado para lidar com esse tipo de caso de uso:
Adicione um nó AspectRatioContainer. Certifique-se de que não seja filho de nenhum outro nó de contêiner. Selecione o nó AspectRatioContainer e defina seu Layout na parte superior do editor 2D como Full Rect. Defina Ratio no nó AspectRatioContainer para corresponder à proporção do seu vídeo. Você pode usar fórmulas matemáticas no inspetor para se ajudar. Lembre-se de transformar um dos operandos em float. Caso contrário, o resultado da divisão será sempre um número inteiro.
Depois de configurar o AspectRatioContainer, repare seu nó VideoPlayer para ser um filho do nó AspectRatioContainer. Certifique-se de que Expand esteja desativado no VideoPlayer. Seu vídeo agora deve ser dimensionado automaticamente para caber na tela inteira, evitando distorções.
Ver também
Veja Internacionalizando jogos para mais dicas sobre como suportar múltiplas proporções em seu projeto.
Exibindo um vídeo em uma superfície 3D¶
Usando um nó VideoPlayer como filho de um nó Viewport, é possível exibir qualquer nó 2D em uma superfície 3D. Por exemplo, isso pode ser usado para exibir outdoors animados quando a animação quadro a quadro exigir muita memória.
Isto pode ser feito com as seguintes etapas:
Crie um nó Viewport. Defina seu tamanho para corresponder ao tamanho do seu vídeo em pixels.
Crie um nó VideoPlayer como um filho do nó Viewport e especifique um caminho de vídeo nele. Certifique-se de Expand está desativado e habilite Autoplay* se necessário.
Crie um nó MeshInstance com um recurso PlaneMesh ou QuadMesh em sua propriedade Mesh. Redimensione a malha para corresponder à proporção do vídeo (caso contrário, ela aparecerá distorcida).
Crie um novo recurso SpatialMaterial na propriedade Material Override* na seção GeometryInstance.
Habilite Local To Scene na seção Resource (Recurso) do SpatialMaterial (na parte inferior). Isso é necessário antes que você possa usar uma ViewportTexture em sua propriedade Albedo Texture.
No SpatialMaterial, defina a propriedade Albedo > Texture como New ViewportTexture. Edite o novo recurso clicando nele e especifique o caminho para o nó Viewport na propriedade Viewport Path.
Habilite Albedo Tex Force sRGB no SpatialMaterial para evitar que as cores fiquem desbotadas.
Se o outdoor deve emitir sua própria luz, ative Flags > Unshaded para melhorar o desempenho de renderização.
Veja Usando Viewports e o GUI em demonstração 3D para mais informações sobre a configuração desta instalação.
Condições de decodificação de vídeo e resoluções recomendadas¶
A decodificação de vídeo é realizada na CPU, pois as GPUs não possuem aceleração de hardware para decodificar os vídeos do Theora. CPUs de desktop modernas podem decodificar vídeos Ogg Theora em 1440p @ 60 FPS ou mais, mas CPUs móveis de baixo custo provavelmente terão dificuldades com vídeos de alta resolução.
Para garantir que seus vídeos sejam decodificados sem problemas em diversos hardwares:
Ao desenvolver jogos para plataformas de desktop, é recomendável codificar no máximo em 1080p (de preferência a 30 FPS). A maioria das pessoas ainda está usando monitores de resolução 1080p ou inferior, portanto, a codificação de vídeos de resolução mais alta pode não valer o aumento do tamanho do arquivo e dos requisitos de CPU.
Ao desenvolver jogos para plataformas móveis ou web, recomenda-se codificar em 720p no máximo (de preferência a 30 FPS ou até menos). A diferença visual entre vídeos 720p e 1080p em um dispositivo móvel geralmente não é tão perceptível.
Limitações de reprodução¶
Existem várias limitações com a implementação atual da reprodução de vídeo no Godot:
Não há suporte para a busca até a um determinado ponto do vídeo.
A alteração da velocidade de reprodução não é suportada. O VideoPlayer também não seguirá Engine.time_scale.
Looping não é suportado, mas você pode conectar o sinal finished de um VideoPlayer a uma função que reproduz o vídeo novamente. No entanto, isso fará com que um quadro preto fique visível quando o vídeo for reiniciado. Isso pode ser resolvido adicionando um fade para preto no arquivo de vídeo antes que o vídeo termine, ou ocultando o vídeo por um quadro e exibindo um TextureRect com uma captura de tela do primeiro quadro do vídeo até que o vídeo seja reiniciado.
A transmissão de um vídeo de um URL não é suportada.
Configurações recomendadas de codificação Theora¶
Um conselho é evitar depender de exportadores Ogg Theora integrados (na maioria das vezes). Existem 2 razões pelas quais você pode querer usar um programa externo para codificar seu vídeo:
Alguns programas como o Blender podem renderizar para Ogg Theora. No entanto, as predefinições de qualidade padrão geralmente são muito baixas para os padrões atuais. Você pode aumentar as opções de qualidade no software que está usando, mas pode achar que a qualidade de saída permanece abaixo do ideal (dado o tamanho maior do arquivo). Isso geralmente significa que o software suporta apenas codificação para taxa de bits constante (CBR), em vez de taxa de bits variável (VBR). A codificação VBR deve ser preferida na maioria dos cenários, pois fornece uma melhor relação entre qualidade e tamanho do arquivo.
Alguns outros programas não podem renderizar para Ogg Theora.
Nesse caso, você pode renderizar o vídeo para um formato intermediário de alta qualidade (como um vídeo H.264 de alta taxa de bits) e recodificá-lo para Ogg Theora. Idealmente, você deve usar um formato sem perdas ou descompactado como um formato intermediário para maximizar a qualidade do vídeo Ogg Theora de saída, mas isso pode exigir muito espaço em disco.
HandBrake (GUI) e FFmpeg (CLI) são ferramentas populares de código aberto para essa finalidade. O FFmpeg tem uma curva de aprendizado mais acentuada, mas é mais poderoso.
Aqui estão exemplos de comandos FFmpeg para converter um vídeo MP4 para Ogg Theora. Como o FFmpeg suporta muitos formatos de entrada, você deve ser capaz de usar os comandos abaixo com quase qualquer formato de vídeo de entrada (AVI, MOV, WebM, …).
Nota
Certifique-se de que sua cópia do FFmpeg seja compilada com suporte a libtheora e libvorbis. Você pode verificar isso executando ffmpeg
sem nenhum argumento e, em seguida, observando a linha configuration:
na saída do comando.
Equilibrando qualidade e tamanho do arquivo¶
O nível de qualidade de vídeo (-q:v
) deve estar entre 1
e 10
. Qualidade 6
é um bom compromisso entre qualidade e tamanho do arquivo. Se estiver codificando em alta resolução (como 1440p ou 4K), você provavelmente desejará diminuir -q:v
para 5
para manter os tamanhos de arquivo razoáveis. Como a densidade de pixels é maior em um vídeo de 1440p ou 4K, as predefinições de qualidade inferior em resoluções mais altas parecerão tão boas ou melhores em comparação com vídeos de baixa resolução.
O nível de qualidade de áudio (-q:a
) deve estar entre -1
e 10
. Qualidade 6
oferece um bom compromisso entre qualidade e tamanho do arquivo. Em contraste com a qualidade do vídeo, aumentar a qualidade do áudio não aumenta tanto o tamanho do arquivo de saída. Portanto, se você deseja o áudio mais limpo possível, pode aumentar para 9
para obter um áudio perceptivamente sem perdas. Isso é especialmente valioso se o arquivo de entrada já usa compactação de áudio com perdas. Consulte esta página para obter uma tabela listando as predefinições de qualidade de áudio Ogg Vorbis e suas respectivas taxas de bits variáveis.
FFmpeg: Converter preservando a resolução de vídeo original¶
O comando a seguir converte o vídeo mantendo sua resolução original. A taxa de bits do vídeo e do áudio será variável para maximizar a qualidade enquanto economiza espaço em partes do vídeo/áudio que não requerem uma taxa de bits alta (como cenas estáticas).
ffmpeg -i input.mp4 -q:v 6 -q:a 6 output.ogv
FFmpeg: Redimensionar o vídeo e depois convertê-lo¶
O comando a seguir redimensiona um vídeo para 720 pixels de altura (720p), preservando sua proporção existente. Isso ajuda a diminuir significativamente o tamanho do arquivo se a fonte for gravada em uma resolução superior a 720p:
ffmpeg -i input.mp4 -vf "scale=-1:720" -q:v 6 -q:a 6 output.ogv