Exportation
Utilisez les outils d'exportation d'OpenChatCut pour la livraison. Une demande d'exportation doit appeler submit_export (ou submit_render_job pour l'asynchrone), puis utiliser track_export pour le statut et la livraison finale lorsque le résultat n'est pas retourné immédiatement.
Politique par défaut :
- Préférez
submit_exportlorsque l'utilisateur demande d'exporter/partager/finaliser la timeline OpenChatCut. - Conservez les originaux localement par défaut pendant le montage. Ne téléchargez les originaux que lorsqu'une exportation/preuve cloud a besoin de ressources distantes et que l'utilisateur n'a pas interdit le téléchargement.
- N'encapsulez pas le travail
ffmpegdu sandbox comme un outil OpenChatCut. Utilisezffmpegdu sandbox pour le traitement vidéo complet uniquement lorsque l'utilisateur demande explicitement une opération locale autonome sur fichier en dehors d'un flux de travail de montage OpenChatCut. Pour les tâches de montage OpenChatCut, ne produisez pas un rendu local pré-édité ou aplati comme principale livraison de révision/finale ; utilisez l'exportation OpenChatCut.
Exportation Durable
Utilisez submit_export pour le chemin d'exécution :
{
"format": "video",
"codec": "h264",
"resolution": "1080p",
"fps": 30,
"name": "final-cut"
}
Les options de codec vidéo sont h264 (MP4, par défaut) et vp8 (WebM). Les options de fréquence d'images vidéo correspondent à l'interface de l'éditeur : 24, 25, 30, 50 ou 60 ; omettez fps pour correspondre à la timeline. L'exportation audio est en MP3 : passez "format":"audio" et omettez codec / fps sauf si vous passez explicitement "codec":"mp3".
submit_export renvoie un renderId durable. Certains types d'exportation, comme les fichiers de sous-titres, peuvent se terminer immédiatement et renvoyer downloadUrl ; la vidéo/l'audio nécessitent généralement track_export pour attendre la fin.
Après avoir obtenu chaque downloadUrl :
- Résolvez le dossier Téléchargements de l'utilisateur :
~/Downloadssur macOS/Linux, ou%USERPROFILE%\Downloadssur Windows. - Avant de déclencher un téléchargement par agent/navigateur, vérifiez le dossier Téléchargements pour les artefacts de téléchargement Chrome récents des dernières minutes qui correspondent au nom d'exportation attendu, à l'extension ou au nom de base de l'URL de rendu/téléchargement. Incluez à la fois les fichiers terminés et les fichiers en cours
.crdownload. - Si un
.crdownloadrécent correspondant existe, ne déclenchez pas un autre téléchargement. Attendez que Chrome supprime le suffixe.crdownloadet que la taille finale du fichier cesse de changer, puis utilisez ce fichier terminé. - Si un fichier terminé récent correspondant existe déjà, utilisez-le directement au lieu de le télécharger à nouveau.
- Si seuls des fichiers plus anciens existent, traitez-les comme des collisions, pas comme l'exportation en cours.
- N'écrasez pas un fichier existant ; choisissez un nom de fichier numéroté sûr comme
nom (1).mp4si nécessaire. - Téléchargez toujours le fichier d'exportation terminé dans le dossier Téléchargements, pas dans un répertoire temporaire/espace de travail.
- Affichez toujours la vidéo téléchargée en ligne dans le chat. S'il y a plusieurs vidéos exportées, téléchargez-les toutes et affichez chaque aperçu, pas seulement la première.
Si le projet contient des ressources locales uniquement, téléchargez/enregistrez des remplacements lisibles dans le cloud avant le rendu, ou utilisez le chemin d'exportation CLI locale lorsque l'utilisateur souhaite rester local.
Signalez le renderId renvoyé lorsqu'il est présent. Le travail est également visible dans la file d'exportation en haut à droite de l'éditeur, y compris la progression et l'annulation. Utilisez saveToMediaPool:true lorsque l'utilisateur demande de conserver le résultat dans Mes médias ou lorsque le flux de travail actif utilise par défaut la matérialisation automatique, comme livestream-to-clips ; sinon, la valeur par défaut reste une exportation téléchargeable normale. Pour les vidéos longues, appelez track_export une fois avec action:"wait" et timeoutSeconds:20. S'il renvoie waitExpired:true, signalez que le rendu continue en arrière-plan et terminez le tour. Vérifiez-le plus tard avec action:"status" ; les attentes répétées ne font que maintenir le tour de l'Agent ouvert. Ne démarrez pas une autre exportation pour la même timeline tant que ce rendu est actif.
Utilisez track_export lorsque l'utilisateur demande l'état de l'exportation/rendu, ou lorsque le tour actuel doit vraiment attendre un rendu vidéo/audio soumis. Les exportations de connecteurs terminées renvoient downloadUrl ; pour chaque entrée terminée, téléchargez le fichier vers Téléchargements en utilisant les règles de sécurité ci-dessus et affichez-le en ligne dans le chat :
{
"action": "status",
"renderIds": "abc123"
}
Pour la dernière exportation du projet, omettez renderIds et passez "latest": true. track_progress est pour les travaux de génération/transcription/téléchargement, pas pour les travaux de rendu.
Pour le XML NLE, utilisez submit_export avec format:"xml" :
{
"format": "xml",
"nleFormat": "fcp_xml_resolve",
"timelineId": "abc123"
}
Les valeurs de nleFormat sont fcp_xml pour le XML Premiere (par défaut) et fcp_xml_resolve pour le XML DaVinci Resolve. Omettez timelineId pour la timeline active, ou passez un id/prefixe de timeline pour une timeline non active. Lisez et signalez les avertissements : les légendes, les solides, les SVG, les attributs de clip non pris en charge et les graphiques animés non rendus peuvent être supprimés par le format XML. Les graphiques animés ne sont représentés en XML que lorsqu'un flux d'exportation MG ProRes transparent fournit motionGraphicRenderKeys ; sinon, l'exportateur les signale comme supprimés.
Pour le téléchargement de source de médiathèque, utilisez request_asset_download sur un actif source basé sur fichier. Il renvoie une URL/chemin de téléchargement backend gardé pour les fichiers médias sources originaux. N'utilisez pas pull_asset pour les téléchargements utilisateur ; pull_asset est réservé au sandbox.
Pour les fichiers de sous-titres, utilisez submit_export avec format:"subtitles" :
{
"format": "subtitles",
"subtitleFormat": "srt"
}
Les formats sont srt et txt. L'exportation utilise le minutage réel des mots de la timeline de l'élément de légende, la portée de la source, les variantes de traduction, les remplacements de texte d'affichage et les champs de rythme tels que wordsPerPage / maxCharactersPerLine, et crée un travail d'exportation téléchargeable durable. Il est approprié pour les fichiers de sous-titres téléchargeables. Il ne réutilise pas encore le planificateur de pages de légendes Remotion du navigateur, donc les sauts de ligne visuels/sauts de page sont corrects en termes de minutage mais approximatifs plutôt qu'identiques octet par octet à la pagination des légendes incrustées. Pour les timelines non actives, passez timelineId depuis manage_timelines ou read_project.
Pour un graphique animé en ProRes 4444 transparent, utilisez export_motion_graphic_prores :
{
"itemId": "abc123",
"filenameMode": "asset"
}
Préférez itemId lors de l'exportation d'une instance de timeline spécifique, car l'élément porte des propertyOverrides en direct tels que le texte modifié. Utilisez assetId pour un graphique animé de la médiathèque ; le backend utilisera la première instance de timeline pour cet actif lorsqu'elle est présente, correspondant au comportement d'exportation de la médiathèque de l'éditeur. Pour plusieurs graphiques animés, passez itemIds ou assetIds en un seul appel. Chaque graphique animé devient toujours un rendu durable séparé ; utilisez track_export avec les renderIds renvoyés pour attendre, puis téléchargez via chaque chemin de téléchargement de rendu renvoyé.
Lors de la préparation d'un XML qui doit référencer des graphiques animés rendus, passez "filenameMode":"xml" et le même timelineId à export_motion_graphic_prores, puis conservez la motionGraphicRenderKey / les motionGraphicRenderKeys renvoyées ; une fois le rendu terminé, passez ces clés et le même timelineId dans submit_export.motionGraphicRenderKeys avec format:"xml".
Rendu local (cette build)
Tout le rendu est local : submit_export / submit_render_job pilotent le service de rendu local (Chrome sans tête sur le même état de timeline que celui affiché par l'éditeur), lisant les médias directement depuis /media/uploads/ sur le disque. Il n'y a pas d'exigence S3, pas de CLI et pas de travail cloud à attendre pour les ressources basées sur le disque.
submit_export: les sous-titres/XML sont renvoyés de manière synchrone ; la vidéo/l'audio sont également rendus en appel dans cette build (les timelines longues peuvent prendre du temps — prévenez l'utilisateur au lieu d'interroger).submit_render_job+track_export: la voie asynchrone — renvoie unrenderIdimmédiatement, interrogez avectrack_export(renderIds/latest/onlyActive), puis remettez le chemin de téléchargement renvoyé à l'utilisateur.- Les ressources encore sur les espaces réservés
blob:(téléchargement en vol) ne sont pas encore rendues — attendez quetrack_progresstarget=upload signale qu'elles sont prêtes avant de soumettre.
Replis
Si un rendu échoue parce que les octets d'une ressource sont manquants (espace réservé jamais relié, fichier supprimé du disque) :
- Demandez à l'utilisateur de relier la ressource dans mes médias (bannière ressources hors ligne) ou de réimporter le fichier.
- Pour les médias provenant d'URL, réexécutez
download_mediapour restaurer les octets, puis soumettez à nouveau.
Ne dites pas à l'utilisateur qu'il doit comprendre HTML-in-Canvas, Remotion ou les détails de stockage, sauf en cas de débogage. Expliquez au niveau du produit :
- "exportation locale rapide"
- "les ressources sont encore en cours de téléchargement, attendez avant d'exporter"
- "vous devez d'abord relier la ressource locale"
Trace de résultat
Pour submit_export, enregistrez :
renderId- timeline/plage/résolution/codec/fps
- que l'utilisateur peut télécharger depuis le panneau des travaux de rendu de l'éditeur
Enregistrez les ID de ressources téléchargés et tout repli essayé lorsque l'exportation cloud a été bloquée par des ressources locales uniquement.