A CLI audio tag-elés siralmas állapota

Nemrég szembesültem saját taggelő shell script írásakor, hogy az audiotaggelés CLI fronton milyen siralmas állapotban van.

Vannak jó taggelő programok, de azok GUI-sok (Deadbeef, Kid3, Tagger, Puddletag, stb.), vagy Windows/Mac only-k (Tag). Ott van persze CLI-ben a Mutagen, beet, de azok nagy Python bloatok. Ezen túl csak kisebb elszórt CLI utility-k vannak, amik csak 1-2 formátumot vagy 1 tagtípust támogatnak, pl. az vorbiscomment csak Vorbis-t, a metaflac csak FLAC fájlokat, az opustag csak Opus-t, az id3v2 csak IDv2 tageket (de legalább nem csak mp3-nál, hanem aac-nél is), wvtag csak WavPack-et. Megoldottam egyelőre, amit lehet ezekkel, hívogatja őket a script, ami a mappa- és fájlnevekből veszi a tag-eket.

Musepack-hez és Monkey Audio-hoz nincs is CLI tageditor, APEv1-v2 tagekhez sincs általános utility (csak libek, pl. APE tag, vagy ape, amik önmagukban nem használhatók, hanem az embernek magának kell leprogramozni velük a dolgokat). Nagyon szomorú ez, mert a világ legegyszerűbb dolga lenne ez, a tag-elés az a műfaj, ami nagyon jól működhetne CLI-ból. Tényleg nem értem, mert az enkóderek is mind CLI-sek, akkor a tagszerkesztés miért van ilyen mostohán kezelve, ha CLI-ről van szó. Szégyen ez így már 2024-ben.

Még mielőtt azzal jönne valaki, hogy a CLI elavult, annak csak mondom, hogy egy csomó minden azon alapul még. Nem csak az összes encoder, transcoder, de az összes compiler, interpreter, szűrő, dokumentumkonvertáló, meg a CLI megoldások jól automatizálhatók, és elfutnak olyan környezetben is, ahol nincs GUI, pl. headless szerveren. Csak a tag-ek vannak hanyagolva. Persze attól még, hogy valami CLI, nem kötelező abból használni, lehet rá GUI frontendet húzni, meg GUI-s programból hívogatni, de aki CLI-ben, terminálban használná, attól ne vegyék már el a lehetőséget, meg ne legyen bloatokra szorítva.

Elvileg még az FFmpeg lehet valamiféle kerülőút, mert az is tud szerkeszteni sokféle tag-et, de azzal is nagyon bonyolultan van megoldva, előbb ki kell másoltatni vele az eredeti fájlból a sávokat, azokat áttenni egy új fájlba/konténerbe, és ahhoz tudja csak a címkéket hozzáadni. Nem egészen váltja ki azt, amit egy rendes CLI tagger tud, hogy helyben szerkeszti az eredeti fájlt, ami sokkal kevésbé erőforrás-igényes.

Hozzászólások

Nem a CLI a gond, hanem hogy ezerféle konténerformátumot buzgerálnál. Persze, hogy bloat kell hozzá.

Ennek a világ legegyszerűbb dolgának kéne legyen. Eddig nem voltam tudatában, hogy ez egy milyen kaotikus és szerteágazó terület. Bőven elég lenne, ha minden audioformátum használna vagy IDv2 vagy APEv2 tageket és ezeket egy általános CLI tool-lal lehetne szerkeszteni. Ezért nem jó, ha mindenki feltalálja a kereket, erről szól a Unix-filozófia is, jelen esetben, hogy a tag-elést bízzuk a meglévő formátumokra, tageditor programokra, és ne legyen minden újra feltalálva saját szájíz szerint, meg 1000 féle implementáció létezzen, amit nem kis munka támogatni.

A másik megoldás az lenne, ha a CLI encoderbe beleraknák úgy a tagelési funkciókat, hogy a meglévő fájl átkódolása nélkül is hozzá tudjanak adni tag-eket. A jelenlegiek ezt csak úgy tudják, hogy újratömörítik az adott fájlt feleslegesen.

A harmadik megoldás, hogy kifejlesztenek egy meta tag formátumot, ami külön fájlban van, eredeti_fájlnév.akármi.tag néven, és ebben egyfajta INI-hez/TOML-hez hasonló módon lennének a címke=érték párok megadva, és ezt támogatná az összes lejátszó alkalmazás és kovertáló. Ezt a tag fájlt lehetne egy egyszerű plain text editorral szerkeszteni.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Meglehet, de ez nekem fontos. Szórom ki a GUI-s programokat. Már csak kevés maradt talpon, a tag-szerkesztők közöttük vannak, ezért írtam rá magamnak CLI megoldást, ami megy terminálból. Gyorsabb, kevesebb függőség. Amire viszont nem gondoltam, hogy ez egy ilyen kaotikus terület, ennyire szegényes megoldási választékkal, és ilyen nehéz, szerteágazó lesz megcsinálni, amit akartam.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Olvasgassad az abcde forrását, az shell-scriptből old meg grabelést, konverziót, tagelést, stb. De igen, kismillió parancssori eszközt hívogat ezekhez a funkciókhoz. Mondjuk nekem nem fáj, flac és mp3 nekem bőven elég.

Végül is én is csak Vorbis (általános lossy kódolás), Opus (csak a 48 kHz-et és azok többszörösét használó anyagok lossy kódolására), FLAC (ha lossless kell) hármast használok. Esetleg, ha valami legacy eszközre vagy régi programnak kell fallback formátumnak, akkor mp3-at (legújabb lame encoder-rel előállítva), esetleg mp2-t (twolame segítségével, ez főleg régi MPEG anyagokhoz lehet szükséges nagyon-nagyon ritkán). Ezeket meg máris támogatja a saját scriptem, a felsorolt CLI tool-okat hívogatva. Sőt, a tag-ezős szkriptem még az aac-t és a WavPack-et is támogatja, pedig azt nem nagyon használom. Csak kicsit csalódás, hogy ez a műfaj ilyen ramaty állapotú, pl. a Musepack és APE tagelését nem is tudtam megoldani. Jó, tényleg nem használom ez utóbbiakat, de ha már nekiálltam ezt lefejleszteni, akkor úgy indultam neki, hogy támogasson, amit csak lehet, fene tudja, hogy a jövőben mire lesz szükség. 1-1 extra formátum támogatása már csak 1-2 plusz case *.extension) bla-bla --paraméterek;; sor a kész szkriptben, próbáltam emiatt teljességre törekedni. Lehet én vagyok feleslegesen maximalista.

abcde-t néztem én is, nem lenne rossz, de nekem úgy szükségtelen, hogy a grabbelésre (cdrtools, cdda2wav segítségével), cue szerinti szeletelésre (cuetools, shntools), audiokonverzióra (oggenc, opusenc, flac, lame, ffmpeg segítségével), audiogenerálásra (sox) máris van saját szkriptem, meg a tag-ezés nagyja is meg van oldva, így csak duplikálna sok olyan tudást, amit már megoldottam. Inkább csak elvi síkon zavar, hogy ez egy ilyen elcseszett műfaj, hogy mindent csak GUI-ban hajlandóak megcsinálni, pedig az audio, meg plain text tag-ek szerkesztése pont az a műfaj, ami rettenet fekszik a CLI/TUI megoldásoknak is, mivel nem kell hozzá semmilyen szinten grafika. Tisztán bináris és plain text adatok manipulációja.

Le kéne tényleg szokni erről a soydeveknek, hogy mindent csak GUI-ban, meg webesen, meg konténerbe szánva, meg mindent JS-ben, Python-ban, Rust-ban akarnak megírni. Ez egy felesleges mánia, a komplexitás szükségtelen erőltetése. Értem, hogy a mainstreamben főleg erre van igény, de elég sok ember van a mainstreamen kívül is, pl. nem csak mi itt a HUP-on, de pl. a reddit, stb. is tele van velük.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Kösz szépen, nem is értem, hogy ezt miért nem találtam meg, pedig sokat keresőztem. Már fent van, beépítettem a támogatást a szkriptembe. Működik, teszteltem. Ezzel teljes lett lényegében a szkript. Nyilván mindent nem támogat most se, de az nem is volt cél. Ilyen ritkább, elavult, vagy szutyokabb formátumok, mint a wma(l), ra, ofr/ofs, alac, tak, tta, shn, stb., azok nem érdekelnek, olyanokat elvi síkon nem használnék úgyse, nem tárolnék bennük semmit. A ritkább lossless formátumokkal úgyse vesztek sokat, azokat transzkódolom FLAC-be, és azt tudom tag-elni.

Plusz vannak formátumok, amik eleve nem támogatnak tag-eket, pl. wav, aiff, au, MPEG 1 Layer 1-2, stb..

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)