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-tutorialfica ao lado da pasta desta skill. Leia seuSKILL.mdereferences/film-format.mdagora, 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 errado | Escala ou origem da transformação no adaptador |
| Todo o filme deslocado no tempo | Início das cenas ou sobreposição de transição no adaptador |
| Câmera parada em repouso, errada em movimento | Easing |
| Um anel ligeiramente grande | A borda CSS fica dentro de sua caixa, veja film-format.md |
| Apenas texto difere | Fonte: 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