Repository navigation
CLI
Branche : cli-converter
Outil en ligne de commande, basé sur sharp (images), potrace (vectorisation SVG),
heic-convert (décodage HEIC/HEIF), SheetJS (données) et ffmpeg-static (audio/vidéo,
binaire statique installé automatiquement — aucune install système requise).
Pas publié sur npm — installation depuis le dépôt :
git clone --branch cli-converter https://github.com/BloopStudio/Anyform.git anyform-cli
cd anyform-cli
npm install
npm link # rend la commande `anyform` disponible globalement (optionnel)anyform image.svg -t png
anyform *.png -t webp -o ./out --quality 80
anyform photo.jpg -t svg
anyform photo.heic -t png
anyform data.csv -t xlsx
anyform musique.wav -t mp3
anyform clip.mov -t mp4
anyform photo.jpg -c -l strong
anyform clip.mp4 --compress --level light -o ./out
anyform sous-titres.srt -t vtt
anyform info photo.jpg
anyform diff avant.png apres.pngSans npm link, remplacer anyform par node bin/anyform.js.
Le type de fichier (image / données / audio / vidéo / sous-titres) est détecté automatiquement à partir de l'extension.
| Option | Description |
|---|---|
-t, --to <format> |
Format de sortie (incompatible avec -c) |
-c, --compress |
Compresse sans changer de format, au lieu de convertir (incompatible avec -t) |
-l, --level <level> |
Niveau de compression : light, medium (défaut), strong
|
-o, --out-dir <dir> |
Dossier de sortie (par défaut : à côté du fichier source) |
-q, --quality <number> |
Qualité pour jpg/webp/avif (conversion) |
-d, --density <number> |
DPI utilisé pour rasteriser un SVG en entrée |
Il faut préciser exactement l'une des deux options -t ou -c.
Comme sur le web et l'app de bureau, -c/--compress réduit la taille d'un fichier sans
changer son format, avec trois niveaux (light/medium/strong). Le fichier compressé
est écrit avec le suffixe -compresse.
-
Images — PNG, JPG, WebP, GIF via
sharp: quality réduite pour JPG/WebP, redimensionnement pour PNG/GIF. Contrairement au web/à l'app de bureau (Canvas, qui ne sait pas encoder GIF dans Chromium),sharpsait ré-encoder du GIF côté CLI — mais ne sait pas encoder de BMP, qui est donc exclu du Compresseur ici aussi. HEIC/HEIF est décodé puis compressé en PNG. -
Audio — WAV, MP3, OGG, FLAC, AAC, M4A, WMA, Opus via
ffmpeg-static: bitrate réduit (192/128/96 kbps) pour les formats compressés,-compression_level(5/8/12) pour FLAC (sans perte), fréquence d'échantillonnage réduite (44100/32000/22050 Hz) pour WAV (PCM brut, aucune notion de bitrate). -
Vidéo — MP4, WebM, MOV, MKV, AVI, FLV, OGV via
ffmpeg-static, CRF/qscale réduit sur le même codec/conteneur d'origine, audio non retouché (-c:a copy).
Pas d'historique local ni de notifications côté CLI (contrairement au web/à l'app de bureau/à l'extension) : un outil en ligne de commande n'a pas d'état persistant entre deux invocations, et n'a pas de fenêtre à mettre en arrière-plan.
Deux sous-commandes séparées (pas des options de la commande principale — info n'a pas de
format de sortie, diff a besoin d'exactement deux fichiers) :
-
anyform info <file> [--json]— affiche les propriétés d'un fichier sans le modifier : dimensions/ratio (images), durée/résolution/débit estimé (audio/vidéo, viaffmpeg -iet parsing de sa sortie standard — pas de binaireffprobeséparé), lignes/ colonnes/en-têtes (données), nombre de sous-titres et plage couverte (sous-titres).--jsonpour une sortie machine-readable plutôt que du texte aligné. -
anyform diff <fileA> <fileB> [--out <path>]— compare deux fichiers du même type. Images : diff pixel par pixel viasharp(raw pixels), écrite en PNG (<fileA>-diff.pngpar défaut). Données/sous-titres : diff ligne à ligne (LCS), affichée sur stdout ou écrite dans--out, repli sur empreinte SHA-256 au-delà de 3000 lignes. Reste (audio/ vidéo/xlsx) : empreinte SHA-256 (modulecryptode Node) uniquement.⚠️ Pas de forme courte-opour--out: Commander résout les options courtes au niveau du programme entier plutôt que par sous-commande, et-oest déjà pris par--out-dirsur la commande racine — un-osurdiffserait silencieusement absorbé par la mauvaise option.
- Images — entrée : SVG, PNG, JPG, WebP, GIF, BMP, TIFF, AVIF, ICO, HEIC/HEIF. Sortie : PNG, JPG, WebP, TIFF, GIF, AVIF, ICO, SVG (vectorisation via potrace).
- Données : CSV ⇄ JSON ⇄ XLSX.
- Audio : WAV, MP3, OGG, FLAC, AAC, M4A, WMA, Opus.
- Vidéo : MP4, WebM, MOV, AVI, MKV, FLV, OGV.
- Sous-titres : SRT ⇄ VTT ⇄ ASS, en pur JavaScript (aucune dépendance). Le style ASS (police, couleur, position) n'est pas préservé — non représentable en SRT/VTT.
Le support HEIC/HEIF a été ajouté après coup pour rattraper le web et l'app de bureau
(qui l'avaient depuis le début via heic2any) — heic-convert utilise la même approche
(libheif compilé en WebAssembly), donc pas de dépendance système ni d'étape de
compilation native à l'installation.
-
bin/anyform.js— interface en ligne de commande (détection de type, routage, sous-commandesinfo/diff) -
lib/convert.js— conversion et compression d'images (sharp + potrace + heic-convert) -
lib/data.js— conversion de données (SheetJS) -
lib/media.js— conversion et compression audio/vidéo (ffmpeg-static) -
lib/subtitles.js— conversion de sous-titres SRT/VTT/ASS (texte pur) -
lib/inspect.js— lecture des propriétés d'un fichier, sans le modifier -
lib/compare.js— diff entre deux fichiers (image, texte ligne à ligne, ou empreinte)
Le patch de package.json est incrémenté automatiquement à chaque push sur
cli-converter (workflow bump-version.yml).
Anyform — développé par BloopStudio · Essayer en ligne · Dépôt · Confidentialité