ffmpeg-webCLI

Interface sombre : zone de dépôt de la vidéo et curseur de découpe à gauche, grille de 29 opérations à droite.

FFmpeg en WebAssembly, la vidéo reste sur le poste

ffmpeg-webCLI est un éditeur vidéo qui exécute FFmpeg dans un onglet du navigateur avec ffmpeg.wasm, la compilation de FFmpeg en WebAssembly. Un Web Worker traite le fichier en mémoire et le résultat se télécharge : aucun serveur ne reçoit la vidéo. Le nom trompe un peu, car l'essentiel passe par un panneau de plus de 30 opérations, et la ligne de commande n'est qu'un mode parmi d'autres.

Sous-titres Whisper et filtres encodés en une passe

  • Sous-titres générés sur place : Whisper tourne dans la page via Transformers.js. La transcription sort en SRT modifiable, puis devient une piste activable (MP4 ou MKV) ou s'incruste dans l'image. Le modèle se choisit entre Tiny (39 Mo), Base (140 Mo) et Small (466 Mo), puis reste en cache dans IndexedDB.
  • Mode Stack : les filtres compatibles (crop, rotation, fondu, débruitage, vitesse, volume...) fusionnent en une seule chaîne -vf/-af, et la vidéo n'est encodée qu'une fois. La commande complète s'affiche avant l'exécution.
  • File de lots : une opération ou une pile entière s'applique à chaque fichier, avec aperçu et archive ZIP. 25 opérations acceptent le lot ; crop, reverse et le mode brut, entre autres, en sont exclus.
  • Mode Raw FFmpeg : les arguments saisis s'insèrent entre -i input et le fichier de sortie, avec un second fichier d'entrée possible et 13 recettes (loudnorm, deshake, remux sans perte...).
  • PWA hors ligne : une fois le cœur ffmpeg de 31 Mo en cache, le traitement se passe de réseau.

Vidéos sensibles et clips au format 9:16

  • Traiter une vidéo médicale, un enregistrement juridique ou une source journalistique, cas cités par l'article du projet.
  • Préparer un clip pour TikTok, Reels ou Shorts : bandes au format 9:16 et sous-titres incrustés.
  • Effacer les coordonnées GPS et le modèle d'appareil d'un fichier avant de le partager.
  • Faire travailler une classe sur les appareils des élèves, sans attendre une installation par le service informatique.

Plafond de 2 Go et encodage sans accélération matérielle

L'encodage est logiciel, donc lent. Les notes de la v2.0.0 le disent : pas d'accélération matérielle, un outil pensé pour des retouches ponctuelles et la vidéo courte, pas pour le transcodage en masse. Le benchmark publié dans le dépôt chiffre l'écart : compresser en H.264 un clip d'une minute prend 325 s dans Chrome, contre 13 s pour ffmpeg natif avec la même commande, et l'export WebM VP9 du même clip s'arrête sur une erreur mémoire. Le paper.md du dépôt, écrit en juin, annonçait un ralentissement de 2 à 4 fois.

La mémoire plafonne à 2 Go, la limite du tas WebAssembly. Reverse charge toute la vidéo en mémoire et reste interdit en lot pour cette raison.

Le projet se place face aux convertisseurs en ligne. Le README nomme CloudConvert, Kapwing, Ezgif et Otter, qui reçoivent tous le fichier. Il présente l'outil comme l'implémentation de référence d'une architecture « Web-CLI », décrite dans un article de Tejaswi Gowda (Arizona State University). Pour un convertisseur installé sur son propre serveur, ConvertX, convertisseur de fichiers auto-hébergé prend l'autre voie.

Servir l'application soi-même demande deux en-têtes. Selon le README, ffmpeg.wasm s'appuie sur SharedArrayBuffer, ce qui impose Cross-Origin-Opener-Policy: same-origin et Cross-Origin-Embedder-Policy: require-corp. Le dépôt fournit server.js pour les poser. Le code est sous GPL-3.0 : distribuer une version modifiée oblige à en publier les sources.

Dernière version le 23 juin, dernier ajout de code en septembre. La v1.0 sort le 9 juin 2026, la v2.0.0 le 23 juin, et aucune autre version n'a suivi. Le dernier ajout de code, le 5 septembre, permet de décrire une opération dans l'URL (#cmd=) ; son schéma JSON la limite à cinq opérations et la qualifie de MVP. Le commit du 20 octobre 2026 déplace l'application vers le domaine ffmpeg.webcli.app. Le dépôt compte quatre tickets et pull requests, tous fermés.