Ajouter la pochette de l'album au fichier mp3 / ogg à partir de la ligne de commande en mode de traitement par lots?

38

Je cherche un logiciel sous Linux, qui ajoutera l'album-art / cover à chacun des fichiers sélectionnés en mode batch. La pochette de l'album est un jpg / png stocké dans mon ordinateur. Ce sera génial s'il peut importer depuis Internet.

Actuellement, j'ai essayé à la fois Rhythmbox et Banshee. J'ai aussi essayé lameet easytag, mais il semble qu'ils ne supportent pas le mode batch. lameest pas ajouter les propriétés, mais d' écraser. (Je sais que Lame est la seule ligne de commande utilisée par s / wi à ce jour).

Donc, fondamentalement, je cherche:

<some magic s/w> --picture=<my chosen picture> Music/Artist/*.mp3

Cela ajoutera l'image aux métadonnées du fichier, de manière permanente.

Pouvez-vous me suggérer un tel logiciel?

BaRud
la source

Réponses:

24

boiteux

En utilisant lamevous pouvez faire cela en utilisant un peu de script:

$ lame --ti /path/to/file.jpg audio.mp3

Si les fichiers portent le nom suivant, vous pouvez créer un script shell pour faire ce que vous voulez:

for i in file1.mp3 file2.mp3 file3.mp3; do
  albart=$(echo $i | sed 's/.mp3/.jpg/')
  lame --ti /path/to/$albart $i
done

Vous pouvez rendre les éléments ci-dessus légèrement plus compacts et éliminer le besoin sedde les utiliser bashen supprimant le suffixe correspondant:

...
albart="${i%.mp3}.jpg"
...

Picard / MusicBrainz

Si vous voulez faire cela à grande échelle, je vous suggérerais d'utiliser Picard, l'outil frontal permettant d'utiliser la base de données MusicBrainz. Il existe un plugin pour Picard appelé "Cover Art Downloader", qui peut faire cela pour des lots de votre collection.

Ce qui précède ne semble pas être piloté par la ligne de commande.

betteraves

Une autre option serait d'utiliser beets. Ceci peut être piloté à partir de la ligne de commande et utilise la base de données MusicBrainz pour rechercher les pochettes d'album.

Vous pouvez soit créer la pochette de l'album à l'aide de FetchArt Plugin ou l'intégrer à l'aide du plugin EmbedArt .

Autres options?

Jetez également un coup d’œil à cette question précédemment posée par U & L: Quel outil de marquage mp3 pour Linux? . Il existe plusieurs outils alternatifs répertoriés dans ce fil.

slm
la source
Vous pouvez éviter l' sedappel avec quelque chose comme albart="${i%.mp3}.jpg". Plus important encore, je viens de tester votre commande boiteuse et j'ai lame: unrecognized option -i...
evilsoup
@evilsoup - merci, il manquait un tiret au commutateur. Devrait être --ti ...
slm
@evilsoup - a également ajouté vos commentaires sur ne pas utiliser sed. Merci!
slm
8
@ Exeleration-G - non, je ne recommanderais pas de l'utiliser lamecar c'est en fait un encodeur. Il existe d'autres outils pour manipuler simplement les balises id3 d'un mp3. Vous pouvez utiliser id3v2 -r "APIC" *.mp3ou eyeD3 --remove-all-images *.mp3supprimer les images jointes.
slm
2
Pour info, ma version 3.99 n’a pas d’option "--ti" (debian buster) - eyeD3 semble être une bonne alternative.
Benjamin Peter
17

Une solution serait d'utiliser ffmpeg:

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

Vous pouvez mettre cela dans une boucle for pour faire tous les MP3 d'un répertoire:

for f in ./*.mp3; do ffmpeg -i "$f" -i cover.jpg -map_metadata 0 -map 0 -map 1 out-"${f#./}"; done

Cela créera un fichier de sortie séparé (donc si vous avez un fichier appelé foo.mp3, vous vous retrouverez avec les deux foo.mp3et out-foo.mp3); En effet, ffmpeg ne peut pas écrire sur son entrée. Vous pouvez résoudre ce problème avec quelque chose comme:

for f in ./*.mp3; do \
ffmpeg -i "$f" -i cover.jpg -map_metadata 0 -map 0 -map 1 out-"${f#./}" \
&& mv out-"${f#./}" "$f"; done

Utiliser ffmpeg pour résoudre ce problème revient un peu à utiliser un missile de croisière pour casser une noix. Des outils plus spécialisés de manipulation de métadonnées seront certainement en mesure de le faire avec une commande plus propre et plus courte.

maux de tête
la source
6
La commande ffmpeg illustrée ici encodera l'audio. Si vous convertissez à partir d'un autre format, c'est très bien, mais si vous souhaitez simplement ajouter une illustration à un fichier MP3 existant sans le réencoder, ajoutez-la -acodec copyaprès le -map 1.
JSD
Cela ne fonctionne pas pour moi, une raison particulière? Je ne reçois que le fichier mp3 mais pas de vignette. @jsd
Chef Pharaoh,
Désolé @ ChefPharaoh Je ne sais pas pourquoi cela ne fonctionne pas pour vous. J'ai juste essayé de faire wav-> mp3 tout en ajoutant de l'art, et juste en ajoutant de l'art à un mp3 existant avec les commandes ffmpeg ci-dessus. Les deux fois cela a bien fonctionné.
jsd
@evilsoup Je ne sais pas si je fais quelque chose de super mal ou mal, mais je peux modifier mes fichiers mp3 à la place en utilisant un processus de substitution. Kinda simplifie ce script et il semble être très rapide.
rien333
Travaillé comme un régal, et j'ai aussi trouvé que ffmpeg était un peu plus rapide que boiteux :)
Tina
8

Pour MP3:

eyeD3 --add-image="cover.jpg":FRONT_COVER "file.mp3"

Pour FLAC:

metaflac --import-picture-from="cover.jpg" "file.flac"

OGG / Vorbis semble être plus compliqué .

Raphaël
la source
5

Vous pouvez utiliser le bijou FancyAudio pour cela. Il peut ajouter une pochette d'album à des fichiers mp3. La documentation est disponible ici .

fonctionnalités

  1. ajouter une pochette d'album à un seul fichier mp3
  2. ajouter une pochette d'album à plusieurs fichiers mp3.

La capture d'écran ci-dessous montre la sortie de fancy_audio lorsqu'il est exécuté dans un dossier contenant une image et plusieurs fichiers mp3.

entrez la description de l'image ici

La capture d'écran ci-dessous montre la sortie de fancy_audio lorsqu'il est exécuté dans un dossier contenant des fichiers mp3 et image.

Cette image montre la sortie de fancy_audio lorsqu'il est exécuté dans un dossier contenant des fichiers mp3 et image.

Ajit Singh
la source
Ceci est facile et fonctionne plus rapidement que lamelorsque vous ajoutez la même image à plusieurs fichiers mp3. Vous n'avez pas besoin de connaître Ruby;) - ceci est un script autonome.
Tomasz Gandor
0

OP déclare qu'il préférerait que la couverture soit téléchargée à partir du Web et je viens d'écrire un script assez correct pour utiliser eye3Det sacad, installable à partir de pip. eye3Dest très utile à cet effet car il ne semble pas réencoder l'audio et utiliser l' --to-v2.4indicateur gère tous les fichiers mp3, peu importe le type de balise id3. Le script doit être lancé à partir du répertoire contenant les fichiers mp3. Il peut être exécuté sans arguments, en devinant l'artiste et le nom de l'album à partir des balises id3, ou avec des noms manuels comme arguments, par exemple embedart "pink floyd" "dark side of the moon". Il est écrit pour la coquille de poisson, mais devrait facilement être portable à bash si vous modifiez toutes les commandes set en assigments de variable bash.

function embedart
    if echo $argv | grep -q -e '-h'
       echo 'embedart "[Artist]" "[Album]"'
       return
    end

    if test $argv[1]
        set artist $argv[1]
        set album $argv[2]
    else
        set artist (eyed3 (ls *mp3 | head -1) | ggrep -oP "artist.*: \K.*" | head -1)
        if not test $artist
            echo "No artist found!"
            return
        end
        set album (eyed3 (ls *mp3 | head -1) | ggrep -oP "album.*: \K.*" | head -1)
        if not test $album
            echo "No album found!"
            return
        end
    end

    sacad $artist $album 350 cover.jpg -v warning 2> /dev/null > /dev/null
    eyeD3 --to-v2.4 --add-image "cover.jpg:FRONT_COVER" *mp3 -Q 2> /dev/null > /dev/null

    rm cover.jpg
    echo "Done!"
end
rien333
la source
-1

eyeD3 ne fonctionne pas avec Unicode . Si le nom de fichier .mp3 contient des caractères autres que des caractères ASCII (ou même simplement un nom de répertoire ancêtre, tel que le répertoire Album), il est annulé. LTA.

Vous n’êtes donc pas chanceux si le titre de l’Album ou de la chanson n’est pas écrit en anglais!

Par exemple:

cp yoursong.mp3 /tmp/Странджанска.mp3
eyeD3 --add-image folder.jpg:FRONT_COVER Странджанска.mp3

Apparemment, eyeD3 veut placer le chemin complet du fichier .mp3 dans le fichier .mp3 et ne peut pas gérer les caractères non-ascii.

Exception non capturée: le codec 'ascii' ne peut pas coder les caractères en position 5-16: l'ordinal n'est pas dans la plage (128)
eyed3: ERREUR: le codec 'ascii' ne peut pas coder les caractères en position 5-16: l'ordinal n'est pas dans la plage (128)
Traceback 
... (long retraçage omis) ...
Jim Avera
la source