Rodrigo Chagas
EST. 2005 · BH/BR · UTC−3
← Todos os projetos

SpeedSync Studio

App desktop que sobrepõe velocidade, tempos de volta e força G derivados de GPS em vídeos GoPro via pipeline FFmpeg sem escrita em disco.

Papel

Engenheiro solo — arquitetura, backend Rust, frontend React, toda a renderização dos widgets

Stack

Rust · Tauri · React · TypeScript · FFmpeg · OffscreenCanvas

Resultado

10–20×

mais rápido no export — da filmagem bruta da corrida ao vídeo pronto para compartilhar

Capturas de tela
Fig. 01 / 02
Fig. 02 / 02
Em campo
Fig. 01 / 02
Fig. 02 / 02
Vídeos de Demonstração

§ 01Contexto

Filmagens de câmeras de ação (GoPro, DJI) embutem um stream de telemetria GPMF — GPS, acelerômetro, giroscópio — raramente usado além da tela estática de estatísticas do app oficial. Eu queria velocidade, tempos de volta e força G queimados no próprio vídeo, como widgets configuráveis na tela, sem passar por um editor de vídeo. Isso exigiu parsear um formato binário de telemetria não documentado e construir um pipeline capaz de compor 20–30 widgets animados por frame na taxa do vídeo, entregando depois para um encode acelerado por hardware — tudo dentro de um shell desktop nativo.

§ 02O que construí

Um app Tauri v2: backend em Rust para extração do stream GPMF, gerenciamento de processos FFmpeg e probing de vídeo; frontend React/TypeScript para o editor e o sistema de widgets. O primeiro pipeline de export usava captura de DOM (html-to-image) para rasterizar cada frame, o que funcionava mas derrubava o processo de render do WebKit depois de frames suficientes, por acúmulo de chamadas a getComputedStyle. Reescrevi todo o caminho de renderização em Canvas2D. Cada widget (28 variantes de velocímetro, mapa de circuito GPS, cronômetro de voltas, bola de força G, bússola) ganhou um renderer de canvas construído do zero, rodando dentro de um Web Worker sobre um OffscreenCanvas, totalmente fora da main thread. Os frames são enviados como bytes PNG via IPC diretamente para o stdin do FFmpeg usando image2pipe, então o encode começa imediatamente e roda em paralelo com a renderização. Nenhum frame toca o disco, e o tempo de export se aproxima de max(render, encode) em vez da soma dos dois. A detecção de voltas usa um teste de cruzamento sensível à direção com um algoritmo de traçado consensual (reamostragem por comprimento de arco + mediana entre voltas) para rejeitar falsos positivos por ruído de GPS perto da linha de largada/chegada.

§ 03Resultado

Uma ferramenta para atletas e entusiastas de esportes a motor que gravam com câmeras de ação e querem mais do que um vídeo de destaques pronto. Eles têm controle total sobre como a própria velocidade, tempos de volta e força G aparecem na tela. Assumi o processo inteiro sozinho: a ideia original, a implementação, os testes com filmagens reais de corridas de kart fim de semana após fim de semana, e a divulgação para a comunidade de kart para quem o produto foi pensado. Hoje é um build funcional para macOS que uso em toda sessão, com a distribuição pública (assinatura de código, notarização) como próximo passo.