Albumcover-Cover von der Befehlszeile im Batch-Modus zur MP3 / OGG-Datei hinzufügen?


38

Ich bin auf der Suche nach einer Linux-Software, die im Batch-Modus das Albumcover zu jeder ausgewählten Datei hinzufügt. Das Albumcover ist ein JPG / PNG, das auf meinem Computer gespeichert ist. Es ist fantastisch, wenn es aus dem Internet importiert werden kann.

Zur Zeit habe ich sowohl Rhythmbox als auch Banshee ausprobiert. Ich habe es auch versucht lameund easytag, aber anscheinend unterstützen sie den Batch-Modus nicht. lameist nicht das Hinzufügen der Eigenschaften, aber überschrieben werden . (Ich weiß, Lame ist die einzige Befehlszeile, die ich bisher verwendet habe).

Im Grunde suche ich also:

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

Dadurch wird das Bild dauerhaft zu den Metadaten der Datei hinzugefügt.

Können Sie mir eine solche Software vorschlagen?

Antworten:


24

Lame

Verwenden lameSie dazu ein kleines Skript:

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

Wenn die Dateien einen ähnlichen Namen haben, können Sie ein Shell-Skript erstellen, um das zu tun, was Sie wollen:

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

Sie können die oben etwas kompakter machen und die Notwendigkeit zu beseitigen , für seddurch die Verwendung bashes zu tun , indem sie die passende Suffix entfernen:

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

Picard / MusicBrainz

Wenn Sie dies in großem Maßstab tun möchten, empfehle ich Picard, das Frontend-Tool für die Nutzung der MusicBrainz-Datenbank. Zu Picard gibt es ein Plugin namens "Cover Art Downloader", mit dem Sie Stapel Ihrer Sammlung bearbeiten können.

Das Obige scheint jedoch nicht befehlszeilengesteuert zu sein.

Rüben

Eine andere Option wäre zu verwenden beets. Dies kann von der Kommandozeile aus gesteuert werden und nutzt die MusicBrainz-Datenbank zur Beschaffung des Albumcovers.

Sie können entweder das Albumcover mit Quelle FetchArt Plugin oder einbetten , die mit EmbedArt Plugin .

Andere Optionen?

Schauen Sie sich auch diese zuvor gestellten Fragen und Antworten an: Welches MP3-Tagging-Tool für Linux? . In diesem Thread sind mehrere alternative Tools aufgeführt.


Sie können den sedAnruf mit so etwas vermeiden albart="${i%.mp3}.jpg". Noch wichtiger ist, ich habe gerade Ihr lahmes Kommando getestet und lame: unrecognized option -i...
Evilsoup 30.07.13

@evilsoup - danke, dem Schalter fehlte ein Strich. Sollte sein --ti ...
SLM

@evilsoup - fügte auch Ihr Feedback zur Nichtbenutzung hinzu sed. Vielen Dank!
slm

7
@ Exeleration-G - nein, ich würde die Verwendung nicht empfehlen, lameda es sich tatsächlich um einen Encoder handelt. Es gibt noch andere Tools, mit denen Sie die ID3-Tags einer MP3-Datei bearbeiten können. Sie können angehängte Bilder mit id3v2 -r "APIC" *.mp3oder eyeD3 --remove-all-images *.mp3entfernen.
slm

1
Zu Ihrer Information, meine Version 3.99 hat keine "--ti" Option (debian buster) - eyeD3 scheint eine gute Alternative zu sein.
Benjamin Peter

17

Eine Lösung wäre, ffmpeg zu verwenden:

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

Sie können dies in eine for-Schleife einfügen, um alle MP3s in einem Verzeichnis auszuführen:

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

Dadurch wird eine separate Ausgabedatei erstellt (wenn Sie also eine Datei mit dem Namen haben foo.mp3, erhalten Sie beide foo.mp3und out-foo.mp3). Das liegt daran, dass ffmpeg nicht über seine Eingabe schreiben kann. Sie können dies folgendermaßen beheben:

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

Die Verwendung von ffmpeg für dieses Problem ähnelt der Verwendung einer Marschflugkörper, um eine Nuss zu knacken. Spezialisierte Tools zur Bearbeitung von Metadaten werden dies sicherlich in einem saubereren, kürzeren Befehl tun können.


6
Der hier gezeigte Befehl ffmpeg kodiert das Audio. Wenn Sie von einem anderen Format konvertieren, ist das in Ordnung, aber wenn Sie einem vorhandenen MP3-Format nur ein Bild hinzufügen möchten, ohne es neu zu codieren, fügen Sie es -acodec copynach dem hinzu -map 1.
Jsd

Das funktioniert nicht für mich, aus irgendeinem Grund? Ich bekomme nur die MP3-Datei, aber kein Thumbnail. @jsd
Chef Pharao

Sorry @ChefPharaoh Ich weiß nicht, warum es bei dir nicht funktioniert. Ich habe gerade versucht, wav-> mp3 zu machen, während ich Kunst hinzufügte, und einem vorhandenen mp3 mit den oben gezeigten ffmpeg-Befehlen Kunst hinzuzufügen. Beide Male hat es gut funktioniert.
Jsd

@evilsoup Ich bin mir nicht sicher, ob ich etwas Böses oder Falsches tue, aber ich kann meine MP3-Dateien mithilfe der Prozessersetzung ändern. Ein bisschen vereinfacht dieses Skript und es scheint super schnell zu sein.
Rien333

Arbeitete wie ein Leckerbissen, und ich fand auch ffmpeg etwas schneller als lahm :)
Tina

7

Für MP3:

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

Für FLAC:

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

OGG / Vorbis scheint komplizierter zu sein .


5

Sie können dafür FancyAudio Gem verwenden . Es kann MP3-Dateien Albumcover hinzufügen. Dokumentation ist verfügbar hier .

Eigenschaften

  1. Albumcover zu einer einzelnen MP3-Datei hinzufügen
  2. Hinzufügen von Albumcover zu mehreren MP3-Dateien.

Der folgende Screenshot zeigt die Ausgabe von fancy_audio, wenn es in einem Ordner ausgeführt wird, der ein Bild und mehrere MP3-Dateien enthält

Bildbeschreibung hier eingeben

Der folgende Screenshot zeigt die Ausgabe von fancy_audio, wenn es in einem Ordner ausgeführt wird, der MP3- und Bilddateien enthält

Dieses Bild zeigt die Ausgabe von fancy_audio, wenn es in einem Ordner ausgeführt wird, der MP3- und Bilddateien enthält


Dies ist einfach und geht schneller als lamebeim Hinzufügen desselben Bildes zu mehreren MP3-Dateien. Sie müssen Ruby nicht kennen;) - dies ist ein eigenständiges Skript.
Tomasz Gandor

0

OP gibt an, dass er es vorziehen würde, wenn das Cover aus dem Web heruntergeladen würde, und ich habe gerade ein ziemlich gutes Skript dafür geschrieben, das eye3Dund verwendet sacad, beide können von pip installiert werden. eye3Dist für diesen Zweck sehr nützlich, da es keine Audiodaten neu zu codieren scheint und mit dem --to-v2.4Flag alle MP3-Dateien verarbeitet werden, unabhängig vom Typ des ID3-Tags. Das Skript sollte aus dem Verzeichnis gestartet werden, das die MP3-Dateien enthält. Es kann ohne Argumente ausgeführt werden, wobei der Name des Interpreten und des Albums aus den ID3-Tags erraten wird, oder mit manuellen Namen als Argumente, z embedart "pink floyd" "dark side of the moon". Es ist für die Fischmuschel geschrieben, sollte aber problemlos portierbar sein, wenn Sie alle gesetzten Befehle in Bash-Variablen-Zuweisungen ändern.

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

-1

eyeD3 funktioniert nicht mit Unicode . Befinden sich im Namen der MP3-Datei (oder auch nur in einem Vorfahrenverzeichnis wie dem Albumverzeichnis) andere Zeichen als ASCII-Zeichen, wird der Vorgang abgebrochen. LTA.

Sie haben also Pech, wenn der Album- oder Songtitel nicht auf Englisch geschrieben ist!

Beispielsweise:

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

Anscheinend möchte eyeD3 den vollständigen Pfad der .mp3-Datei in die .mp3-Datei einfügen und kann keine Nicht-ASCII-Zeichen verarbeiten.

Ungefangene Ausnahme: Der ASCII-Codec kann keine Zeichen an Position 5-16 codieren: Ordnungszahl nicht im Bereich (128)
eyed3: FEHLER: 'ascii' Codec kann keine Zeichen in Position 5-16 codieren: Ordnungszahl nicht im Bereich (128)
Zurück verfolgen 
... (langer Traceback weggelassen) ...
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.