[Gelöst] Speicherplatz von JPG-Bildern reduzieren.

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Benutzeravatar
ottonormal
Beiträge: 3404
Registriert: 20.01.2014 22:25:29

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von ottonormal » 03.04.2017 10:57:32

Lord_Carlos hat geschrieben:Warum die Qualitaet direkt auf der Kamera verschlechtern, wenn man vorher nicht weis ob das Bild wichtig ist oder nicht?

OP hat doch eine Loesung fuer sich gefunden :)
So isses! :THX: Das wird mir jetzt langsam auch etwas zu kompliziert, diese ganzen Einstellungen von denen hier die Rede ist habe ich doch auch gar nicht und wo nichts ist, da kann man auch nichts einstellen. :?
Ob der Encoder meiner Kamera "grauenhaft" ist, kann ich auch nicht beurteilen. Profis oder Kenner werden sicher über die Kamera die Nase rümpfen, für mich ist sie, nach allem was ich vorher hatte, der absolute Luxus. Für meine Begriffe macht die sehr gute Bilder (und Videos) und ist für meine laienhaften Ansprüche mehr als ausreichend.

Wenn ich, wie oben beschrieben, ein Bild in JPG mit Qualität 75 herunterkonvertiere, bekomme das was ich haben wollte: Die Größe ca. nur noch die Hälfte und die Qualität immer noch sehr gut (jedenfalls für meine Begriffe). Wenn ich dieses Bild mit dem Original vergleiche, sehe ich keinen Unterschied. Wenn ich beide Bilder, das Original und das Konvertierte, gleichzeitig nebeneinander öffne, dann einen bestimmten Punkt beliebig zoome, kann ich auch keinen Unterschied erkennen. Da müsste man vielleicht etwas länger suchen um einen Punkt zu finden wo man Unterschiede findet.

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

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von wanne » 03.04.2017 11:04:43

hikaru hat geschrieben:Keine halbwegs aktuelle Kamera codiert so schlecht wie du es hier darstellst. Du hast in allen drei Bildern deutliche Artefakte im Gras. Wenn man sich die Beispielbilder für die Nikon auf dkamera.de anschaut, dann ist da Nichts zu sehen, das auch nur vergleichbar wäre.
Der Encoder ist ziemlich herausragend. Aber ich habe 4608x3456 auf 81KiB=0.081MiB komprimiert!

Offensichtliche Artefakte waren ja durchaus gewünscht. Hätte ich Irgend wo bei 2MiB rumgespielt wären die Artefakte der Kompression unter der schlechten Qualität eines Handyphotos nicht mehr aufgefallen.
Mit ausreichend guten Ausgangsmaterial und jeder anderen Variante kannst du das nachspielen. Nur musst du dann halt ordentlich Zoomen, damit du die Artefakte findest. Nur sind die dann nicht gar so offensichtlich unterschiedlich, dass du mit genug Wille das schön weiter abstreiten kannst.
So ist es offensichtlich. Deine Aussage ist widerlegt.
Zum testen ob sich Massen anziehen nimmst du auch keine Stecknadelköpfe und um zu testen ob Uhren langsamer laufen, wenn man sich schneller bewegt man sich nicht 10m/s. Man führt das ganze ins extrem damit der Unterschied offensichtlich wird und auch schlechte Messinstrumente das unzweifelhaft gemessen bekommen.
Newton hat sich Ewigkeiten Gedanken gemacht, wie man Fallexperimente so in der Zeit strecken kann, dass die bescheidene menschliche Wahrnehmung das wahrgenommen bekommt. Die Gesetzmäßigkeiten dahinter sind natürlich trotzdem weiter richtig.
rot: Moderator wanne spricht, default: User wanne spricht.

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

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von hikaru » 03.04.2017 11:18:21

wanne hat geschrieben:Der eigentliche Teil wo Verlust stattfindet ist die Quantisierung da teilst du und rundest dann. Teilst du aber nur durch vielfache von 2 musst du nicht mehr runden. 3/4=0.75. Das ist exakt. Wenn du durch 4 teilst brauchst du nie mehr als 2 Nachkommastellen. Rundest du auf 2 Nachkommstellen bist du lossless. Und so kannst du überall durchlaufen und jeden Schritt lossless machen oder ist es eh schon (Huffman) das wird im Standard sogar extra erwähnt. Daneben gibt es im aktuellen jpeg-Standard noch JPEG-LS das wohl sogar extra auf lossless optimiert ist. (Aber ebenfalls lossy verwendet werden kann.)
Du argumentierst hier im luftleeren Raum. Die Quantisierung innerhalb der Kamera hast du nicht unter Kontrolle. Daher kannst du auch kein festes Ziel definieren, wenn du den Anspruch hast, dass eine erneute Quantisierung verlustfrei sein soll.
wanne hat geschrieben:Der Encoder ist ziemlich herausragend. Aber ich habe 4608x3456 auf 81KiB=0.081MiB komprimiert!
Ich sagte doch bereits, dass dein Beispiel praxisfern ist. Keiner komprimiert 16MPx ernsthaft auf 81kB.

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

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von wanne » 03.04.2017 11:35:35

hikaru hat geschrieben:Ich sagte doch bereits, dass dein Beispiel praxisfern ist. Keiner komprimiert 16MPx ernsthaft auf 81kB.
Ändert absolut nichts an der Aussagekräftigkeit.
hikaru hat geschrieben:Du argumentierst hier im luftleeren Raum. Die Quantisierung innerhalb der Kamera hast du nicht unter Kontrolle.
Für die Quantisierung ist das eh nicht sinnvoll. Aber bei höherer Qualität, wird die Kamera nach mehr stellen abbrechen. Wenn ich zuerst auf 8 und dann auf 5 stellen runde ist das nicht immer exakt wie wenn ich sofort auf 5 runde aber in exakt 99% der Fälle halt schon.
Für alles anderen lossy Schritte kannst du dich an das anpassen, was die Kamera macht. Das machen die meisten Encoder auch. Diese Schritte sind dann ab dem 2. mal lossless, weil der Encoder einfach beibehält, was der erste gemacht hat.
Du kannst btw. auch die Quantisierung einfach übernehmen und nur am Huffman (der lossless ist) rumspielen. Dann kompremierst du vollständig lossless von jpeg nach jpeg. jpegtrans kann das z.B.. Raus holen tust du dabei aber dann extrem wenig. Die magic die einen guten encoder aus macht ist schon die Quantisierungstabelle.
rot: Moderator wanne spricht, default: User wanne spricht.

uname
Beiträge: 12075
Registriert: 03.06.2008 09:33:02

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von uname » 03.04.2017 11:40:00

Ich würde "convert" (Option -quality) aus Debianimagemagick verwenden siehe z.B. folgenden Thread:

viewtopic.php?t=144513

Sei "neu" der Ordner mit den neu abzuspeichernden Bildern in Qualität 70%

Code: Alles auswählen

for i in $(ls *.JPG);do convert $i -quality 70 neu/$i;done
Unter Umständen ist es sinnvoller mit "-resize" die Auflösung absolut oder prozentual herunterzusetzen.

2undvierzig
Beiträge: 128
Registriert: 05.09.2016 12:04:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von 2undvierzig » 03.04.2017 11:51:26

uname hat geschrieben:Ich würde "convert" (Option -quality) aus Debianimagemagick
Nu verrat doch nicht die Insidertricks. ;-)
Der Fremde ist nur in der Fremde ein Fremder (Karl Valentin).

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

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von wanne » 03.04.2017 11:59:11

2undvierzig hat geschrieben:Nu verrat doch nicht die Insidertricks. ;-)
Wie gesagt: Entgegen meiner Erwartung war die Qualität von ffmpeg bei gleicher größer deutlich besser als die von imagemagick. Das kann jetzt aber wirklich dran liegen, dass ich mich irgend wo bei extrem kleinen Dateigrößen bewegt habe.
rot: Moderator wanne spricht, default: User wanne spricht.

uname
Beiträge: 12075
Registriert: 03.06.2008 09:33:02

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von uname » 03.04.2017 12:10:18

Ok war kein Insider-Tipp. XnConvert mag ähnlich zu convert sein und auch convert wurde irgendwo schon genannt. Und ob convert besser ist als ffmpeg weiß ich auch nicht. Die ganzen Probleme hätte man gar nicht, wenn man endlich mit dem Pixelwahnsinn aufhören würde. So oft druckt man auch keine Poster oder Wandtapeten. Bei den Farben hat man doch auch schon vor Jahrzehnten bei 16 Millionen Farben aufgehört, da der Mensch nicht mehr als ein paar Millionen Farben unterscheiden kann. Mein Smartphone hat eine hohe Pixelauflösung mit schlechter Bildqualität. Umgekehrt wäre besser.

Benutzeravatar
MSfree
Beiträge: 10774
Registriert: 25.09.2007 19:59:30

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von MSfree » 03.04.2017 12:24:42

uname hat geschrieben:Die ganzen Probleme hätte man gar nicht, wenn man endlich mit dem Pixelwahnsinn aufhören würde.
Beim OP ging es um Bilder mit 4608x2596 Pixel, also 12 Megapixel. Das ist zwar mehr als die typische Optik der Kameras mit 1/2.33"-Sensor auflösen kann, aber meinem Empfinden nach bewegt sich das eher am unteren Ende des Auflösungswahns. Es gibt Kameras, die über 20 Megapixel auf so einen 1/2.33"-Sensor quetschen.
So oft druckt man auch keine Poster oder Wandtapeten.
Es ist erstaunlich, wie wenig Pixel man eigentlch wirklich braucht, um schöne Poster zu drucken. Auf 100*75cm² reichen z.B. 5 Megapixel.
Bei den Farben hat man doch auch schon vor Jahrzehnten bei 16 Millionen Farben aufgehört, da der Mensch nicht mehr als ein paar Millionen Farben unterscheiden kann.
8 Bit pro Farbkanal sind leider nicht genug. In einigen Fällen sieht man z.B. statt eines glatten Farbverlaufs Abstufungen. Die Sensoren der Digitalkameras kann man, wenn man mal vom untersten Ramschsegment absieht, immer mindestens mit 10 Bit pro Kanal auslesen (sogar der Raspberry Kamerasensor liefert 10 Bit), typischerweise bekommt man sogar 12-14 Bit.

Warum die Hersteller die Fähigkeit von JPEG nicht ausnutzen, 12 Bit pro Farbkanal speichern zu können, ist mir allerdings ein Rätsel.

TomL

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von TomL » 03.04.2017 12:27:44

uname hat geschrieben:Ich würde "convert" (Option -quality) aus Debianimagemagick verwenden
Genau so mach ich das auch. Und vor dem Hintergrund, dass irgendwer in 20-30 Jahren alle Fotos, die nur mir und der Chefin als Erinnerung dienen, sowieso löschen wird, resize ich die auch alle gnadenlos auf Bildschirmgrösse. Für uns zum ansehen und erinnern "ach, guckma, weisse noch?" reicht uns die Größe 500 kb bis 1 mb immer aus. Sind eh alles nur Smartphone-Fotos.

Benutzeravatar
ottonormal
Beiträge: 3404
Registriert: 20.01.2014 22:25:29

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von ottonormal » 03.04.2017 13:21:11

uname hat geschrieben:Ich würde "convert" (Option -quality) aus Debianimagemagick verwenden...
Danke für den Tipp, das funktioniert gut und erspart auch noch das nachträgliche Umbenennen der konvertierten Bilder. :THX:
TomL hat geschrieben:Für uns zum ansehen und erinnern "ach, guckma, weisse noch?"
Genau so sehe ich das auch; denn dafür reicht es doch allemal.

Ich wusste noch gar nicht, dass mit ffmpeg auch Bilder verarbeitet werden können. Dachte immer, das ist nur für Audio/Video. Würde ich auch gerne ausprobieren. Wie müsste der Befehl lauten wenn ich z.B. alle Bilder in einem Ordner in einen "neu"-Ordner konvertieren will mit Qualitätsstufe 75?

Wirklich überrascht bin ich nicht, aber ich finde es schon erstaunlich in einem Debianforum so viel Kompetenz in Sachen Fotobearbeitung zu finden. Das Thema hat ja eigentlich nur entfernt, wenn überhaupt, eine Beziehung zu Linux/Debian. :wink:

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von scientific » 03.04.2017 19:40:14

Graphicsmagick ist ein Fork von Imagemagick und soll noch besser funktionieren, daher kommt es oft auf Webservern zum Einsatz.
Lässt sich aus den Debianwuellen installieren.

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

rodney
Beiträge: 334
Registriert: 09.12.2016 04:15:59

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von rodney » 03.04.2017 23:59:52

uname hat geschrieben:Ich würde "convert" (Option -quality) aus Debianimagemagick verwenden[...]

Sei "neu" der Ordner mit den neu abzuspeichernden Bildern in Qualität 70%

Code: Alles auswählen

for i in $(ls *.JPG);do convert $i -quality 70 neu/$i;done
Sollte auf Metadaten kein Wert gelegt werden kann eine weitere Dateigroessenreduzierung durch die Option -strip erreicht werden. Auch -interlace holt noch ein paar Bytes raus. Abgeaenderter Befehl von @uname:

Code: Alles auswählen

for i in $(ls *.JPG);do convert $i -strip -interlace Plane -quality 70 neu/$i;done
P.S. Bilddateiverkleinerung ohne "Ruecksicht auf Verluste" ist eigentlich nicht so mein Ding (habe halt gern die Originale auf Halde), bin aber trotzdem erstaunt was da rauszuholen ist. Und die Ergebnisse mit 70% haben mich positiv ueberrascht.

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: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von Lord_Carlos » 04.04.2017 00:02:22

Oh Gott, wenn OP anfaegt die meta Daten wegen Speicherplatz zu loeschen werde ich wütend.

Code: Alles auswählen

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

rodney
Beiträge: 334
Registriert: 09.12.2016 04:15:59

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von rodney » 04.04.2017 00:06:15

Lord_Carlos hat geschrieben:Oh Gott, wenn OP anfaegt die meta Daten wegen Speicherplatz zu loeschen werde ich wütend.
Warum wuetend? Es ging doch um den Speicherplatz von JPG-Bildern und nicht um irgendwelche Komfortmerkmale wie Qualitaet oder auch Meta-Daten. Anfaenglich wurde ja sogar die Bildgroesse reduziert.

Benutzeravatar
ottonormal
Beiträge: 3404
Registriert: 20.01.2014 22:25:29

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von ottonormal » 04.04.2017 12:54:58

Lord_Carlos hat geschrieben:Oh Gott, wenn OP anfaegt die meta Daten wegen Speicherplatz zu loeschen werde ich wütend.
Da würde ich auch über mich selbst wütend werden, soo schlimm isses aber noch nicht. :mrgreen:

Nur der Vollstängkeit halber, ich experimetiere gerade noch mit @unames Tipp herum. Wenn ich damit die Größe ändere von original 4608x2592 auf 1920x1080 stimmt das Ergebnis bei Hochkant-Bildern nicht, da habe ich dann nur 608x1080. Eigentlich müssten es da ja 1080x1920 sein.
Kann man den Befehl, und wenn, wie, ändern?

-resize in Prozentangabe macht es richtig:

Code: Alles auswählen

for i in $(ls *.JPG);do convert $i -resize 83.33% neu/$i;done
Damit erhalte ich wie gewünscht 1080x1920. Aber für jede andere Größe erst eine Rechenaufgabe lösen? Und wenn ich mal ein anderes Seitenverältnis haben möchte?

rodney
Beiträge: 334
Registriert: 09.12.2016 04:15:59

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von rodney » 04.04.2017 13:27:34

ottonormal hat geschrieben:...
Kann man den Befehl, und wenn, wie, ändern?

-resize in Prozentangabe macht es richtig:

Code: Alles auswählen

for i in $(ls *.JPG);do convert $i -resize 83.33% neu/$i;done
Damit erhalte ich wie gewünscht 1080x1920. Aber für jede andere Größe erst eine Rechenaufgabe lösen? Und wenn ich mal ein anderes Seitenverältnis haben möchte?
Versuche es mal mit:

Code: Alles auswählen

for i in $(ls *.JPG);do convert $i -resize 1920x1920 neu/$i;done

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

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von wanne » 04.04.2017 13:49:36

ottonormal hat geschrieben:Damit erhalte ich wie gewünscht 1080x1920. Aber für jede andere Größe erst eine Rechenaufgabe lösen?
Der scale filter des ffmpeg kann Rechenaufgaben lösen.

.5 steht für 1/2 (0.5); * für mal / für geteilt 2 für 2 iw für breite Orginalbild ih für Höhe Originalbildund -1 steht dabei für Seitenverhältnis beibehalten.

Sowas wäre eventuell interessant für dich:

Code: Alles auswählen

ffmpeg -i input.jpeg -vf scale=iw*.5:-1 -q [QUALITÄT] out.jpeg
jpegtran -optimize out.jpeg klein.jpeg
Irgendwie frisst der ffmepg die option -optimize entgegen seiner eigenen Dokumentation nicht.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
ottonormal
Beiträge: 3404
Registriert: 20.01.2014 22:25:29

Re: Speicherplatz von JPG-Bildern reduzieren.

Beitrag von ottonormal » 04.04.2017 14:31:46

rodney hat geschrieben: Versuche es mal mit:

Code: Alles auswählen

for i in $(ls *.JPG);do convert $i -resize 1920x1920 neu/$i;done
Vielen Dank dafür. :THX: Ich verstehe es zwar nicht, aber das funktioniert perfekt. Also sollte man es grundsätzlich immer so machen, auch bei anderen Auflösungen.

Mit dem ffmpeg-Befehl bin ich noch nicht klargekommen. Geht das damit nicht, dass ein komplettes Verzeichnis mit allen Bildern, Quer- und Hochformat, in einem Rutsch in eine anderes Verzeichnis konvertiert wird?

Antworten