Como renderizamos legendas palavra por palavra em HTML5 Canvas
23/10/2026
O SubViral Studio desenha as legendas diretamente em um elemento <canvas>, sincronizado com o vídeo. Este artigo explica as decisões principais.
Timestamps por palavra
A transcrição devolve cada palavra com start e end em segundos. Guardamos esse array como fonte imutável e agrupamos as palavras em blocos (1, 2, 3, 4 palavras ou modo dinâmico) sem chamar a IA de novo.
O loop de renderização
A cada quadro (requestAnimationFrame) lemos video.currentTime, encontramos o bloco ativo e a palavra ativa:
const block = blocks.find((b) => b.start <= t && t <= b.end);
const word = block?.words.find((w) => w.start <= t && t <= w.end);
Com isso, cada efeito decide como desenhar: escala elástica, caixa atrás da palavra, preenchimento progressivo (karaokê) ou fade vertical com curva ease-out.
Qualquer formato de vídeo
O formato (vertical, horizontal ou quadrado) é detectado por videoWidth/videoHeight. As fontes escalam por min(W/1080, H/1280), então o mesmo código funciona na prévia e na exportação em 1080p.
Por que Canvas
Desenhar no Canvas garante que a prévia e o arquivo exportado sejam idênticos: a exportação reaproveita exatamente a mesma função de desenho.