ascii-video-player 3.0.0

dotnet tool install --global ascii-video-player --version 3.0.0
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local ascii-video-player --version 3.0.0
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=ascii-video-player&version=3.0.0
                    
nuke :add-package ascii-video-player --version 3.0.0
                    

ASCII Video Player

NuGet

Player de vídeo para o terminal. Cada quadro vira texto em caracteres coloridos, ajustado ao tamanho da janela, com o áudio tocando junto. Roda no Windows, no Linux, no macOS e também no navegador.

Experimente no navegador: escolha um vídeo do seu computador e ele toca ali mesmo, sem sair da sua máquina.

<p align="center"> <img src="https://raw.githubusercontent.com/guavovic/ascii-video-player/main/docs/assets/ascii-video-player.gif" alt="Trechos de Big Buck Bunny e Spring tocando em ascii, contornos e pontilhado" width="100%"> </p>

O player, trocando entre ascii, pontilhado e contornos:

<p align="center"> <img src="https://raw.githubusercontent.com/guavovic/ascii-video-player/main/docs/assets/navegador.gif" alt="A página do player no navegador, com cara de Prompt de Comando, trocando de estilo enquanto o vídeo toca" width="100%"> </p>

<sub>Vídeos dos GIFs: <a href="https://peach.blender.org">Big Buck Bunny</a> (licença <a href="https://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>) e <a href="https://studio.blender.org/films/spring/">Spring</a> (licença <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>), © Blender Foundation.</sub>

Como foi feito

A primeira versão era um arquivo só, presa ao Windows, com o caminho do vídeo fixo no código e o áudio quebrado. A segunda foi reconstruída em etapas, cada uma com a decisão registrada num ADR.

  • Partes separadas: leitura do vídeo, conversão para ASCII, desenho no terminal e áudio ficam em pastas próprias, e só a leitura do vídeo e o áudio ficam atrás de interfaces.
  • Linha de comando: o vídeo é passado como argumento, com opções de largura, FPS, paleta de caracteres, sem áudio e sem cor, e mensagens de erro em português.
  • Desenho no terminal: a imagem acompanha o tamanho da janela, respeita a proporção do caractere e sai colorida. Cada quadro é montado num buffer e escrito de uma vez, numa tela separada que some ao terminar.
  • Áudio como relógio: o vídeo segue a posição do que já saiu na caixa de som, como fazem os players de vídeo, e um terminal lento pula quadros em vez de ficar para trás.
  • Qualquer sistema: o vídeo e o áudio são decodificados pelo FFmpeg, e o som sai pelo OpenAL Soft, que funciona nos três sistemas.
  • Testes e medição: testes unitários com dublês feitos à mão, testes de integração com o FFmpeg de verdade nos três sistemas e benchmark da conversão (um quadro colorido inteiro em menos de 1 ms, sem alocar memória).
  • Distribuição: binário nativo compilado com Native AOT para cada sistema, publicado automaticamente a cada versão.

A terceira versão trouxe o que faltava para ser um player de verdade:

  • Estilos de imagem: além das letras, meio bloco (o dobro de resolução vertical), braille, pontilhado e contornos. A cor vai no brilho máximo e o brilho fica por conta da densidade do caractere, para a imagem não ficar apagada.
  • Controles: pausar, avançar e voltar, barra de progresso, começar de um ponto, repetir e legendas .srt por cima do vídeo.
  • Outras fontes: links de vídeo (e de sites como o YouTube, com o yt-dlp) e a câmera ao vivo, aberta pelo nome.
  • Exportar: o vídeo convertido vira uma página HTML que toca sozinha, num arquivo só.
  • No navegador: o mesmo núcleo em C# compilado para WebAssembly, numa página com cara de Prompt de Comando em que o vídeo nunca sai do computador. Toca arquivos e a câmera, e a placa de vídeo desenha (WebGL), o que aguenta até 500 colunas sem travar.
  • Menos dados por quadro: a cor parecida com a anterior é reaproveitada, o que corta cerca de 40% dos bytes enviados ao terminal sem diferença visível. O desempenho ao vivo aparece no título da janela.

Tecnologias

  • Aplicação: .NET 10, System.CommandLine, sequências ANSI para cor e controle do terminal.
  • Mídia: FFmpeg para o vídeo e o áudio, OpenAL Soft (Silk.NET) para tocar o som e yt-dlp, opcional, para links de sites de vídeo.
  • Navegador: .NET para WebAssembly, WebGL e o próprio <video> do navegador.
  • Testes: xUnit v3, Shouldly e BenchmarkDotNet.
  • Entrega: GitHub Actions com build e testes no Windows, no Linux e no macOS, Native AOT nas releases e GitHub Pages para o player no navegador.

Documentação

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
3.0.0 81 10/7/2026
2.0.0 82 10/1/2026