-- Leo's gemini proxy

-- Connecting to unbon.cafe:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;

Picard : Script nom de fichier


2023-04-13


Picard est un logiciel visant à faciliter la gestion d'une bibliothèque audio, entre autres, via la communication avec la base de données MusicBrainz. Une fonction intéressante en plus de l'import de métadonnées est le renommage automatique des fichiers locaux. Pour cela, est proposé une fonction de script rudimentaire mais fichtrement efficace. Une introduction basique officielle existe[1], mais ne permettait pas de résoudre un léger problème de diacritique – wink wink – que j'ai rencontré, idem pour ce que je trouvais ailleurs sur le net.


Usage basique


J'ai mes propres conventions pour nommer un fichier[2], l'ordre des éléments étant un équilibre me permettant de généralement les retrouver avec facilité et un tri ordonné. Pour les fichiers audio, je disgresse et me permet l'ajout de quelques métadonnées, au final l'ordre est le suivant :


année de publication ;

artiste ;

album ;

numéro de piste ;

titre.


À l'aide des variables par défaut, ce résultat peut être approché via `%date%_%albumartist%_%album%_%tracknumber%_%title%`. Je dis bien approché puisque différents problèmes apparaissent :


c'est la date de publication et non l'année. L'ISO8601 est respecté, mais je n'apprécie pas particulièrement l'usage de tirets et l'année me suffit amplement ;

le numéro de piste est donnée tel quel, ce qui peut causer des problèmes lors d'un tri de caractères successifs où les valeurs de 10 à 19 sépareront le 1 et le 2 ;

des caractères indésirables sont insérés dans le nom de fichier, tel que des espaces et des symboles de ponctuation. Faute de solution évidente, je garde volontairement les caratères non-alphabétiques ;

j'utilise un simili-camelCase et préfère que la première lettre d'une séquence, suivant un underscore, soit une minuscule.


Je souligne que la pertinence de ce format repose essentiellement sur la prise en charge des métadonnées audio par des lecteurs. À défaut de quoi c'est la fonction de tri de la machine qui prendrait le relais. Mettre en avant l'année pour des fichiers audio ne m'est absolument pas intuitif, aussi je continue de regrouper les morceaux par album au sein d'un dossier nommé d'après l'artiste et le nom d'album uniquement.


Affinement


L'année peut être obtenue à l'aide de `$left$` qui tronque les X premiers caratères d'une séquence : `$left(%date%,4)`.


Outre les albums, il m'arrive de mettre la main sur des pistes uniquement et via des sources rendant difficile l'affiliation à un album, en quel cas on peut se rabattre `$if2` sur le nom de l'artiste : `$set(_fileArtist, $if2(%albumartist%, %artist%))`. En général, ces pistes vont tout de même nécessiter un traitement manuel, soulignant leur rôle marginal dans ma collection.


La fonction `$num` permet de définir un nombre de chiffres minimal en préfixant via des zéros : `$num(%tracknumber%,2)`.


La fonction `$rreplace` (ou `$replace`, sans expressions régulières) permet d'éliminer les caractères indésirables. Par facilité de maintenance, ces-derniers sont définis par des variables qui pourront être étendues par la suite :


$set(_separators,[\\.\,\\-:!?"*\\/\(\)\\[\\]&#'])

$set(_accentAM,[ĀÁǍÀ])
$set(_accentAm,[āáǎà])
$set(_accentEM,[ĒÉĚÈ])
$set(_accentEm,[ēéěè])
$set(_accentIM,[ĪÍÌ])
$set(_accentIm,[īíǐì])
$set(_accentOM,[ŌÓÒ])
$set(_accentOm,[ōóǒò])
$set(_accentUM,[ŪÚǓÙǕǗǙǛ])
$set(_accentUm,[ūúǔùǖǘǚǜ])

À défaut de méthode évidente pour appliquer les différents filtres, ceux-ci doivent malheureusement être appliqués successivement. Aussi, on facilitera la lecture et les maintenances en aval, en définissant une variable de sortie plutôt qu'un grand embriquage. Le résultat final est donc le script suivant :


$set(_fileArtist, $if2(%albumartist%, %artist%))
$set(_fileName, $left(%date%,4)_%_fileArtist%_%album%_$num(%tracknumber%,2)_%title%)

$rreplace(%_fileName%,\\s+,)
$rreplace(%_fileName%,%_separators%,)

$set(_fileName, $rreplace(%_fileName%,%_accentAM%,A))
…
$set(_fileName, $rreplace(%_fileName%,%_accentUm%,u))

%_fileName%


À noter que l'underscore permet de définir une variable qui n'est pas une métadonnée, celle-ci étant autrement associée automatiquement aux fichiers. La succession de filtres pourrait potentiellement être compressée à l'aide d'une boucle, dans le doute, et ne cherchant pas la micro-optimisation, je laisse le code ainsi. Idem pour le camelCase, je garde ça pour une prochaine fois.


Référence


[1] Writing a File Naming Script, MusicBrainz 2023

[2] Nom de fichier

-- Response ended

-- Page fetched on Sun May 19 02:25:31 2024