Qlip

Gravador de tela e de clipes instantâneos para Windows, nativo em C++, feito para continuar leve enquanto um jogo roda. Uma alternativa minimalista ao OBS e ao ShadowPlay.

Tipo
Software nativo · Windows
Contexto
Projeto pessoal · Open source
Stack
C++20 · Win32 · NVENC
Status
v0.3.0 · licença MIT
Site do Qlip com a janela do aplicativo gravando há 4 segundos

01Contexto e problema

Para salvar um lance de jogo depois que ele acontece, é preciso um gravador que fique sempre ligado em segundo plano. As opções conhecidas são completas, mas pesadas ou presas a um ecossistema (OBS, ShadowPlay). A proposta era um gravador que fizesse só isso, bem e sem atrapalhar o jogo.

02Objetivo

  • Gravar a tela e manter um replay contínuo dos últimos segundos, salvando o clipe com um atalho.
  • Consumir o mínimo de CPU e memória em repouso e durante a captura.
  • Não perder a gravação se o app cair.

03Solução desenvolvida

Um executável nativo em C++20 sem janela principal: o Qlip fica na bandeja e abre um painel por cima do jogo (Alt+P). A captura usa o Windows Graphics Capture, a codificação H.264 é feita na GPU via NVENC e o áudio do sistema e do microfone é mixado em AAC. O muxing em MP4 usa o FFmpeg (build LGPL, distribuído como DLLs).

04Minha contribuição

Projeto pessoal desenvolvido por mim: arquitetura dos módulos de captura, codificação, replay e gravação, a interface Win32, o instalador (Inno Setup), o site do produto e os testes de desempenho documentados no repositório.

05Tecnologias e arquitetura

O código é dividido por responsabilidade em src/: capture, audio, encoder, replay, recording, config e ui. Vídeo e áudio usam o mesmo relógio (QPC) para ficarem sincronizados.

  • C++20
  • Win32
  • Windows Graphics Capture
  • NVENC
  • WASAPI
  • FFmpeg
  • CMake
  • Inno Setup

06Principais funcionalidades

  • Gravação contínua (F9): tela inteira ou só o jogo, em 30/60/120 fps, com resolução e qualidade configuráveis.
  • Replay instantâneo (F10/F8): mantém os últimos 15 a 120 segundos e salva o clipe em MP4, funcionando junto com a gravação.
  • Áudio: som do sistema e microfone com volumes separados; se o dispositivo for desconectado, a captura reconecta sozinha.
  • Painel no jogo (Alt+P): abre por cima do jogo, escurece só o monitor dele, devolve o foco ao fechar e não aparece nas gravações.
  • Biblioteca e configurações: lista de gravações e clipes, atalhos personalizáveis e início com o Windows.

07Desafios técnicos e soluções

Guardar minutos de vídeo em memória sem explodir a RAM

Solução: o buffer de replay guarda pacotes já codificados, nunca frames brutos. Ao salvar, o clipe começa num keyframe para ser reproduzível sem recodificar.

Manter áudio e vídeo sincronizados por horas

Solução: cada fonte de áudio é gravada como um fluxo contínuo e todas usam o mesmo relógio do vídeo. O relógio só corrige a deriva do dispositivo, uma amostra por vez; quando o dispositivo some, o intervalo vira silêncio em vez de deslocar o áudio.

Não perder a gravação em uma queda

Solução: a gravação é escrita em MP4 fragmentado temporário e recuperada na próxima abertura, perdendo no máximo o último fragmento (cerca de 1 s). Em três quedas provocadas em momentos diferentes, os três arquivos foram recuperados sem erros.

Entender de onde vinha o consumo de memória

Solução: medi o processo durante a captura e comparei com o ffmpeg.exe usando as mesmas DLLs. Cerca de 220 MB vêm da sessão NVENC do driver (346 MB com h264_nvenc contra 124 MB com encoder de software), e reduzir superfícies do NVENC não mudou esse valor. A conclusão ficou documentada como limitação conhecida.

Medições publicadas no README (i7-10700F, RTX 2060, padrão de teste 1080p60, não um jogo real): em repouso, 21,9 MB de RAM e 0% de CPU; gravando, 2,7% de CPU e 11% de NVENC; 10 min de gravação com 0,05% de frames perdidos. Itens não testados, como impacto em FPS de jogos e microfone, estão marcados como tal.

08Capturas

Painel do Qlip aberto por cima do jogo com replay, salvar clipe e gravar
Painel aberto por cima do jogo (Alt+P).

09Aprendizados e melhorias futuras

O Qlip envolveu APIs de baixo nível do Windows, codificação de vídeo em hardware e sincronização de mídia, áreas em que medir antes de concluir faz diferença. Os números e as limitações ficam no README, inclusive o que não foi testado.

Limitações conhecidas e próximos passos

  • Requer GPU NVIDIA com NVENC; a inicialização sem GPU compatível ainda não foi testada.
  • Gravação e replay ligados juntos abrem duas sessões NVENC (cerca de 2× a memória).
  • O painel não abre sobre jogos em tela cheia exclusiva; funciona em tela cheia sem borda.
  • Testar com jogos reais o impacto em FPS e a troca de dispositivos de áudio.
  • Assinar digitalmente o instalador e o executável.