web-dev-qa-db-fra.com

Ajouter une pochette d'album au fichier mp3 / ogg à partir de la ligne de commande en mode batch?

Je recherche un logiciel sous Linux, qui ajoutera la pochette d'album/couverture à chacun des fichiers sélectionnés en mode batch. La pochette de l'album est un jpg/png stocké sur mon ordinateur. Ce sera génial s'il peut importer à partir d'Internet.

Actuellement, j'ai essayé à la fois Rhythmbox et Banshee. J'ai également essayé lame et easytag, mais il semble qu'ils ne prennent pas en charge le mode batch. lame est pas en ajoutant les propriétés, mais en écrasant. (Je sais que boiteux est la ligne de commande niquement que j'ai utilisée jusqu'à présent).

Donc, fondamentalement, je recherche:

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

Cela ajoutera l'image aux métadonnées du fichier, de façon permanente.

Pouvez-vous me suggérer un tel logiciel?

39
BaRud

boiteux

En utilisant lame vous pouvez le faire en utilisant un petit script:

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

Si les fichiers sont nommés quelque chose comme ça, 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 ce qui précède légèrement plus compact et éliminer le besoin de sed en utilisant bash pour le faire en lui faisant supprimer le suffixe correspondant:

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

Picard/MusicBrainz

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

Cependant, ce qui précède ne semble pas être géré par la ligne de commande.

betteraves

Une autre option serait d'utiliser beets. Cela peut être généré à partir de la ligne de commande et utilise la base de données MusicBrainz pour l'approvisionnement de la pochette d'album.

Vous pouvez soit vous procurer la pochette de l'album à l'aide de FetchArt Plugin ou l'intégrer à l'aide de EmbedArt Plugin .

Autres options?

Jetez également un œil à cette Q&R U&L précédemment posée intitulée: Quel outil de balisage mp3 pour Linux? . Il existe plusieurs outils alternatifs répertoriés dans ce fil.

25
slm

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 ceci dans une boucle for pour faire chaque MP3 dans 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 distinct (donc si vous avez un fichier appelé foo.mp3, vous vous retrouverez avec les deux foo.mp3 et out-foo.mp3); c'est parce que ffmpeg ne peut pas écraser 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 ce problème est un peu comme utiliser un missile de croisière pour casser un écrou. Des outils de manipulation de métadonnées plus spécialisés seront certainement en mesure de le faire dans une commande plus propre et plus courte.

17
evilsoup

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é .

10
Raphael

Vous pouvez utiliser FancyAudio gem pour cela. Il peut ajouter des pochettes d'album aux 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

enter image description here

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

This image shows the output of fancy_audio when run in a folder containing mp3 and image files

5
Ajit Singh

Utilisez mid3v2 de mutagen:

mid3v2 -p <image> <mp3>

L'utilisation de lame ou de ffmpeg recode le MP3 au lieu d'ajouter uniquement l'image en tant que méta-blob. Et l'interface utilisateur n'est pas en ligne de commande.

0
motzmann

OP déclare qu'il préférerait que la couverture soit téléchargée sur le Web, et je viens d'écrire un script assez correct pour cela en utilisant eye3D et sacad, tous deux installables depuis pip. eye3D est très utile à cet effet car il ne semble pas ré-encoder l'audio et utiliser le --to-v2.4 flag gère tous les fichiers mp3, quel que soit 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 ex. embedart "pink floyd" "dark side of the moon". Il est écrit pour le shell poisson, mais devrait facilement être portable pour bash si vous changez toutes les commandes set en bash variables.

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
0
rien333

eyeD3 ne fonctionne pas avec Unicode. Si des caractères non-ascii se trouvent dans le nom de fichier .mp3 (ou même dans un nom de répertoire ancêtre, tel que le répertoire Album), il abandonne. LTA.

Vous n'avez donc pas de chance 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 souhaite placer le chemin complet du fichier .mp3 dans le fichier .mp3 et ne peut pas gérer les caractères non ascii.

 Exception non interceptée: le codec 'ascii' ne peut pas coder les caractères en position 5-16: ordinal pas dans la plage (128) 
 Eyed3: ERREUR: le codec 'ascii' ne peut pas coder les caractères en position 5-16: ordinal hors de portée (128) 
 Traceback 
 ... (trace longue omise) ... 
0
Jim Avera