Bilder skalieren, EXIF-Datum in Name und Extension .JPG zu .jpg umbennen

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
MuppetShow12
Beiträge: 85
Registriert: 03.08.2016 07:20:41

Bilder skalieren, EXIF-Datum in Name und Extension .JPG zu .jpg umbennen

Beitrag von MuppetShow12 » 06.01.2019 16:34:37

Hallo alle, ich habe ein shell-Script geschrieben, um meine Bilder größenabhängig zu skalieren und umzubenennen. Wie ihr seht werden die größeren Bilder stärker skaliert als die kleinen.
Das EXIF-Datum sollte im Dateinamen stehen und gleichzeitig die Extension von .JPG auf .jpg umbenannt werden.
So schaut das script und dessen Funktion momentan aus:

Code: Alles auswählen

adi@bluedesk:~/test/Bilder$ cat resize_jpg.sh 
#!/bin/bash
# this script needs jpegoptim and exiv2 to be installed
# $1... the directory to get the pics from
find $1 -name "*.JPG" -size +3000000c                 -exec jpegoptim -m85 -p {} \; -exec exiv2 -r %Y-%m-%d_%Hh%Mm%Ss_:basename: {} \;
find $1 -name "*.JPG" -size +2000000c -size -2999999c -exec jpegoptim -m90 -p {} \; -exec exiv2 -r %Y-%m-%d_%Hh%Mm%Ss_:basename: {} \;
find $1 -name "*.JPG" -size +1000000c -size -1999999c -exec jpegoptim -m95 -p {} \; -exec exiv2 -r %Y-%m-%d_%Hh%Mm%Ss_:basename: {} \;
find $1 -name "*.JPG"                 -size -0999999c                               -exec exiv2 -r %Y-%m-%d_%Hh%Mm%Ss_:basename: {} \;

adi@bluedesk:~/test/Bilder$ ll
insgesamt 4,0M
drwxr-xr-x 2 adi adi 4,0K Jän  6 17:08 ./
drwxr-xr-x 3 adi adi 4,0K Jän  6 13:37 ../
-rw-r--r-- 1 adi adi 4,0M Jän  6 17:08 P1020560.JPG
-rwxr-xr-x 1 adi adi  641 Jän  6 16:59 resize_jpg.sh*

adi@bluedesk:~/test/Bilder$ ./resize_jpg.sh 
./P1020560.JPG 4000x2248 24bit N Exif  [OK] 4091904 --> 1021742 bytes (75.03%), optimized.
./2017-09-29_16h23m13s_P1020560.JPG 4000x2248 24bit N Exif JFIF  [OK] 1021742 --> 1021742 bytes (0.00%), skipped.

adi@bluedesk:~/test/Bilder$ ll
insgesamt 1012K
drwxr-xr-x 2 adi adi 4,0K Jän  6 17:08 ./
drwxr-xr-x 3 adi adi 4,0K Jän  6 13:37 ../
-rw-r--r-- 1 adi adi 998K Jän  6 17:08 2017-09-29_16h23m13s_2017-09-29_16h23m13s_P1020560.JPG
-rwxr-xr-x 1 adi adi  641 Jän  6 16:59 resize_jpg.sh*

Kleiner Fehler im Script, von dem ich nicht weiß warum er geschieht... ich verstehe nicht warum der Dateiname nach dem Ablauf des Scriptes nicht stimmt (Datum ist doppelt) und die Extension sollte .jpg sein - somit sollte der Name "2017-09-29_16h23m13s_P1020560.jpg" - weiß jemand wie ich das hinbekomme?

Wenn ich die Befehle einzeln in der shell aufrufe funktioniert alles ohne errors (abgesehen von der Extension):

Code: Alles auswählen

adi@bluedesk:~/test/Bilder$ jpegoptim -m85 -p P1020560.JPG 
P1020560.JPG 4000x2248 24bit N Exif  [OK] 4091904 --> 1021742 bytes (75.03%), optimized.
adi@bluedesk:~/test/Bilder$ exiv2 -r %Y-%m-%d_%Hh%Mm%Ss_:basename: P1020560.JPG 
adi@bluedesk:~/test/Bilder$ ll
insgesamt 1012K
drwxr-xr-x 2 adi adi 4,0K Jän  6 17:01 ./
drwxr-xr-x 3 adi adi 4,0K Jän  6 13:37 ../
-rw-r--r-- 1 adi adi 998K Jän  6 17:00 2017-09-29_16h23m13s_P1020560.JPG
-rwxr-xr-x 1 adi adi  641 Jän  6 16:59 resize_jpg.sh*
Fragen:
Wie kann ich das script fehlerfrei lauffähig machen?
Wie kann ich die Extension in einem Schritt gleich mit auf .jpg umbenennen?

Danke und LG
Desktop PC, Thinkcenter i5, dezidierte Nvidia Graka, debian bullseye mit Mate Desktop
Laptop Lenovo Thinkpad T470s, i5, debian bookworm mit Gnome Desktop :THX:
Homeserver / Mediaserver auf Basis von QNAP TS-251+, debian bookworm mit Gnome Oberfläche

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Bilder skalieren, EXIF-Datum in Name und Extension .JPG zu .jpg umbennen

Beitrag von Lord_Carlos » 07.01.2019 13:11:47

Haha, musste auch erst gruebeln.

Ich glaube es kann passieren das du ein Bild von ueber 3MB auf 2MB verkleinerst. Dann wird es im naechsten find gefunden und nochmal durchgejagt :D
Also vielleicht mit dein kleinen unter 1MB Bildern anfangen. Aber was passiert wenn ein Bild schon -m20 has und du stellst es um auf m95? Also kann es sein das dass Bilder wieder grosser wird?

Bessere waere es die Bilder in ein neuen Ordner zu verschieben. export/ oder so.

Zum lowercase, guck mal hier: https://stackoverflow.com/questions/118 ... lower-case
z.B. rename JPG jpg *.JPG

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: Bilder skalieren, EXIF-Datum in Name und Extension .JPG zu .jpg umbennen

Beitrag von hikaru » 07.01.2019 13:44:47

Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
07.01.2019 13:11:47
Ich glaube es kann passieren das du ein Bild von ueber 3MB auf 2MB verkleinerst. Dann wird es im naechsten find gefunden und nochmal durchgejagt :D
Gut beobachtet!:
4091904 -> 1021742 -> 998K
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
07.01.2019 13:11:47
Also vielleicht mit dein kleinen unter 1MB Bildern anfangen. Aber was passiert wenn ein Bild schon -m20 has und du stellst es um auf m95? Also kann es sein das dass Bilder wieder grosser wird?
Die Bilder sollten nicht größer werden. -m ist verlustbehaftet. Wiederholte Behandlung ist kumulativ. Ein Bild das mit -m20 behandelt wurde hat nach erneuter Behandlung mit -m95 nur noch -m19 (rein rechnerisch; tatsächlich mag es durch wiederholte Rundungseffekte noch matschiger sein).

Edit:
jpegoptim scheint schlau genug zu sein um zu erkennen, dass ein einmal zermatschtes Bild nicht mehr zu entmatschen ist und übergeht das Bild beim Versuch, die Qualität wieder anzuheben.

MuppetShow12
Beiträge: 85
Registriert: 03.08.2016 07:20:41

Re: Bilder skalieren, EXIF-Datum in Name und Extension .JPG zu .jpg umbennen

Beitrag von MuppetShow12 » 07.01.2019 13:59:29

Hallo Lord Carlos - danke für den Hinweis!!!
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
07.01.2019 13:11:47
Ich glaube es kann passieren das du ein Bild von ueber 3MB auf 2MB verkleinerst. Dann wird es im naechsten find gefunden und nochmal durchgejagt :D
Du hattest mit deiner Vermutung recht - ich habe schlauerweise die Files kleiner gemacht und dann in der Zeile find < 1MB die Files nochmal aufgegriffen und nochmals benannt ;)
Gemerkt habe ich das, als ich das durchsteppen in Zeilen 3+4 eingeschaltet habe.
Hier mein Lösungsweg - ich fange an die kleinen Dateien zu skalieren und gehe dann zu den größeren über - somit greife ich keine skalierten Dateien nochmals auf (so zumindest die Vermutung). Umbenennen und Extension ändern sind jetzt seperate Schritte - nun funktioniert offensichtlich alles... über Effizienz lässt sich streiten... ;)
adi@jupiter:~/Dokumente/test/Bilder/transform$ cat resize_jpg.sh
#!/bin/bash
# this script needs jpegoptim and exiv2 to be installed
# $1... the directory to get the pics from
# set -x
# trap read debug

find $1 -name "*.JPG" -size +1000000c -size -1999999c -exec jpegoptim -m95 -p {} \;
find $1 -name "*.JPG" -size +2000000c -size -2999999c -exec jpegoptim -m90 -p {} \;
find $1 -name "*.JPG" -size +3000000c -exec jpegoptim -m85 -p {} \;

for file in $1/*.JPG
do
exiv2 -r %Y-%m-%d_%Hh%Mm%Ss_:basename: $file
done

for file in $1/*.JPG
do
oldname=$file
newname=${file%.*}.jpg
mv -v $oldname $newname
done

adi@jupiter:~/Dokumente/test/Bilder/transform$ ll
insgesamt 9,5M
drwxr-xr-x 2 adi adi 4,0K Jän 7 14:11 .
drwxr-xr-x 3 adi adi 4,0K Jän 7 12:21 ..
-rw-r--r-- 1 adi adi 4,0M Jän 7 14:11 P1020560.JPG
-rw-r--r-- 1 adi adi 3,8M Jän 7 14:11 P1020581.JPG
-rw-r--r-- 1 adi adi 1,7M Jän 7 14:11 P1020616.JPG
-rwxr-xr-x 1 adi adi 561 Jän 7 14:10 resize_jpg.sh

adi@jupiter:~/Dokumente/test/Bilder/transform$ ./resize_jpg.sh .
./P1020616.JPG 2560x1440 24bit N Exif [OK] 1775616 --> 641313 bytes (63.88%), optimized.
./P1020560.JPG 4000x2248 24bit N Exif [OK] 4091904 --> 1021742 bytes (75.03%), optimized.
./P1020581.JPG 4000x2248 24bit N Exif [OK] 3964928 --> 900445 bytes (77.29%), optimized.
'./2017-09-29_16h23m13s_P1020560.JPG' -> './2017-09-29_16h23m13s_P1020560.jpg'
'./2017-10-11_13h51m28s_P1020581.JPG' -> './2017-10-11_13h51m28s_P1020581.jpg'
'./2018-01-02_17h17m34s_P1020616.JPG' -> './2018-01-02_17h17m34s_P1020616.jpg'

adi@jupiter:~/Dokumente/test/Bilder/transform$ ll
insgesamt 2,5M
drwxr-xr-x 2 adi adi 4,0K Jän 7 14:11 .
drwxr-xr-x 3 adi adi 4,0K Jän 7 12:21 ..
-rw-r--r-- 1 adi adi 998K Jän 7 14:11 2017-09-29_16h23m13s_P1020560.jpg
-rw-r--r-- 1 adi adi 880K Jän 7 14:11 2017-10-11_13h51m28s_P1020581.jpg
-rw-r--r-- 1 adi adi 627K Jän 7 14:11 2018-01-02_17h17m34s_P1020616.jpg
-rwxr-xr-x 1 adi adi 561 Jän 7 14:10 resize_jpg.sh
Über Vorschläge zu Codeoptimierungen freue ich mich natürlich.
Danke für die Hilfe einstweilen!
Lg
Desktop PC, Thinkcenter i5, dezidierte Nvidia Graka, debian bullseye mit Mate Desktop
Laptop Lenovo Thinkpad T470s, i5, debian bookworm mit Gnome Desktop :THX:
Homeserver / Mediaserver auf Basis von QNAP TS-251+, debian bookworm mit Gnome Oberfläche

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Bilder skalieren, EXIF-Datum in Name und Extension .JPG zu .jpg umbennen

Beitrag von Lord_Carlos » 07.01.2019 14:54:15

:THX:

Beachte das dein script nichts macht wenn die Bilder mit lowercase .jpg oder .jpeg enden.

z.B. koennte man find $1 -name .. in .. -iname .. aendern.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

MuppetShow12
Beiträge: 85
Registriert: 03.08.2016 07:20:41

Re: Bilder skalieren, EXIF-Datum in Name und Extension .JPG zu .jpg umbennen

Beitrag von MuppetShow12 » 07.01.2019 15:14:45

Danke für den Tip, progressive-jpg und case-insensitivity sind eingebaut.Die Extension *.jpeg habe ich schon seit etlichen Jahren nicht mehr gesehen - ist diese Endung noch aktuell?

Code: Alles auswählen

#!/bin/bash
# this script needs jpegoptim and exiv2 to be installed
# $1... the directory to get the pics from
# set -x
# trap read debug

find $1 -iname "*.JPG" -size +1000000c -size -1999999c -exec jpegoptim -m95 -p --all-progressive {} \;
find $1 -iname "*.JPG" -size +2000000c -size -2999999c -exec jpegoptim -m90 -p --all-progressive {} \;
find $1 -iname "*.JPG" -size +3000000c                 -exec jpegoptim -m80 -p --all-progressive {} \;

find $1 -iname "*.JPG" -exec exiv2 -r %Y-%m-%d_%Hh%Mm%Ss_:basename: {} \;

for file in $1/*.JPG
do
	oldname=$file
	newname=${file%.*}.jpg
	mv -v $oldname $newname
done
Desktop PC, Thinkcenter i5, dezidierte Nvidia Graka, debian bullseye mit Mate Desktop
Laptop Lenovo Thinkpad T470s, i5, debian bookworm mit Gnome Desktop :THX:
Homeserver / Mediaserver auf Basis von QNAP TS-251+, debian bookworm mit Gnome Oberfläche

wanne
Moderator
Beiträge: 7448
Registriert: 24.05.2010 12:39:42

Re: Bilder skalieren, EXIF-Datum in Name und Extension .JPG zu .jpg umbennen

Beitrag von wanne » 07.01.2019 18:21:02

MuppetShow12 hat geschrieben: ↑ zum Beitrag ↑
07.01.2019 15:14:45
Danke für den Tip, progressive-jpg und case-insensitivity sind eingebaut.Die Extension *.jpeg habe ich schon seit etlichen Jahren nicht mehr gesehen - ist diese Endung noch aktuell?
Kameras konnten oft kein vfat sondern nur plain FAT32. Damit kann man nur dreistellige Endungen machen. jpg war eigentlich nur ein Workaround für solche Geräte. Scheint sich dann aber ziemlich etabliert zu haben. Da das mittlerweile Geschichte ist, In sofern dürfte der jpeg Anteil eher zunehmen.
Trotzdem gibt es einige die weiter bei jpg bleiben gimp z.B. speichert per default als jpg und nicht als jpeg. (Obwohl der eher auf keinem System läuft, das keine vierstelligen Dateiendungen kennt.) Die überwiegende Mehrheit der Bildbearbeitungsprogramme macht aber jpeg (koloupaint, dia, krita habe ich gerade mal getestet...)
Im Debian Repo nutzt etwa jedes 15. Programm die Endung jpeg.
Tot ist die also eher nicht. Trotzdem ist jpg die weit verbreiterte Endung.
Vielleichthaben wir ja auch Glück und es kommt bald endlich auch den Müllhaufen der Geschichte, wo es hingehört.
rot: Moderator wanne spricht, default: User wanne spricht.

Antworten