[gelöst] cover aus mp3-tag
[gelöst] cover aus mp3-tag
Hallo zusammen,
auf einem Stick (in meinem Fall) befinden sich diverse mp3-Dateien von unterschiedlichen Künstlern.
DIese sind meiner stationären Musiksammlung entnommen.
Fast alle haben das Front-Cover im tag hinterlegt, aber in unterschiedlichsten Auflösungen, und zwar häufig die höchstmögliche, die ich gefunden habe.
Die verwendeten Bildformate sind jpg und png.
Nun weigert sich mein Autoradio bei vielen Titeln beharrlich, das Cover anzuzeigen.
Ich vermute, dass dies an der Auflösung liegt, da ich so ein Problem vor Jahren schon mal mit einem klassichen MP3-Player hatte.
Gibt es ein grafisches Programm, welches in einem Rutsch alle mp3's untersucht und das Bild verkleinert (ggf. auch mit Zwischenschritten wie extrahieren, verkleinern, tag neu schreiben)?
Mein sonst verwendetes easytag kann das m.E. nicht.
Wenn nicht, wie kann eine Lösung auf der konsole aussehen?
Danke schonmal für's lesen.
p.s.
Diskussionen über mp3 gegenüber anderen Formaten oder live sind nicht erwünscht.
pps.
Das ist ein wirklich existenzielles (!) Problem.
ppps.
Nein, ich betreibe mein Autoradio nicht als öffentlichen HotSpot, obwohl es das kann (nur um der Frage gleich von Beginn an entgegenzutreten). Ich möchte also nicht meinen Autoschlüssel abgeben, weil ich nicht in der Lage bin, das Problem selber zu lösen und in der Zwischenzeit trotzdem fahre.
auf einem Stick (in meinem Fall) befinden sich diverse mp3-Dateien von unterschiedlichen Künstlern.
DIese sind meiner stationären Musiksammlung entnommen.
Fast alle haben das Front-Cover im tag hinterlegt, aber in unterschiedlichsten Auflösungen, und zwar häufig die höchstmögliche, die ich gefunden habe.
Die verwendeten Bildformate sind jpg und png.
Nun weigert sich mein Autoradio bei vielen Titeln beharrlich, das Cover anzuzeigen.
Ich vermute, dass dies an der Auflösung liegt, da ich so ein Problem vor Jahren schon mal mit einem klassichen MP3-Player hatte.
Gibt es ein grafisches Programm, welches in einem Rutsch alle mp3's untersucht und das Bild verkleinert (ggf. auch mit Zwischenschritten wie extrahieren, verkleinern, tag neu schreiben)?
Mein sonst verwendetes easytag kann das m.E. nicht.
Wenn nicht, wie kann eine Lösung auf der konsole aussehen?
Danke schonmal für's lesen.
p.s.
Diskussionen über mp3 gegenüber anderen Formaten oder live sind nicht erwünscht.
pps.
Das ist ein wirklich existenzielles (!) Problem.
ppps.
Nein, ich betreibe mein Autoradio nicht als öffentlichen HotSpot, obwohl es das kann (nur um der Frage gleich von Beginn an entgegenzutreten). Ich möchte also nicht meinen Autoschlüssel abgeben, weil ich nicht in der Lage bin, das Problem selber zu lösen und in der Zwischenzeit trotzdem fahre.
Zuletzt geändert von letzter3 am 19.12.2016 22:47:15, insgesamt 1-mal geändert.
Re: cover aus mp3-tag
Als ich noch mp3 verwendet habe, war auf der Kommandozeile eyed3 mein Lieblingstool. Da hätte ich mir die Befehle für die einzelnen Schritte ungefähr (!) so vorgestellt (Bild skalieren mit convert aus imagemagick):
Ich weiß nur nicht wie eyeD3 die Bilder beim Extrahieren im ersten Schritt benennt - möglicherweise ist das auch von mp3-Datei zu mp3-Datei unterschiedlich. Da müsstest du dir also noch irgendetwas einfallen lassen, damit du das in eine Schleife packen kannst.
Wenn du sicher bist, dass es pro mp3-Datei nur ein Cover gibt, könnte das so funktionieren - nur ganz grob
Blöd ist vielleicht auch, dass in meinem Beispiel die Originalcover gelöscht werden, auch wenn irgendetwas beim Verkleinern oder beim Schreiben des Tags schief geht.
Wenn du einmal herzeigst unter welchem Namen --write-images die vorhandenen Cover schreibt, dann ließe sich das ganze sicher noch verbessern und vor allem sicherer machen, wenn es in der obigen Form überhaupt funktioniert.
Code: Alles auswählen
eyeD3 --write-images="verzeichnis" "file.mp3"
eyeD3 --remove-images "file.mp3"
convert "verzeichnis/cover.jpg" -resize 64x64 "verzeichnis/cover_neu.jpg"
eyeD3 --add-image=verzeichnis/cover_neu.jpg:FRONT_COVER "file.mp3"
Wenn du sicher bist, dass es pro mp3-Datei nur ein Cover gibt, könnte das so funktionieren - nur ganz grob
Code: Alles auswählen
IFS=$'\n'
TEMPDIR="$(mktemp -d)"
for FILE in $(find . -name '*.mp3'); do
eyeD3 --write-images="${TEMPDIR}" "${FILE}"
eyeD3 --remove-images "${FILE}"
# wenn in manchen mp3s mehr als eine Bilddatei existiert, dann muesste
# man sich hier noch etwas statt dem einfachen * einfallen lassen
convert "${TEMPDIR}/*" -resize 64x64 "${TEMPDIR}/cover_neu.jpg"
eyeD3 --add-image="${TEMPDIR}/cover_neu.jpg":FRONT_COVER "${FILE}"
rm "${TEMPDIR}/*"
done
Wenn du einmal herzeigst unter welchem Namen --write-images die vorhandenen Cover schreibt, dann ließe sich das ganze sicher noch verbessern und vor allem sicherer machen, wenn es in der obigen Form überhaupt funktioniert.
Zuletzt geändert von smutbert am 17.12.2016 22:28:30, insgesamt 2-mal geändert.
Re: cover aus mp3-tag
uihh, bin begeistert.
Rückmeldung kommt morgen....
Rückmeldung kommt morgen....
Re: cover aus mp3-tag
Na aber gerne doch:smutbert hat geschrieben:Wenn du einmal herzeigst unter welchem Namen --write-images die vorhandenen Cover schreibt, dann ließe sich das ganze sicher noch verbessern und vor allem sicherer machen, wenn es in der obigen Form überhaupt funktioniert.
Code: Alles auswählen
[letzter@wuerfel Test]$ eyeD3 --write-images=/home/letzter/Musik/Test 1.mp3
1.mp3 [ 9.66 MB ]
-------------------------------------------------------------------------------
Time: 04:11 MPEG1, Layer III [ 320 kb/s @ 48000 Hz - Joint stereo ]
-------------------------------------------------------------------------------
ID3 v2.3:
title: Hideaway
artist: Kiesza
album: Hideaway - Single
recording date: 2014
track: 1 genre: Electronic (id 52)
FRONT_COVER Image: [Size: 51814 bytes] [Type: image/jpeg]
Description: kiesza.jpg
Writing /home/letzter/Musik/Test/FRONT_COVER.jpeg...
-------------------------------------------------------------------------------
[letzter@wuerfel Test]$ eyeD3 --write-images=/home/letzter/Musik/Test 2.mp3
2.mp3 [ 7.50 MB ]
-------------------------------------------------------------------------------
Time: 03:16 MPEG1, Layer III [ 320 kb/s @ 44100 Hz - Joint stereo ]
-------------------------------------------------------------------------------
ID3 v2.3:
title: Long & Lost
artist: Florence & The Machine
album: How Big, How Blue, How Beautiful
recording date: 2015
track: 7/16 genre: Pop (id 13)
FRONT_COVER Image: [Size: 30059 bytes] [Type: image/jpeg]
Description:
Writing /home/letzter/Musik/Test/FRONT_COVER1.jpeg...
-------------------------------------------------------------------------------
[letzter@wuerfel Test]$
Re: cover aus mp3-tag
Ja, es sollte jeweils nur 1 Cover/Datei vorhanden sein.smutbert hat geschrieben: Wenn du sicher bist, dass es pro mp3-Datei nur ein Cover gibt, könnte das so funktionieren - nur ganz grob
Das wäre nicht so wild, sind ja nur Kopien.smutbert hat geschrieben:Blöd ist vielleicht auch, dass in meinem Beispiel die Originalcover gelöscht werden, auch wenn irgendetwas beim Verkleinern oder beim Schreiben des Tags schief geht.
Re: cover aus mp3-tag
Das script läuft leider nicht durch...
Fehlermeldung zum usage gekürzt.
Fehlermeldung zum usage gekürzt.
Code: Alles auswählen
Kettcar - 01 - Deiche.mp3 [ 5.50 MB ]
-------------------------------------------------------------------------------
Time: 03:17 MPEG1, Layer III [ ~233 kb/s @ 44100 Hz - Joint stereo ]
-------------------------------------------------------------------------------
ID3 v2.3:
title: Deiche
artist: Kettcar
album: von Spatzen und Tauben, Dächern und Händen
recording date: 2005
track: 1
-------------------------------------------------------------------------------
usage: eyeD3 [-h] [--version] [-l LEVEL[:LOGGER]] [--exclude PATTERN] [-L]
[-P NAME] [-C FILE] [--backup] [-Q] [--fs-encoding ENCODING]
.....
[--preserve-file-times]
[PATH [PATH ...]]
eyeD3: error: unrecognized arguments: --remove-images
convert: unable to open image `/tmp/tmp.pW8MPzbRQl/*': Datei oder Verzeichnis nicht gefunden @ error/blob.c/OpenBlob/2705.
convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/504.
convert: no images defined `/tmp/tmp.pW8MPzbRQl/cover_neu.jpg' @ error/convert.c/ConvertImageCommand/3257.
usage: eyeD3 [-h] [--version] [-l LEVEL[:LOGGER]] [--exclude PATTERN] [-L]
[-P NAME] [-C FILE] [--backup] [-Q] [--fs-encoding ENCODING]
.....
[--preserve-file-times]
[PATH [PATH ...]]
eyeD3: error: argument --add-image: file does not exist
rm: das Entfernen von „/tmp/tmp.pW8MPzbRQl/*“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden
[letzter@wuerfel Test]$
Re: cover aus mp3-tag
Also bei mir funktioniert das Skript mit ein paar gerade erstellten Test-mp3s problemlos - ein Fehler ist mir allerdings trotzdem unterlaufen und zwar ein '*' zu viel, der äußert sich aber soweit ich das sehe nur in einer harmlosen Fehlermeldung - ich habs gerade im obigen Beitrag korrigiert. Außerdem habe ich ein paar Anführungszeichen hinzugefügt.
Das woran es bei dir in erster Linie scheitert ist das Speichern des Originalcovers. Der Rest sind nur Folgefehler.
Hast du in allen mp3s Cover gespeichert oder muss das Skript auch mit Dateien ohne eingebettes Bild umgehen können?
Kannst du dir "Kettcar - 01 - Deiche.mp3" näher ansehen oder zeigen was bei
herauskommt?
Das woran es bei dir in erster Linie scheitert ist das Speichern des Originalcovers. Der Rest sind nur Folgefehler.
Hast du in allen mp3s Cover gespeichert oder muss das Skript auch mit Dateien ohne eingebettes Bild umgehen können?
Kannst du dir "Kettcar - 01 - Deiche.mp3" näher ansehen oder zeigen was bei
Code: Alles auswählen
eyeD3 --write-images=. "Kettcar - 01 - Deiche.mp3"
Re: cover aus mp3-tag
Anscheinend muss das script auch mit Dateien ohne (Front)cover umgehen können.
In dem betreffenden ist tatsächlich kein image enthalten, händisch kontrolliert. Ich bin entsetzt, da ich dachte, meine Sammlung einigermaßen gepflegt zu haben.
Eine Auflistung der files ohne cover wäre hilfreich.
In dem betreffenden ist tatsächlich kein image enthalten, händisch kontrolliert. Ich bin entsetzt, da ich dachte, meine Sammlung einigermaßen gepflegt zu haben.
Eine Auflistung der files ohne cover wäre hilfreich.
Code: Alles auswählen
[letzter@wuerfel ~]$ cd Musik/Test
[letzter@wuerfel Test]$ eyeD3 --write-images=. "Kettcar - 01 - Deiche.mp3"
Kettcar - 01 - Deiche.mp3 [ 5.50 MB ]
-------------------------------------------------------------------------------
Time: 03:17 MPEG1, Layer III [ ~233 kb/s @ 44100 Hz - Joint stereo ]
-------------------------------------------------------------------------------
ID3 v2.3:
title: Deiche
artist: Kettcar
album: von Spatzen und Tauben, Dächern und Händen
recording date: 2005
track: 1
-------------------------------------------------------------------------------
[letzter@wuerfel Test]$
Re: cover aus mp3-tag
Jetzt habe ich doch ein Problem beim Entfernen der eingebetteten Bilder entdeckt, mir ist aber nicht klar, warum das bei meinen ersten Tests nicht aufgetreten ist.
Das mit den Dateien ohne Cover lässt sich jedenfalls leicht lösen - ich meld mich wieder, wenn ich das Problem durchschaue.
edit:
Mensch, bin ich manchmal blind - ich habe irgendwie eine fehlerhafte Version meiner Versuche kopiert und im Beitrag eingefügt. Ich hoffe mit der Version klappt es:
aber Vorsicht das Skript bricht bei keinem Fehler ab, auch wenn nun zumindest kurze Fehlermeldungen ausgegeben werden sollten, die verraten bei welcher Datei es Fehler gegeben hat.
Das mit den Dateien ohne Cover lässt sich jedenfalls leicht lösen - ich meld mich wieder, wenn ich das Problem durchschaue.
edit:
Mensch, bin ich manchmal blind - ich habe irgendwie eine fehlerhafte Version meiner Versuche kopiert und im Beitrag eingefügt. Ich hoffe mit der Version klappt es:
Code: Alles auswählen
#!/bin/bash
IFS=$'\n'
TEMPDIR="$(mktemp -d)"
for FILE in $(find . -name '*.mp3'); do
eyeD3 --write-images="${TEMPDIR}" "${FILE}" &> /dev/null \
|| echo "Fehler beim Extrahieren (${FILE})"
eyeD3 --remove-images "${FILE}" &> /dev/null \
|| echo "Fehler beim Entfernen (${FILE})"
convert "${TEMPDIR}/$(ls ${TEMPDIR} | head -n 1)" -resize 64x64 "${TEMPDIR}/cover_neu.jpg" &> /dev/null \
&& eyeD3 --add-image="${TEMPDIR}/cover_neu.jpg":FRONT_COVER "${FILE}" &> /dev/null \
|| echo "Fehler beim Einbetten (${FILE})"
(cd "${TEMPDIR}" && rm *) &> /dev/null \
|| echo "Fehler beim Entfernen der tmp-Dateien von ${FILE}"
done
rmdir "${TEMPDIR}" \
|| echo "Merkwuerdigerweise ist ${TEMPDIR} nicht leer - irgendetwas ist schief gelaufen"
Zuletzt geändert von smutbert am 31.12.2016 21:38:26, insgesamt 1-mal geändert.
Re: cover aus mp3-tag
JEIN.smutbert hat geschrieben: Ich hoffe mit der Version klappt es:
Also erstmal danke!
Leider habe ich dein script so übernommen und habe nun netterweise überall 64x64 große (kleine) Bildchen.
Aber kein Problem, ist ja nur ne Kopie und ich kann das alles mit 500x500 wiederholen.
Ich hätte aber vermutet, das
dieser Fehler ausgeworfen wird.smutbert hat geschrieben:Code: Alles auswählen
... eyeD3 --write-images="${TEMPDIR}" "${FILE}" &> /dev/null \ || echo "Fehler beim Extrahieren (${FILE})" ...
Stattdessen (als Beispiel, ist bei allen betreffenden files so):
Code: Alles auswählen
Fehler beim Einbetten (./06 - Mike Oldfield - To France.mp3)
Fehler beim Entfernen der tmp-Dateien von ./06 - Mike Oldfield - To France.mp3
Nochmal vielen Dank.
Re: [gelöst] cover aus mp3-tag
Das ganze Skript ist ein bisschen chaotisch, was auch daran liegt, dass ich die Aufgabe für einfacher gehalten habe, als sie es tatsächlich ist.
Willst du es noch öfter verwenden (dann könnte ich ja überlegen wie man das besser und robuster macht, wenn mir einmal langweilig ist)?
Willst du es noch öfter verwenden (dann könnte ich ja überlegen wie man das besser und robuster macht, wenn mir einmal langweilig ist)?
Re: [gelöst] cover aus mp3-tag
Ich werde es sicherlich der Einfachheit halber öfter verwenden, wenn ich neue Daten auf den Stick für's Auto spiele, aber mir reicht die jetzige Version völlig aus.
Ob ich nun bei einem Fehler eine "falsche" oder richtige Fehlermeldung bekomme, ist mir egal.
Ob ich nun bei einem Fehler eine "falsche" oder richtige Fehlermeldung bekomme, ist mir egal.
Re: [gelöst] cover aus mp3-tag
Hat etwas gedauert, aber bei meinen Tests gibt es nun keine grundlosen Fehlermeldungen mehr
edit:
Gerade ist mir aufgefallen, dass mir bei der vorigen Version ein Fehler unterlaufen ist und zwar hatte ich statt "--remove-images" "--remove-all-images" geschrieben. Dh. die vorige Version hat die Originalcover gar nicht aus den mp3-Dateien gelöscht sondern nur zusätzlich das skalierte Cover hineingeschrieben - den Fehler hab ich nun auch in der alten Version korrigiert, aber ich denke die neue sollte rundherum zuverlässiger funktionieren und im Zweifelsfall sinnvolle Fehlermeldungen ausgeben.
Code: Alles auswählen
#!/bin/bash
SAVEIFS=${IFS}
IFS="
"
TEMPDIR=$(mktemp -d)
TEMPFILE=$(mktemp -u -p ${TEMPDIR} --suffix=_new_cover.jpg)
COUNT=0
COUNTERR=0
COVERSIZE="500x500"
for FILE in $(find . -name '*.mp3'); do
COUNT=$(expr ${COUNT} + 1)
eyeD3 --write-images=${TEMPDIR} "${FILE}" &> /dev/null
if [ ! "$(ls -A ${TEMPDIR})" ] ; then
echo "Aus ${FILE} konnte kein Cover extrahiert werden!"
COUNTERR=$(expr ${COUNTERR} + 1)
continue
fi
if ! eyeD3 --remove-images "${FILE}" &> /dev/null ; then
echo "Fehler beim Entfernen des Covers, ueberspringe ${FILE}!"
rm ${TEMPDIR}/*
COUNTERR=$(expr ${COUNTERR} + 1)
continue
fi
if ! convert "${TEMPDIR}/$(ls -t ${TEMPDIR} | head -n 1)" -resize ${COVERSIZE} ${TEMPFILE} &> /dev/null ; then
echo "Fehler beim Skalieren des Covers, ${FILE} wird kein Cover haben!"
rm ${TEMPDIR}/*
COUNTERR=$(expr ${COUNTERR} + 1)
continue
fi
if ! eyeD3 --add-image=${TEMPFILE}:FRONT_COVER "${FILE}" &> /dev/null ; then
echo "Fehler beim Schreiben des neuen Covers in ${FILE}!"
COUNTERR=$(expr ${COUNTERR} + 1)
fi
rm ${TEMPDIR}/*
done
rmdir ${TEMPDIR}
TIMERUN=${SECONDS}
echo -n "${COUNTERR} Fehler in ${COUNT} Dateien waehrend "
printf '%dh:%dm:%ds' $((${TIMERUN}/3600)) $((${TIMERUN}%3600/60)) $((${TIMERUN}%60))
echo "."
IFS=${SAVEIFS}
Gerade ist mir aufgefallen, dass mir bei der vorigen Version ein Fehler unterlaufen ist und zwar hatte ich statt "--remove-images" "--remove-all-images" geschrieben. Dh. die vorige Version hat die Originalcover gar nicht aus den mp3-Dateien gelöscht sondern nur zusätzlich das skalierte Cover hineingeschrieben - den Fehler hab ich nun auch in der alten Version korrigiert, aber ich denke die neue sollte rundherum zuverlässiger funktionieren und im Zweifelsfall sinnvolle Fehlermeldungen ausgeben.