2 points par GN⁺ 2025-12-28 | 1 commentaires | Partager sur WhatsApp
  • Outil CLI basé sur Node.js conçu pour exécuter des commandes ffmpeg en anglais courant, permettant d’éditer des vidéos avec des phrases simples sans options complexes
  • Si l’on saisit une commande sous forme de phrase comme ff convert video.mp4 to gif, elle est automatiquement convertie en commande ffmpeg puis exécutée
  • Prend en charge la conversion de format, la compression, le découpage, l’extraction audio, le redimensionnement, le réglage de vitesse, la rotation, la fusion, etc.
  • Avec l’option --dry-run, il est possible de prévisualiser la commande ffmpeg sans l’exécuter réellement
  • Fonctionne rapidement hors ligne, sans connexion Internet ni IA, et peut être utilisé avec Node.js 16 ou plus dans un environnement où ffmpeg est installé

Présentation

  • ezff est un wrapper en anglais courant conçu pour rendre ffmpeg plus facile à utiliser
    • L’utilisateur peut saisir des commandes en langage naturel sans avoir à mémoriser les drapeaux complexes de ffmpeg ni son manuel
    • Exemple : ff convert video.mp4 to gif → génère automatiquement une commande ffmpeg et l’exécute
  • Node.js 16 ou plus et ffmpeg installé sont nécessaires, et l’installation peut se faire via npm avec npm install -g ezff

Fonctionnalités principales

  • Mode d’invite interactif
    • Si l’on saisit simplement la commande ff, l’outil demande successivement le chemin du fichier, le type d’opération, le format de sortie, etc.
    • Exemple :
      ? File path: video.mp4  
      ? What do you want to do? › Convert format  
      ? Convert to: › GIF  
      
    • Une fois les choix effectués, la commande ffmpeg est générée et exécutée automatiquement
  • Mode de saisie directe des commandes
    • L’utilisateur peut saisir l’opération souhaitée sur une seule ligne
    • Exemples :
      • ff convert video.mp4 to mp3
      • ff compress video.mp4 to 10mb
      • ff trim video.mp4 from 0:30 to 1:00
      • ff resize video.mp4 to 1280x720
      • ff speed up video.mp4 by 2x

Liste des opérations prises en charge

  • Conversion (Convert) : changement de format (mp4 → gif, mp4 → mp3)
  • Compression (Compress) : définition d’une limite de taille de fichier (10mb, etc.)
  • Découpage (Trim) : extraction d’un segment précis (from 0:30 to 1:00)
  • Extraction audio (Extract audio) : séparation de l’audio seul depuis une vidéo
  • Redimensionnement (Resize/Scale) : changement de résolution (1280x720, 720p)
  • Réglage de vitesse (Speed up / Slow down) : modification de la vitesse de lecture (2x)
  • Inversion (Reverse), Muet (Mute), Rotation (Rotate), Retournement (Flip), Extraction de miniature (Thumbnail), Fusion (Merge), Niveaux de gris (Grayscale), Réduction du bruit (Denoise), Stabilisation vidéo (Stabilize), etc.

Prévisualisation de commande et sortie

  • Avec l’option --dry-run, il est possible d’afficher uniquement la commande ffmpeg sans l’exécuter
    • Exemple :
      ff convert video.mp4 to gif --dry-run  
      → ffmpeg -i video.mp4 -vf fps=15,scale=480:-1:flags=lanczos -loop 0 -y video_output.gif
      
  • Le fichier résultant est enregistré dans le même dossier que l’original avec le suffixe _output (video_output.gif)

Fonctionnement interne

  • Le Parser analyse la phrase saisie pour en extraire l’action, le fichier et les options (taille, etc.)
  • Le Builder mappe ensuite ces informations vers une commande ffmpeg
  • ffmpeg exécute la commande réelle
  • L’ensemble du processus fonctionne hors ligne, sur la base d’un appariement de motifs, sans IA ni appel d’API

Installation et environnement

  • Node.js 16 ou plus requis
  • ffmpeg doit être installé dans le PATH du système
    • macOS: brew install ffmpeg
    • Ubuntu/Debian: sudo apt install ffmpeg
    • Windows: choco install ffmpeg
  • Publié sous licence MIT, avec les Pull Requests bienvenues

Résumé

  • ezff est un outil CLI simple qui supprime la difficulté d’apprentissage des commandes ffmpeg
  • Il permet d’automatiser le montage vidéo avec une simple saisie en anglais courant
  • Avec son fonctionnement hors ligne, sa rapidité d’exécution et ses nombreuses fonctionnalités, c’est un outil utile aussi bien pour les développeurs que pour les débutants en montage vidéo

1 commentaires

 
GN⁺ 2025-12-28
Commentaires Hacker News
  • C’est étonnant de voir à quel point les gens essaient d’éviter de mémoriser les bases de ffmpeg
    En réalité, ffmpeg n’est pas si difficile, et le manuel explique bien les concepts essentiels
    Bien sûr, il y a des pièges, comme le fait que la configuration par défaut provoque un réencodage ou ne conserve qu’un seul flux, mais il suffit généralement de se souvenir de -c copy
    Cacher ces « pièges » peut au contraire créer des problèmes plus graves. Par exemple, « ff convert video.mkv to mp4 » effectue un réencodage complet alors qu’un simple remux aurait suffi
    « ffmpeg extract audio from video.mp4 » réencode aussi systématiquement en mp3, ce qui dégrade la qualité
    Le multimédia est par nature un domaine complexe, et masquer cette complexité risque d’enseigner de mauvais concepts aux utilisateurs
    Je pense qu’au lieu d’un wrapper simplifié, il vaut mieux former les utilisateurs avec une bonne antisèche

    • Il faut faire attention avec l’expression « ce n’est pas si difficile ». Ce qui est difficile varie selon les gens
      Ça me rappelle les débats du type « pourquoi les pauvres ne trouvent-ils pas simplement un bon emploi ? »
      Cela dit, je comprends que ton intention soit de motiver
    • Moi aussi, je n’utilise ffmpeg qu’environ une fois par an, donc il me faudra sans doute 350 ans pour mémoriser toute la syntaxe
    • C’est peut-être facile pour ceux qui l’utilisent souvent, mais pour quelqu’un comme moi qui ne s’en sert qu’une fois tous les un ou deux mois, ça paraît difficile
      Ce que je veux, c’est un script interactif : il demande ce que je veux faire, génère la commande adaptée et explique le rôle de chaque argument
    • Dire « ce n’est pas si difficile » ressemble à une blague. ffmpeg a des milliers d’options
      Exemple de liste d’options
    • J’ai tendance à dire moi aussi que le packaging Python « n’est pas si difficile », mais les commandes ffmpeg me donnent presque l’impression d’un langage à part entière
      Les problèmes que tu mentionnes pourraient probablement être traités via des rapports de bugs ou des propositions de fonctionnalités
      Le fait de masquer les réglages de qualité peut aussi partir de l’idée que l’utilisateur n’a pas besoin de les connaître
      Éviter le réencodage lors d’un simple changement de conteneur pourrait se gérer avec une table de correspondance
      J’ai moi-même ressenti l’absence de ce type de mappage récemment en extrayant de l’audio et en ajoutant des miniatures
  • Quand je convertis une vidéo en gif, j’utilise toujours le filtre palettegen
    Avec une commande d’exemple, je me réfère aussi à ce billet de blog d’il y a 10 ans

    • De nos jours, le mot « gif » est souvent employé à tort. En pratique, mp4 est plus efficace
      Sur un site web, remplacer un gif animé par un mp4 donne un fichier plus léger, plus fluide et avec des couleurs plus fidèles
    • Intégrer pngquant comme filtre ffmpeg permettrait peut-être de produire une meilleure palette
      Dans ce cas, ffmpeg pourrait atteindre le niveau de gifski
    • Je me demande si ffmpeg a ajouté la prise en charge d’une palette par image
      À l’époque, c’était ce qui permettait à gifski d’obtenir une meilleure qualité à taille de fichier égale
    • gifski est une bonne alternative grâce à son excellente gestion des palettes
    • Dommage que ce réglage ne soit pas activé par défaut
  • J’aime bien cette approche. J’aimerais qu’il existe un OS qui rende toute la CLI Linux plus humaine
    Au lieu de commandes disparates comme tar ou dd, j’imagine une CLI cohérente basée sur le langage naturel
    Par exemple :

    zip my-folder into my-zip.tar with compression level 9  
    write my-iso ./zip.zip onto external hard drive  
    git delete commit 1a4db4c  
    convert ./video.mp4 and ./audio.mp3 into ./out.mp4  
    merge ./video.mp4 and ./audio.mp3 to ./out.mp4 without re-encoding
    

    Ce serait bien d’avoir l’autocomplétion et la prise en charge de différentes formulations. Pas besoin d’aller jusqu’aux LLM

    • Mais le problème de ce type de commandes en langage naturel, c’est l’ambiguïté
      On se retrouve avec des situations du genre « pas ce disque dur-là, l’autre ! » ou « supprimer, d’accord, mais le supprimer complètement ? »
    • Si tu n’aimes pas cette approche, autant utiliser Windows ou macOS.
      Moi, j’aime que Linux conserve ses caractéristiques techniques telles quelles
    • Il existe un script helpme qui implémente réellement cette idée
      Par exemple :
      helpme ffmpeg assemble all the .jpg files into an .mp4 timelapse video at 8fps
      helpme zip my-folder into my-zip.tar with compression level 9
      helpme git delete commit 1a4db4c
      
      À l’origine, c’était un wrapper pour ffmpeg, mais il a évolué en assistant CLI généraliste
  • La seule utilité des chatbots IA, c’est d’écrire des commandes ffmpeg
    On affine la commande nécessaire par conversation, puis on sauvegarde les usages fréquents dans des fichiers .command

    • Les LLM représentent un progrès impressionnant pour l’analyse du langage naturel
      Le problème, c’est d’avoir cru qu’on pouvait fabriquer de « l’intelligence » avec Wikipédia et quelques jeux de données
    • Je suis pessimiste, mais les LLM sont utiles pour transformer une description textuelle de l’utilisateur en commande ou en SQL
      À condition d’avoir une interface de type tuteur qui montre le résultat, laisse l’utilisateur vérifier et apprendre
    • Les anciennes IA géraient mal les effets de rebond du type « lire la vidéo de 0:00 à 0:03 puis la relire à l’envers en boucle »
    • Malgré tout, ce type d’interface ressemble à un exemple d’inefficacité qui gaspille des ressources GPU
      Un wrapper simple pour ffmpeg suffit à couvrir 90 % des besoins
  • Impossible d’accéder au dépôt GitHub ezff

    • Moi aussi j’ai une erreur 404. On dirait que le lien en bas de la page npm pose problème
    • Cela dit, on peut quand même le consulter via l’onglet code de npm
  • Il vaudrait mieux utiliser un LLM pour proposer les options, puis les ajuster
    En revanche, à cause d’un conflit de nom de package, il vaudrait mieux choisir un autre nom
    « ezff » renvoie à une bibliothèque Python, et « ez-ffmpeg » à une bibliothèque Rust

  • Les LLM constituent une excellente interface pour ffmpeg
    Il faut parfois 2 ou 3 ajustements pour des problèmes comme la synchro des sous-titres, mais ils permettent de générer rapidement des commandes complexes

  • Je me demande ce que signifie l’explication « 20 motifs courants couvrent 90 % des cas »
    J’aimerais savoir si ça vient de l’IA ou si c’est l’auteur qui le dit directement

  • npm ? Vu les incidents de sécurité qui éclatent toutes les semaines, je n’ai pas envie de faire entrer ce chaos dans mon environnement de développement

  • Le changement de paradigme qu’apportera l’IA, au final, ce sera de parler à l’ordinateur en langage naturel
    Des commandes comme « fais-moi un gif de la scène de cuisine dans ce film » deviendront une réalité
    Le paradigme actuel basé sur les commandes est voué à disparaître bientôt

    • Cela dit, la valeur d’outils cohérents et éprouvés reste bien réelle
      Il n’y a pas lieu de dénigrer ce type d’initiative