Communitygithub.com

montage-vidéo

L'utilisateur l'utilise pour couper des vidéos, assembler des clips, ajouter des vignettes, extraire des images/ pistes audio et exporter au format mp4 (hôte Android weizhi:video). Non applicable sur desktop sans MediaCodec.

Qu'est-ce que montage-vidéo ?

Cette compétence permet la manipulation avancée de vidéos sur Android via l'API `weizhi:video`. Elle prend en charge l'extraction d'images, l'extraction de pistes audio, l'exportation au format MP4, ainsi que l'assemblage de clips avec transitions (fondu enchaîné) et l'ajout de vignettes. Deux API d'exportation sont proposées : une API v1 simple pour le remux sans réencodage (couper/coller) et une API v2 pour les timelines multicouches incluant images, vidéos, pistes audio et transitions. La compétence expose des fonctions comme `probe`, `exportVideo`, `extractFrame` et `extractFrames`. Elle nécessite l'appel préalable à `find_caps` pour récupérer les signatures exactes des API et exemples d'appel, puis l'exécution de scripts JavaScript via `run_js` dans des fichiers `jobs/*.js`. L'utilisateur doit respecter scrupuleusement les contraintes de chevauchement temporel, l'absence de `transition` sur des clips superposés, et ne pas mélanger transitions et opacité keyframe. La compétence est conçue pour fonctionner de manière fiable sur Android et n'est pas disponible sur desktop sans MediaCodec.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/fengshihao/agent1-skills/tree/main/skills-src/video-edit

Demander à votre IA préférée

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

Aperçu

Depuis le README du skill

Documentation

Montage vidéo (weizhi:video)

Périmètre

FaitNe fait pas
probe, extraction d'images/piste audio, exportVideoDécoder un MP4 entier avec webview_exec
v1 remux : rognage début/fin, assemblage sans fonduPrétendre supporter la conversion desktop (pas de package desktop)

Protocole de démarrage

  1. D'abord load_skill (video-edit) pour lire ce document.
  2. Avant d'écrire exportVideo ou une timeline complexe : find_caps une fois (query contenant exportVideo weizhi:video ou la capacité spécifique), suivre l'exemple d'appel retourné, ne pas deviner les noms de champs.
  3. Placer le script dans jobs/*.js, l'exécuter avec run_js via file ; on peut augmenter timeout_ms (limite 600000).
  4. En cas d'erreur d'API dans le script (ex. bad argument, unsupported) : refaire un find_caps pour vérifier les signatures puis modifier le script.

Choix de l'API

TâcheAPI
Rogner un seul segment, assembler plusieurs segments bout à bout sans réencodagev1 exportVideo({ clips: [{ path, startMs?, endMs? }], output })
Multicouche, vignette, Ken Burns, fondu enchaînév2 exportVideo({ width, height, tracks, output })

Timeline v2 (points clés)

  • Vignette / image : piste type: "image", durationMs obligatoire.
  • Segment mp4 : piste type: "video", inMs / outMs ; ne pas mettre d'image dans une piste video.
  • Fondu enchaîné (piste image uniquement) : le clip suivant écrit transition: { type: "crossfade", durationMs: D }, et
    startMs_suivant = startMs_précédent + durationMs_précédent - D (chevauchenment exact de D millisecondes). Il n'y a pas de champ crossfadeMs.
  • Sur une même piste, les clips sans transition déclarée ne peuvent pas se chevaucher ; une erreur overlapping clips indique de vérifier la formule ci-dessus et la présence de transition.
  • transition et les keyframes d'opacité écrites dans le clip ne peuvent pas être utilisés simultanément.
  • Piste audio : une piste séparée type: "audio".

Exemple (deux images avec fondu + vidéo) :

import { exportVideo } from "weizhi:video";

const D = 300;
await exportVideo({
  width: 720,
  height: 1280,
  tracks: [
    {
      type: "image",
      clips: [
        { src: "a.jpg", startMs: 0, durationMs: 1000 },
        {
          src: "b.jpg",
          startMs: 1000 - D,
          durationMs: 1000,
          transition: { type: "crossfade", durationMs: D },
        },
      ],
    },
    {
      type: "video",
      clips: [{ src: "clip.mp4", startMs: 1700, inMs: 0, outMs: 5000 }],
    },
  ],
  output: "out/final.mp4",
});

Flux recommandé

  1. probe la durée et la résolution de la vidéo source.
  2. Si besoin d'une image de couverture : extractFrame / extractFrames (voir find_caps).
  3. Pour les montages complexes : on peut d'abord exporter avec v1 des intermédiaires part1.mp4, part2.mp4, puis les assembler avec v1 ou v2 ; éviter d'empiler des clips sans transition déclarée sur une même piste.
  4. Musique : piste audio séparée, outMs aligné sur la durée totale de l'image.

Orchestration

  • Un seul script jobs/render.js effectue en série la détection, l'export et la vérification (on peut probe à nouveau le résultat).
  • Ne pas utiliser plusieurs outils externes à la place d'un seul script complet.

Communication avec l'utilisateur

Indiquer le nom du fichier final et sa durée ; utiliser un lien [Fichier final](out/xxx.mp4). Éviter le jargon technique.

Skills associés