Communitygithub.com

13kailouis-stack/wecut

Coupez, légendez et modifiez des vidéos localement avec la CLI `wecut` (FFmpeg sur cette machine, pas de cloud, pas de clé API). Utilisez-le pour créer des clips courts, ajouter des légendes ou des sous-titres karaoké, rogner ou assembler des vidéos, transformer des photos en diaporama, ajouter du texte, des logos, de la musique ou des transitions, générer des vidéos en 9:16 / 1:1 / 16:9, analyser pourquoi une vidéo virale fonctionne, ou réutiliser son format comme modèle sur de nouvelles séquences.

Qu'est-ce que wecut ?

WeCut est un outil de montage vidéo entièrement local, piloté en ligne de commande ou via MCP, qui transforme des projets JSON en fichiers MP4 ou GIF en utilisant FFmpeg. Il ne nécessite aucune connexion cloud ni clé API, ce qui garantit la confidentialité et la rapidité. WeCut permet de découper des clips, d'ajouter des légendes avec différents styles (dont karaoké et pop), d'incorporer du texte, des images, de la musique et des transitions, et même d'analyser la structure de vidéos pour créer des modèles réutilisables. Il prend en charge les plates-formes de développement telles que Claude Code, Cursor, et Codex via MCP ou la CLI, et fournit une suite complète d'outils : diagnostic, inspection, validation, prévisualisation, rendu et analyse. Avec son système de recettes (templates), il permet de copier la structure d'une édition réussie et de l'appliquer à de nouvelles séquences, facilitant la création de contenu court pour les réseaux sociaux.

Compatible avec~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/13kailouis-stack/wecut/tree/HEAD/skills/wecut

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait wecut ?

wecut transforme un projet JSON en MP4 (ou GIF) avec FFmpeg installé sur cette machine. Vous décrivez le montage ; WeCut effectue le travail vidéo. Il n'appelle jamais de service réseau.

Si wecut n'est pas dans le PATH, utilisez npx -y wecut (Node 16+) partout à la place. Si WeCut est connecté en tant que serveur MCP, les mêmes étapes sont les outils wecut_doctor, wecut_probe, wecut_validate, wecut_preview (renvoie les images sous forme d'images), wecut_render, wecut_list, wecut_schema, wecut_example, wecut_analyze (renvoie la feuille d'images sous forme d'image), wecut_recipe_list, wecut_recipe_show, wecut_recipe_apply et wecut_recipe_from_project ; passez un projet en tant que project (objet) ou projectFile (chemin).

Flux de travail

  1. Vérifiez la machine une fois : wecut doctor. S'il signale que FFmpeg est manquant, suivez son hint (par exemple sudo apt-get install -y ffmpeg).
  2. Placez les médias dans l'espace de travail. Chaque chemin dans un projet est relatif au dossier depuis lequel vous exécutez wecut (ou --root DOSSIER). Les URL sont refusées : téléchargez d'abord les fichiers.
  3. Examinez les médias : wecut probe media/talk.mp4 media/music.mp3 donne la durée, la taille, les fps et la présence de son. Utilisez ces chiffres pour from/to.
  4. Écrivez project.json (format ci-dessous). wecut example podcast-clip affiche un exemple complet ; wecut schema affiche le schéma JSON ; wecut list montre tous les styles, polices, transitions et noms de filtres.
  5. Validez : wecut validate project.json. Les erreurs reviennent avec un pointeur JSON (/clips/0/to) et un hint. Corrigez et répétez.
  6. Regardez avant le rendu : wecut preview project.json --at 0.5,3,10 écrit de petites images JPG dans out/preview/. Ouvrez-les et vérifiez le cadrage, la taille du texte et la position des légendes.
  7. Rendu : wecut render project.json. Utilisez --preset draft pour une vérification rapide en 540p, la valeur par défaut final pour la livraison.

Chaque commande imprime un seul objet JSON. Codes de sortie : 0 ok, 2 entrée invalide, 3 dépendance manquante, 4 échec du rendu, 5 dépassement d'une limite. Vous pouvez passer un projet via un tube avec wecut render -.

Format du projet

{
  "wecut": "1",
  "output": { "file": "out/clip-01.mp4", "ratio": "9:16", "res": 1080, "fps": 30 },
  "clips": [
    { "src": "media/talk.mp4", "from": 754.2, "to": 781.0, "focus": { "x": 0.42, "y": 0.5 } },
    { "src": "media/talk.mp4", "from": 795.5, "to": 812.0, "zoom": 1.15 }
  ],
  "texts": [
    { "text": "Comment j'ai gagné mes premiers 10k€", "start": 0, "end": 3, "style": "hook", "y": 0.2, "in": { "type": "pop" } }
  ],
  "captions": { "words": "media/talk.words.json", "src": "media/talk.mp4", "style": "karaoke" },
  "audio": [ { "src": "media/music.mp3", "volume": 25, "loop": true, "duck": true, "fadeOut": 1.5 } ]
}

Règles importantes :

  • Deux horloges. Les from/to d'un clip sont en secondes du fichier source. Tout le reste (texts, overlays, audio.at, filters, effects) est en secondes de la vidéo finie. wecut validate imprime la duration finale.
  • Les transitions se chevauchent. Une transition sur le clip N se fond dans le clip N+1 et raccourcit la vidéo de sa duration.
  • Cadrage. Le fit par défaut est cover (remplit et recadre). Orientez le recadrage avec focus (0..1 ; x 0.3 garde le côté gauche) et zoom. Utilisez "fit": "contain" avec "background": "blur" pour afficher toute l'image.
  • Les positions sont des fractions du canevas, 0.5 est le centre. La size de la police est en pixels à 1080p.
  • Les images utilisent duration (par défaut 3) et peuvent avoir un motion : in, out, left, right, up, down.
  • Les emojis ne sont pas dessinés dans le texte. Mettez-les dans un PNG et utilisez overlays.

Légendes

Donnez à WeCut une transcription avec les timings des mots et il construit les sous-titres :

  • words : un chemin .json, .srt ou .vtt, ou un tableau en ligne [{"word": "salut", "start": 0.1, "end": 0.4}]. Les verbose_json d'OpenAI/Groq et le JSON de whisper.cpp sont lus tels quels.
  • src : définissez-le sur la vidéo à laquelle la transcription appartient. Alors la transcription conserve les temps propres du fichier source, et WeCut déplace chaque mot sur la timeline de sortie à travers chaque clip découpé de ce fichier (vitesse incluse). Sans src, les temps doivent déjà être des temps de sortie.
  • style : classic, yellow, box-black, box-white, bold, comic, shadow (une phrase à la fois), karaoke, karaoke-green (le mot parlé s'illumine), pop (un grand mot à la fois).

Si vous avez besoin d'une transcription : wecut doctor signale local_transcription: true lorsque ce FFmpeg possède le filtre Whisper. Sinon, utilisez le système de reconnaissance vocale que vous avez déjà et enregistrez ses timings de mots au format JSON.

Modèles : copier ce qui fonctionne

Une recette est la forme d'un montage sans son contenu : sections (par exemple un crochet de 5 s avec une carte de titre, puis le discours), emplacements de texte, style de légende et de musique, effets. L'appliquer à de nouveaux clips, mots et musique donne un projet.

  1. Analysez une vidéo qui a fonctionné : wecut analyze media/viral.mp4 renvoie les plans et le rythme, les coupes dans les 3 premières secondes, les flashs, le tempo, les pauses, un outro silencieux pour la plateforme (laissez-le de côté), et sheet : une image par plan dans une seule image. Regardez la feuille pour la carte de titre, le style de texte, le cadrage et le style de légende.
  2. Choisissez ou écrivez une recette : wecut recipe list (intégrées : news-headline, news-headline-blur, quote-hook, vlog-phrases, podcast-punch, photo-slideshow, plus les recipes/*.json de l'espace de travail). wecut recipe show <nom> liste ses rôles et emplacements de texte. Pour en écrire une, suivez wecut recipe schema.
  3. Appliquez-la :
{
  "recipe": "news-headline",
  "clips": [
    { "src": "media/broll.mp4", "role": "hook" },
    { "src": "media/talk.mp4", "from": 120, "to": 165 }
  ],
  "texts": { "label": { "text": "Nom de la page" }, "headline": { "text": "L'affirmation en une ligne", "emphasis": ["affirmation"] } },
  "transcript": "media/talk.words.json",
  "write": "projects/clip-01.json"
}

wecut recipe apply --input request.json (ou --input - avec le JSON sur l'entrée standard) vérifie tout et enregistre le projet ; puis preview et render-le. Les clips sans rôle alimentent body ; une section sans clip emprunte le début des images de la suivante.

  1. Sauvegardez la vôtre : wecut recipe from-project projects/clip-01.json --name mon-style --write recipes/mon-style.json conserve les sections, transitions, emplacements de texte, style de légende, effets et la musique comme piste par défaut.

Musique : une recette peut porter sa propre piste (music.src), utilisée par défaut comme la chanson dans un modèle CapCut. Passez "music": "media/song.mp3" (ou une vidéo, dont le son est utilisé) pour la remplacer, ou "none". Une chanson tirée de la vidéo de quelqu'un d'autre peut être coupée par la plateforme après la publication ; ajouter un son tendance dans l'application lors de la publication évite cela.

Copiez la structure, pas le contenu : les images, les mots exacts et la musique des autres créateurs leur appartiennent.

Créer plusieurs clips à partir d'une longue vidéo

  1. wecut probe la source et obtenez une transcription avec les timings des mots.
  2. Lisez la transcription et choisissez les moments (vous décidez ; WeCut ne juge pas le contenu).
  3. Écrivez un projet par clip, chacun avec captions.src pointant vers la source pour qu'une seule transcription serve chaque clip.
  4. wecut preview l'un d'eux, ajustez focus, puis wecut render chacun.

Dépannage

  • E_RANGE : to dépasse la fin du fichier. Utilisez wecut probe pour la durée réelle.
  • E_PATH : le chemin est en dehors de l'espace de travail ou est une URL.
  • E_MEDIA : le fichier n'est pas une vidéo, image ou fichier audio lisible, ou le mauvais type pour ce champ (musique dans clips, vidéo dans overlays).
  • E_DEPENDENCY : FFmpeg manquant, plus ancien que la version 6, ou construit sans libass. Exécutez wecut doctor.
  • Rendu trop lent : --preset draft, un output.res plus bas, ou moins de clips par projet. render_seconds et realtime_factor dans le résultat vous indiquent la vitesse sur cette machine.
  • Pour voir exactement ce que FFmpeg exécutera : wecut render project.json --dry-run.

Skills associés