1 pontos por kmg28801 4 시간 전 | Ainda não há comentários. | Compartilhar no WhatsApp

Como eu era iniciante em edição de vídeo e levava meio dia para cada vídeo, automatizei o processo de edição com código.

A entrada é apenas um único YAML com narration / visual / callout descritos por cena.
Com uma única linha, python3 src/pipeline.py scenario.yaml config.yaml, sai um mp4 finalizado.

Pipeline (Python):

  • Roteiro → narração TTS (say / Supertone / ElevenLabs intercambiáveis, com cache dos resultados)
  • Distribuição automática do timing das legendas de acordo com a duração da narração; narração = legenda igual
  • Renderiza legendas e callouts como PNG e aplica overlay (método escolhido porque este build do ffmpeg não tem libass/drawtext — acabou sendo até mais fácil controlar contorno em coreano e posição em pixels)
  • Vídeos de celular gravados na vertical têm a proporção corrigida automaticamente com padding de fundo desfocado (16:9 ↔ 9:16 Shorts com uma linha no config)
  • concat da narração + mixagem com BGM (corte automático da BGM para o fim do vídeo + fade → evita “cauda preta”)
  • Ao fim da renderização, verificação automática de drift de duração e do brilho do último frame

É específico para vídeos com legendas faceless, e estou de fato gerando vídeos do meu canal no YouTube com esta ferramenta.

Limitações: as legendas não são sincronizadas palavra por palavra, mas por cena (distribuição proporcional ao número de caracteres).
E, como foi feito assumindo que este ambiente ffmpeg não tem libass, o método padrão é overlay de PNG.

O objetivo não é substituir um editor perfeito, mas tornar praticamente instantâneo o fluxo “roteiro → primeiro corte do vídeo” e eliminar o custo de produção repetitiva.

Smoke test (verificação do pipeline completo sem chaves, usando voz do macOS say):
python3 -m pip install -r requirements.txt
python3 demo/make_placeholders.py
python3 src/pipeline.py demo/scenario.yaml demo/config.yaml

MIT. Feedbacks são bem-vindos.

Ainda não há comentários.

Ainda não há comentários.