2 votes

Problème avec metaflac

Je n'arrive pas à faire fonctionner la balise --with-filename dans metaflac. Il énumère les balises dans un fichier parfaitement avec cette commande :

metaflac --with-filename --export-tags-to=audio_tags.csv '/media/marcel/Archives2/Albums/Locatelli; Concerti Grossi, Op. 1, Nos. 1-6/Track 21.flac'

mais je n'obtiens pas le nom de fichier, juste les balises :

title=2. Allegro
work=Concerto Grosso in D major, Op. 1, No. 5
ALBUM=Locatelli: Concerti Grossi, Op. 1, Nos. 1-6
ALBUMARTIST=Jaroslav Krecek, Capella Istropolitana
ARTIST=Jaroslav Krecek, Capella Istropolitana
BAND=Jaroslav Krecek, Capella Istropolitana
CATALOGUE=730099444521, 8.553445
COMPOSER=Pietro Antonio Locatelli
DISCNUMBER=1
TOTALDISCS=1
TOTALTRACKS=27
DATE=1996
ORGANIZATION=Naxos
TRACKNUMBER=21

Toute aide est grandement appréciée. Utilisation de Xubuntu 22.04

0voto

OldFart Points 21

J'ai trouvé une solution de contournement, bien que via un script PHP, puisque l'objectif final était d'intégrer les balises dans une base de données servie par un serveur web. Tout d'abord, listez tous les fichiers flac dans un fichier texte :

find /media/marcel/Archives2/Albums -type f -name '*flac' > flac_files.txt

En utilisant PHP, ouvrez le fichier en lecture, puis obtenez une poignée de base de données et préparez une instruction PDO pour écrire chaque nom de fichier :

$dbh = new PDO(, , , );
$qry = "INSERT INTO temp (filename) VALUES (?)";
$stmt = $dbh->prepare($qry);
$flac = fopen('/media/marcel/Archives2/Albums/flac_files.txt', "r");

Parcourez maintenant chaque ligne de flac_files.txt, écrivez le nom de fichier dans la base de données en utilisant la requête préparée, obtenez les valeurs des balises dans un tableau à partir d'une commande metaflac shell et écrivez chacune à tour de rôle dans la base de données :

    while (!feof($flac))    {
        $filename = rtrim(fgets($flac));
        $stmt = $dbh->bindParam(1, $filename);
        $stmt->execute();
        $tag_list = explode("\n", shell_exec('metaflac --export-tags-to=- "' . $filename . '"')) //explode on linefeed character;
        $c = count($tag_list);
        for ($i = 0 ; $i < $c ; $i++)   {
            $tag = explode('=', $tag_list[$i]);
            if ($tag[0])    { // no empty tags!
                $rec = "UPDATE albums.temp SET " . $tag[0] . " = '" . str_replace("'", "’", $tag[1]) . "' WHERE filename = '" . $filename . "'"; //no quotes, just real apostrophes
                $data = $dbh->query($rec);
            }
        }
    }

Rapide et sale, mais ça fonctionne. Bien sûr, vous devrez configurer la table temp avec les balises appropriées comme noms de colonnes à l'avance. Alternativement, vous pourriez écrire chaque nom de fichier dans un deuxième fichier, suivi des balises récupérées à partir d'une commande metaflac, puis terminer chacun avec un délimiteur, disons "@" sur sa propre ligne. Aussi fastidieux, mais aussi fonctionne.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X