Que fait De la vidéo Remotion au montage Resolve ?
Lit un projet Remotion, écrit un petit adaptateur qui transforme ses données de scène au format film.json utilisé par la compétence resolve-screen-tutorial, exécute cette construction et compare le résultat avec le rendu Remotion.
C'est une reconstruction avec les outils de Resolve, pas une copie des pixels. React peut dessiner n'importe quoi, tandis que la timeline a des images, des images clés et des titres Fusion. La partie honnête de ce travail est donc d'indiquer à l'utilisateur ce qui se mappe proprement, ce qui est approximé et ce qui ne se reporte pas.
Avant de commencer
resolve-screen-tutorialse trouve à côté du dossier de cette compétence. Lisez sonSKILL.mdetreferences/film-format.mdmaintenant, car vous écrirez ce format et suivrez ces étapes de construction. S'il manque, dites à l'utilisateur que cette compétence en a besoin.- Le projet Remotion a ses dépendances installées. Son propre code reste inchangé : l'adaptateur ne fait que le lire.
Étapes
1. Lisez la vidéo. Commencez par src/Root.tsx pour l'identifiant de la composition, fps, width, height et durationInFrames, puis suivez-les à travers les composants de scène et leurs données. Demandez quelle composition s'il y en a plusieurs et que la demande ne le précise pas. Trouvez chaque élément sous public/.
2. Listez ce qui est à l'écran, et mappez-le. references/mapping.md contient le tableau des blocs de construction de Remotion vers film.json. Lisez-le maintenant. Classez chaque élément dans l'un des trois groupes :
- Correspondance directe : captures d'écran plein écran, mouvements de caméra, curseur, anneaux, légendes, cartes titres, fondus.
- Approximatif : autres easing, autres transitions, polices web non installées, stylisation élaborée des légendes.
- Non reporté : graphiques, particules, 3D, Lottie, ou texte animé lettre par lettre.
Si quelque chose d'important se trouve dans le troisième groupe, dites-le à l'utilisateur avant de construire et proposez les choix dans references/mapping.md. Si la vidéo est majoritairement dans ce groupe, cette approche n'est pas adaptée, indiquez-le plutôt que de construire une copie médiocre.
3. Obtenez une vidéo de référence. Cherchez un rendu de cette composition dans out/. C'est bien s'il est plus récent que les fichiers sources de la composition et qu'il a durationInFrames images (vérifiez avec ffprobe). Un petit encodage web convient, et ne baisse que légèrement les scores. Sinon, effectuez un rendu avec les paramètres de la composition :
npx remotion render <composition id> out/<composition id>.mp4
4. Écrivez l'adaptateur. Placez-le dans <projet>/resolve/<composition id>/export-film.mjs, et faites-lui écrire film.json à côté. Ce dossier est le dossier du film pour la construction. Ajoutez build/ à la liste d'ignorance du projet uniquement si l'utilisateur souhaite conserver ces fichiers dans le dépôt, et ne committez pas sans demande.
L'adaptateur doit importer les vraies données de la vidéo, de sorte que lorsque la copie ou le minutage change, le réexécuter propage le changement. references/mapping.md contient un squelette et les calculs. Ne copiez les valeurs à la main que lorsqu'elles sont imbriquées dans du JSX, et dites à l'utilisateur lesquelles, car celles-ci ne suivront pas les modifications ultérieures du code.
Définissez la marque à partir des couleurs, polices et logo du code. Listez chaque police que la vidéo charge et vérifiez chacune avec fonts_available. Si une police n'est pas installée, demandez s'il faut l'installer ou utiliser une police similaire installée. Une police installée portant le même nom peut être une version différente de la police web, avec des largeurs légèrement différentes.
5. Construisez. Suivez la section Construction du SKILL.md de resolve-screen-tutorial de l'étape 1 à l'étape 4, avec WORK défini sur le dossier du film. L'étape 4 review_frames est une vérification rapide avant le rendu. Effectuez ensuite le rendu, comme à son étape 5, car la comparaison nécessite la vidéo entière. Sautez l'appel à review.py, car l'étape 6 ici le fait avec la référence, et supprimez votre travail de rendu une fois la comparaison terminée. Ses décisions s'appliquent aussi ici : dites à l'utilisateur dans quel projet cela atterrit, et ne remplacez jamais une timeline que vous n'avez pas construite. Définissez fps sur la fréquence d'images du projet. Les temps dans film.json sont en secondes, donc le minutage reste valable même s'il diffère de celui de la composition.
6. Comparez avec le rendu Remotion. Passez la référence à review.py :
python "<resolve-screen-tutorial>/scripts/review.py" "<WORK>" "<WORK>/build/render/review.mp4" "<référence vidéo>"
Il affiche le SSIM (un score de similarité où 1 est identique) pour le film et chaque scène, avec l'image où chaque scène est la plus faible. Il écrit des feuilles côte à côte dans build/review/, Resolve à gauche, et ssim-by-half-second.txt, qui montre les problèmes qu'une image basse d'une scène cache. Ouvrez les feuilles. Pour un examen plus détaillé, ajoutez --at <secondes> pour obtenir un moment en taille réelle, Resolve en haut.
À titre indicatif, les films basés sur des captures d'écran reconstruits fidèlement ont obtenu un score global de 0,96 à 0,97. Une scène bien en dessous de ses voisines a une différence réelle, alors regardez son image la plus basse :
| Ce que vous voyez | Cause habituelle |
|---|---|
| Tout décalé ou de la mauvaise taille | Échelle ou origine de transformation dans l'adaptateur |
| Tout le film décalé dans le temps | Débuts de scène ou chevauchement de transition dans l'adaptateur |
| Caméra au repos correcte, en mouvement erronée | Easing |
| Un anneau légèrement trop grand | La bordure CSS se trouve à l'intérieur de sa boîte, voir film-format.md |
| Seul le texte diffère | Police : changée, ou le même nom dans une version différente |
Certaines différences sont attendues et ne nécessitent pas de correction :
- Une surbrillance apparaît en retard, car elle attend l'arrêt de la caméra.
- La lueur d'un anneau teinte l'intérieur de l'anneau, car un flou Fusion se propage dans les deux sens.
- Les légendes, le curseur et les anneaux se terminent au milieu d'un fondu enchaîné au lieu de rester sur la scène sortante.
- Une carte après la première s'anime avec un demi-fondu enchaîné de retard.
Corrigez l'adaptateur, exécutez-le à nouveau, puis relancez plan.py et build_film. Arrêtez-vous lorsque ce qui reste sont des différences que vous pouvez nommer.
7. Rapportez. Tout ce qui se trouve dans la section Fin de resolve-screen-tutorial, plus :
- les scores SSIM
- la liste des différences de l'étape 6, chacune avec sa cause
- tout ce qui provient du groupe "non reporté" et ce que vous en avez fait
- où se trouve l'adaptateur, comment le réexécuter, et qu'une reconstruction remplace la timeline, perdant les modifications apportées dessus