Ajouter du texte de style TikTok à une vidéo
Les fichiers de cette compétence se trouvent dans ${CLAUDE_PLUGIN_ROOT}/skills/add-text/ :
scripts/add_text.py: à utiliser. Il exécute tout le travail en deux commandes.scripts/caption_match.py(détection / ajustement / vérification) etscripts/tiktok_text.py(dessin + gravure) : le moteur.scripts/setup_check.py: configuration et vérification initiales.fonts/: TikTok Sans (open source, licence OFL).
Les styles ont été mesurés à partir de vidéos TikTok réelles dans l'application. Ne rendez pas le texte d'une autre manière (drawtext ffmpeg, police simple, etc.). Ce ne serait pas conforme.
Étape 0 : configuration (à chaque fois ; prend environ 2 secondes une fois terminée)
Exécutez, avec python / python3 présent sur le PATH :
python "${CLAUDE_PLUGIN_ROOT}/skills/add-text/scripts/setup_check.py" "${CLAUDE_PLUGIN_DATA}"
-
La première exécution crée un environnement Python privé dans le dossier de données du plugin et installe les packages (environ 1 à 2 minutes). Dites à l'utilisateur ce qui se passe.
-
La dernière ligne est
READY PY=<chemin>. Utilisez ce<chemin>comme python pour chaque commande ci-dessous (écritPY). -
NOT READY: ...indique ce qui manque et la correction exacte :- ffmpeg : demandez à l'utilisateur, puis exécutez la commande d'installation donnée (
wingetsur Windows,brewsur Mac,aptsur Linux). Sur Windows, un nouveau terminal peut être nécessaire avant que ffmpeg ne soit trouvé. Si c'est le cas, dites à l'utilisateur de redémarrer Claude Code. - Pas de Python 3.9+ : l'utilisateur doit l'installer (python.org) et redémarrer Claude Code.
Ensuite, relancez la configuration.
- ffmpeg : demandez à l'utilisateur, puis exécutez la commande d'installation donnée (
-
Pas de commande
python? Essayezpython3, oupysur Windows.
Dans les commandes ci-dessous, S = ${CLAUDE_PLUGIN_ROOT}/skills/add-text/scripts. Mettez chaque chemin entre guillemets. Dans PowerShell, commencez chaque commande par & (ex : & "PY" "S/add_text.py" ...).
Règles
- Le résultat conserve la taille et la fréquence d'images de la vidéo d'entrée (TikTok : 1080x1920). Enregistrez la version avec texte à côté de l'originale sous
<nom> (AVEC TEXTE).mp4, et ne remplacez jamais l'originale. - Contenu : TikTok pénalise les affirmations trompeuses. Évitez les affirmations absolues de résultat (« guéri », « réparé en 3 jours », « garanti »). Lorsque l'accroche d'une référence fait une affirmation, adaptez le libellé (même rythme et même nombre de lignes), et dites à l'utilisateur ce que vous avez changé et pourquoi. Demandez en cas de doute.
- Le texte saisi doit être ce qu'un iPhone produirait :
…pas...- guillemets courbes
'« »si la référence les utilise - emoji comme les véritiques caractères emoji
- Les espaces de début et de fin comptent : TikTok centre chaque ligne y compris ses espaces.
fitles ajoute pour vous.
A. Copier le texte d'une vidéo TikTok de référence
Utilisez un dossier de travail à côté de la vidéo de l'utilisateur, par ex. texte travail/.
- Démarrer :
"PY" "S/add_text.py" start "REF.mp4" "DOSSIER_TRAVAIL"- Affiche chaque légende : début/fin (précision image par image, timeline de la référence), style, couleur de remplissage et boîte.
- Écrit
DOSSIER_TRAVAIL/captions.jsonavec"text": "??", et un recadrage zooméDOSSIER_TRAVAIL/caption_<n>.pngde chacune. - Il ignore le filigrane « TikTok @utilisateur » de TikTok.
- Besoin de télécharger la référence d'abord ?
yt-dlpfonctionne s'il est installé. Sinon, demandez le fichier à l'utilisateur.
- Remplir le texte. Lisez chaque image recadrée et remplacez chaque
"??".- Laissez les autres champs. Les champs
_(_ref_t,_bbox_1080, ...) sont utilisés par finish. - Les sauts de ligne sont
\n, et les emoji sont des caractères. Ne vous souciez pas des espaces de début ou de fin. - Si deux lignes sont espacées d'environ deux fois l'espacement normal, il s'agit d'une ligne vide :
"A\n\nB". - Deux zones de texte séparées dans une même légende (tailles très différentes, grand écart, ou non centrées sur le même x) : divisez-les en deux entrées avec le même start/end,
_ref_tet style. Donnez à chacune son propre_bbox_1080: l'union de ses lignes à partir de_lines_1080(la détection affiche la boîte et la hauteur de chaque ligne), ainsi fit examine le bon texte. Exemple : lignes 1:[346,1126,735,1167] et 2+3 →[346,1126,735,1167]et[204,1272,887,1389]. styleest revenucustom/custom_outline? Il s'agit d'une autre police, d'une boîte de fond ou d'une autre couleur, que cet outil ne possède pas. Dites-le à l'utilisateur et choisissez le style le plus proche. Ne devinez pas en silence.- Retimez ici si les coupes de l'utilisateur diffèrent de la référence : modifiez
start/end(secondes, fin exclusive). Fit et check regardent toujours la référence à son propre moment (_ref_t).
- Laissez les autres champs. Les champs
- Terminer :
"PY" "S/add_text.py" finish "REF.mp4" "VIDEO.mp4" "DOSSIER_TRAVAIL"- Ajuste la taille, la position et les espaces dans le json, et écrit
DOSSIER_TRAVAIL/fit_<n>.png(référence en haut, la nôtre en bas). - Termine toute légende qui dépasse la vidéo à la longueur de celle-ci.
- Grave
VIDEO (AVEC TEXTE).mp4à côté de la vidéo (ou(sans texte)→(AVEC TEXTE)). Un 4e argument choisit un autre nom de sortie. - Vérifie le résultat et écrit
DOSSIER_TRAVAIL/check.jpg(référence gauche, nôtre droite). - Affiche un RÉSUMÉ : PASS ou REVOIR avec les raisons.
- Ajuste la taille, la position et les espaces dans le json, et écrit
- Regardez
check.jpget montrez-le à l'utilisateur avant de dire que c'est terminé.- Faible chevauchement avec « les bords correspondent à la référence à moins de N px » : la taille et la position sont correctes. Le texte jaune ou doré compressé obtient souvent un score de 0,45 à 0,7 même lorsqu'il est correct. Confirmez simplement le libellé à l'œil.
- Faible chevauchement avec « bords décalés de N px » : généralement une faute de frappe, un saut de ligne manqué, le mauvais style ou un
_bbox_1080incorrect après une division. Corrigez le json et relancez finish. - Pour conserver une taille/y/x ajustés manuellement, ajoutez
--no-fit.
B. Nouvelles légendes (sans référence)
Écrivez un captions.json :
[{"text": "ligne une\nligne deux", "start": 0, "end": 3.5, "style": "outline", "size": 70, "y": 0.5}]
Exécutez ensuite "PY" "S/add_text.py" new "VIDEO.mp4" "DOSSIER_TRAVAIL/captions.json". Il grave le texte et écrit preview.jpg (une image par légende) à côté du json. Montrez-le à l'utilisateur.
- style :
classic(blanc uni),outline(blanc + contour noir),yellow(jaune pâle),yellow_gold(jaune doré),lilac(lilas). - size : environ 50 (petit) à 85 (grand). Les accroches typiques sont de 54 à 77.
- y : 0,4-0,5 = milieu de l'écran, 0,65 = tiers inférieur. Restez à l'écart des 20 % inférieurs (légende/UI de TikTok) et du bord droit (boutons).
- Optionnel :
x(centre horizontal, par défaut 0,5),weight(poids),color("#RRGGBB" pour un remplissage personnalisé). - Coupez les lignes là où une personne qui tape sur un téléphone le ferait. Les lignes font environ 20 à 28 caractères à la taille 70.
Aperçu rapide sans rendu vidéo : "PY" "S/tiktok_text.py" --png "texte\nplus" out.png (style classique).
Pièges
- Timings typiques : démarrage environ 25 s, fin 1 à 3 min selon le nombre de légendes (les légendes avec contour sont les plus lentes à ajuster),
--no-fitenviron 40 s. - Emoji : chaque nouvel emoji est téléchargé une fois (ensemble Apple, CDN emoji-data sur jsDelivr), donc une connexion Internet est nécessaire la première fois. Si un téléchargement échoue, le script lève une exception. Dites-le à l'utilisateur plutôt que de supprimer l'emoji.
- Pas d'ombre, intentionnellement : le vrai texte TikTok n'en a pas. L'aspect « plus propre » à côté de la référence compressée est normal et disparaît une fois que TikTok ré-encode la vidéo téléchargée.
- Avec seulement 2 lignes, le correcteur d'espacement de fit ne peut pas déterminer quelle ligne est centrée. Si
fit_<n>.pngmontre une ligne décalée d'environ 5 px et que le chevauchement reste inférieur à environ 0,6, essayez d'ajouter vous-même un espace de début ou de fin sur chaque ligne et relancez. - Windows : si les emoji s'affichent étrangement dans d'autres extraits Python, définissez
PYTHONIOENCODING=utf-8. Ces scripts le gèrent.