Communitygithub.com

MusicProWorkshop/remotion-to-resolve

Converte o código de um vídeo do Remotion em uma linha do tempo editável do DaVinci Resolve, usando keyframes reais do Inspector para movimentos de câmera de screenshots, títulos Fusion para legendas, cartões e destaques, e o mesmo ritmo de cena, depois compara a renderização quadro a quadro com a renderização original do Remotion.

O que é remotion-to-resolve?

Esta skill converte um projeto Remotion (vídeos criados com React) em uma linha do tempo editável do DaVinci Resolve. Ela funciona lendo o projeto Remotion, gerando um adaptador que transforma os dados de cena no formato `film.json` (usado pela skill `resolve-screen-tutorial`), executando a construção no Resolve e, por fim, comparando quadro a quadro o resultado com a renderização original do Remotion. A skill é útil para desenvolvedores e editores que desejam recriar vídeos complexos em um ambiente de edição não linear como o Resolve, aproveitando seus recursos avançados de correção de cor, efeitos e composição. O processo é honesto: identifica quais elementos do Remotion (como screenshots, movimentos de câmera, cursores, legendas) podem ser mapeados diretamente, aproximados ou que não podem ser transferidos (como gráficos, partículas ou animações letter-by-letter). A skill suporta os fluxos de trabalho de Claude Code, Cursor e Codex, e requer a skill `resolve-screen-tutorial` como dependência. O adaptador gerado é escrito em JavaScript e fica localizado na pasta `resolve/<id da composição>/` do projeto, permitindo que alterações no código do Remotion sejam refletidas automaticamente na linha do tempo do Resolve.

Funciona com✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/MusicProWorkshop/davinci-resolve-skills/tree/HEAD/plugins/davinci-resolve-timelines/skills/remotion-to-resolve

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Vídeo Remotion para linha do tempo do Resolve

Lê um projeto Remotion, escreve um adaptador pequeno que transforma seus dados de cena no film.json que a skill resolve-screen-tutorial constrói, executa essa construção e compara o resultado com a renderização do Remotion.

É uma reconstrução com as ferramentas do Resolve, não uma cópia dos pixels. O React pode desenhar qualquer coisa, enquanto a linha do tempo tem imagens, keyframes e títulos Fusion. Portanto, a parte honesta deste trabalho é informar ao usuário o que é mapeado de forma limpa, o que é aproximado e o que não é transferido.

Antes de começar

  • resolve-screen-tutorial fica ao lado da pasta desta skill. Leia seu SKILL.md e references/film-format.md agora, pois você escreverá nesse formato e seguirá esses passos de construção. Se estiver faltando, informe ao usuário que esta skill precisa dele.
  • O projeto Remotion tem suas dependências instaladas. Seu próprio código permanece inalterado: o adaptador apenas o lê.

Passos

1. Leia o vídeo. Comece em src/Root.tsx para obter o id da composição, fps, width, height e durationInFrames, depois siga até os componentes de cena e seus dados. Pergunte qual composição se houver várias e a solicitação não especificar. Encontre todos os assets em public/.

2. Liste o que está na tela e mapeie. references/mapping.md tem a tabela dos blocos de construção do Remotion para film.json. Leia agora. Classifique cada elemento em um dos três grupos:

  • Mapeado diretamente: screenshots em tela cheia, movimentos de câmera, cursor, anéis, legendas, cartões de título, fades.
  • Aproximado: outros easing, outras transições, fontes web que não estão instaladas, estilos elaborados de legendas.
  • Não transferido: gráficos, partículas, 3D, Lottie, ou texto animado letra por letra.

Se algo importante estiver no terceiro grupo, informe ao usuário antes de construir e ofereça as opções em references/mapping.md. Se o vídeo estiver majoritariamente nesse grupo, esta abordagem não é adequada, então avise isso em vez de construir uma cópia pobre.

3. Obtenha um vídeo de referência. Procure por uma renderização desta composição em out/. É bom se for mais recente que os arquivos de origem da composição e tiver durationInFrames quadros (verifique com ffprobe). Um encode web menor é aceitável e reduz as pontuações apenas ligeiramente. Caso contrário, renderize um, com as configurações da própria composição:

npx remotion render <id da composição> out/<id da composição>.mp4

4. Escreva o adaptador. Coloque-o em <projeto>/resolve/<id da composição>/export-film.mjs, e faça com que ele escreva film.json ao lado. Essa pasta é a pasta do filme para a construção. Adicione build/ à lista de ignorados do projeto apenas se o usuário quiser manter esses arquivos no repositório, e não faça commit a menos que seja solicitado.

O adaptador deve importar os dados reais do vídeo, para que quando a cópia ou o ritmo mudar, executá-lo novamente carregue a alteração. references/mapping.md tem um esqueleto e a aritmética. Copie valores manualmente apenas quando estiverem emaranhados dentro de JSX, e informe ao usuário quais são eles, pois esses não seguirão alterações futuras no código.

Defina a marca a partir das cores, fontes e logotipo do código. Liste todas as fontes que o vídeo carrega e verifique cada uma com fonts_available. Se uma não estiver instalada, pergunte se deseja instalá-la ou usar uma semelhante instalada. Uma fonte instalada com o mesmo nome pode ser um corte diferente da fonte web, com larguras ligeiramente diferentes.

5. Construa. Siga a seção Construção do SKILL.md do resolve-screen-tutorial do passo 1 ao passo 4, com WORK definido como a pasta do filme. O review_frames do passo 4 é uma verificação rápida antes de renderizar. Em seguida, renderize, como no passo 5, pois a comparação precisa de todo o vídeo. Pule a chamada de review.py, pois o passo 6 aqui faz isso com a referência, e remova seu trabalho de renderização após terminar a comparação. Suas decisões se aplicam aqui também: informe ao usuário em qual projeto isso se enquadra e nunca substitua uma linha do tempo que você não construiu. Defina fps para a taxa de quadros do projeto. Os tempos no film.json estão em segundos, então o ritmo ainda é válido quando difere da composição.

6. Compare com a renderização do Remotion. Passe a referência para review.py:

python "<resolve-screen-tutorial>/scripts/review.py" "<WORK>" "<WORK>/build/render/review.mp4" "<vídeo de referência>"

Ele imprime o SSIM (uma pontuação de similaridade onde 1 é idêntico) para o filme e para cada cena, com o quadro onde cada cena é mais fraca. Ele escreve folhas lado a lado em build/review/, Resolve à esquerda, e ssim-by-half-second.txt, que mostra problemas que o quadro mais baixo de uma cena esconde. Abra as folhas. Para uma olhada mais de perto, adicione --at <segundos> para obter um momento em tamanho real, Resolve em cima.

Como guia, filmes baseados em screenshots reconstruídos fielmente obtiveram pontuação geral de 0,96 a 0,97. Uma cena muito abaixo de suas vizinhas tem uma diferença real, então olhe para seu quadro mais baixo:

O que você vêCausa usual
Tudo deslocado ou com tamanho erradoEscala ou origem da transformação no adaptador
Todo o filme deslocado no tempoInício das cenas ou sobreposição de transição no adaptador
Câmera parada em repouso, errada em movimentoEasing
Um anel ligeiramente grandeA borda CSS fica dentro de sua caixa, veja film-format.md
Apenas texto difereFonte: trocada, ou o mesmo nome em um corte diferente

Algumas diferenças são esperadas e não precisam de correção:

  • Um destaque aparece tarde, porque espera a câmera parar.
  • O brilho de um anel tinge o interior do anel, pois um desfoque Fusion se espalha para ambos os lados.
  • Legendas, cursor e anéis terminam no meio de um dissolve em vez de permanecer na cena de saída.
  • Um cartão após o primeiro anima metade de um dissolve atrasado.

Corrija o adaptador, execute-o novamente, depois execute plan.py e build_film novamente. Pare quando o que restar forem diferenças que você pode nomear.

7. Relate. Tudo na seção Finalizar do resolve-screen-tutorial, mais:

  • as pontuações SSIM
  • a lista de diferenças do passo 6, cada uma com sua causa
  • qualquer coisa do grupo "não transferido" e o que você fez a respeito
  • onde está o adaptador, como executá-lo novamente, e que uma reconstrução substitui a linha do tempo, perdendo edições feitas nela

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Habilidades Relacionadas