Bilder im WebP Format aus Lightroom exportieren – auf dem Mac

Einleitung

Bis vor ein paar Tage, war ich ein langjähriger Windows-Benutzer und habe ein Skript von der Webseite „Run or smile“ genutzt, um Bilder im WebP-Format aus Lightroom zu exportieren. Aber seit ich zu Mac gewechselt bin, musste ich eine neue Lösung finden, da das Skript nur unter Windows funktioniert. Heute teile ich mit Ihnen, wie ich es geschafft habe, Bilder im WebP-Format auf meinem Apple Mac zu exportieren.

Warum WebP?

Das von Google entwickelte WebP-Format wird immer häufiger genutzt. Es hat das Potenzial, unsere herkömmlichen JPEGs und PNGs zu ersetzen, indem es Bilder effizienter komprimiert. Dies führt zu Speicherplatzeinsparungen und verbessert die Ladegeschwindigkeit Ihrer Webseite.

Der Vergleich

Betrachten wir die folgenden beiden Fotos. Das JPG-Bild (links), 2048 Pixel lang, hat eine Dateigröße von 655 KB. Das gleiche Bild (rechts), nun im WebP-Format, ist nur noch 311 KB groß. Sehen Sie die Bilder auf meiner Webseite an und Sie sehen kaum einen Unterschied in Schärfe und Farbe.

Dieses Foto entstand übrigens in Frankfurt am Main am 27.06.21. Ich stand auf einer Kreuzung und als ich nach oben schaute, musste ich das Foto machen.

Das Problem mit Lightroom

Hier liegt das Problem: Adobe Lightroom, eine beliebte Software bei Fotografen und Designern, unterstützt das WebP-Format noch nicht direkt. Als neuer Mac-Nutzer fand ich jedoch eine Lösung.

Lösung: Homebrew und WebP auf dem Mac

Mit Homebrew, einem Package Manager für Apple Mac, können wir das notwendige WebP-Paket herunterladen und installieren.

Führen Sie den folgenden Befehl im Terminal aus, um Homebrew zu installieren:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Nach der Installation von Homebrew folgt die Installation des WebP-Pakets:

brew install webp

Das WebP-Konvertierungstool cwebp wurde bei mir in /opt/homebrew/bin/cwebp installiert. Falls es bei Ihnen woanders installiert wurde, können Sie mit dem Befehl ‚which cwebp' den genauen Pfad ermitteln.

Erstellen des Skripts

Nun habe ich das Skript von „Run or smile“ für Mac umgeschrieben und nenne es convert.sh:

Update zum 29.07.2029

Bei der hier gezeigte Variante bleibt die Originaldatei erhalten. Weiter unten habe ich eine neue Version hinzugefügt, bei der die Originaldatei gelöscht wird und nur die konvertierte Datei erhalten bleibt.

1. Version, Original-Datei wird nicht gelöscht.

#!/bin/bash

function convert {
    filename=$(basename "$1")
	filename_no_ext="${filename%.*}"
    filepath=$(dirname "$1")
    output="${filepath}/${filename_no_ext}.webp"
    /opt/homebrew/bin/cwebp "$1" -o "$output"
}

for file in "$@"
do
    convert "$file"
done

Falls Sie neugierig auf die Details des Skriptes sind, finden Sie weiter unten im Text eine genaue Beschreibung seiner Funktionen. 🙂

Machen Sie das Skript ausführbar mit dem folgenden Befehl im Terminal:

chmod +x convert.sh

Exportieren aus Lightroom

Jetzt kehren wir zu Lightroom zurück. Beim Exportieren eines Bildes nehme ich folgende Einstellungen vor:

  • Bildformat: TIFF (Rest unverändert)
  • Bildgröße: Lange Kante: 2048 Pixel
  • Ausgabeschärfe: Schärfen für Bildschirm, Stärke: Hoch

Im Abschnitt „Nachbearbeitung“ müssen wir im Dropdown-Menü „Nach Export“ zuerst „Jetzt zum Ordner „Export Actions“ wechseln“ auswählen, damit der Ordner „Export Actions“ im Finder geöffnet wird. Dort kopieren wir unsere soeben erstellte Datei convert.sh hinein. Nun kann unter Lightroom im Dropdown-Menü „Nach Export“ unser Programm convert ausgewählt werden.

Abschluss

Jetzt können Sie Bilder automatisch in WebP konvertieren, sobald sie aus Lightroom exportiert werden. Es war ein kleines Abenteuer, von Windows zu Mac zu wechseln, aber ich bin froh, dass ich nun eine Lösung gefunden habe, um weiterhin das effiziente WebP-Format zu nutzen. Viel Spaß beim Ausprobieren!

Skriptanalyse

#!/bin/bash

Dies ist die Shebang-Zeile, die dem System mitteilt, dass das Skript mit Bash ausgeführt werden soll.

function convert {
    filename=$(basename "$1")
    filename_no_ext="${filename%.*}"
    filepath=$(dirname "$1")
    output="${filepath}/${filename_no_ext}.webp"
    /opt/homebrew/bin/cwebp "$1" -o "$output"
}

In dieser Funktion passiert die eigentliche Konvertierung. Zuerst extrahieren wir den Dateinamen (ohne Pfad) aus dem ersten Parameter, der an die Funktion übergeben wird. Dann entfernen wir die Dateierweiterung, um den Dateinamen ohne Erweiterung zu erhalten.

Danach ermitteln wir den Pfad, in dem die Originaldatei gespeichert ist.

Nun bauen wir den vollständigen Pfad der Ausgabedatei, indem wir den Pfad zur Originaldatei, den Dateinamen ohne Erweiterung und die neue .webp-Erweiterung zusammenfügen.

Zum Schluss führen wir das cwebp-Tool aus, das die Konvertierung durchführt. Dabei geben wir die Originaldatei als Eingabe und die zuvor erstellte Ausgabedatei als Ausgabe an.

for file in "$@"
do
    convert "$file"
done

In dieser Schleife rufen wir unsere Konvertierungsfunktion für jedes Argument auf, das an das Skript übergeben wird. „$@“ repräsentiert alle Argumente, die an das Skript übergeben wurden. In unserem Fall sind das die Dateipfade der zu konvertierenden Bilder. Das ist notwendig, weil das WebP-Konvertierungstool cwebp keine Wildcards unterstützt, also können wir nicht einfach alle Dateien in einem Verzeichnis auf einmal angeben. Stattdessen muss jede Datei einzeln konvertiert werden. Ohne diese Schleife würde das Skript nach der Konvertierung der ersten Datei stoppen und alle anderen Dateien ignorieren.

Letztlich nimmt unser Skript eine Liste von Bildpfaden als Parameter und konvertiert jedes einzelne Bild in das WebP-Format, indem es das cwebp-Tool von libwebp benutzt. Die konvertierten Bilder werden im gleichen Ordner wie die Originalbilder gespeichert und haben die gleichen Dateinamen, außer dass die Erweiterung .webp ist.

Update 29.07.2023

Ich habe das Skript dahin gehend erweitert, dass beim Export die Original-Datei gelöscht wird. Vorher wird überprüft, ob beim Konvertieren ein Fehler gab. Falls ja, bleibt die Original-Datei erhalten:

2. Version, Original-Datei wird nach der Konvertierung gelöscht

#!/bin/bash

# Legt den Namen der Log-Datei fest. Sie wird im selben Verzeichnis wie das Skript erstellt.
logfile="$(dirname "$0")/error.log"
tempfile=$(mktemp)

function convert {
    filename=$(basename "$1")
    filename_no_ext="${filename%.*}"
    filepath=$(dirname "$1")
    output="${filepath}/${filename_no_ext}.webp"
    
    # Führen Sie cwebp aus und leiten Sie die Standardfehlerausgabe in die Logdatei um
        /opt/homebrew/bin/cwebp "$1" -o "$output" 2>> "$tempfile"

    
    # Überprüfen Sie den Exit-Status von cwebp
    if [ $? -eq 0 ]; then
        # Wenn cwebp erfolgreich war, löschen Sie die Originaldatei
        rm "$1"
    else
        # Ansonsten fügen Sie die Fehlerausgabe und  Fehlermeldung zur Log-Datei hinzu
        cat "$tempfile" >> "$logfile"
        echo "[$(date)] Fehler bei der Konvertierung von $1, Datei wurde nicht gelöscht." >> "$logfile"
    fi
}

for file in "$@"
do
    convert "$file"
done

# Löschen der temporären Datei am Ende des Skripts
rm "$tempfile"

Skriptanalyse des Updates

Hier eine kurze Analyse der beiden wichtigsten Änderungen, die an dem ursprünglichen Skript vorgenommen wurden:

Löschen der Original-Datei

Nach der Konvertierung der Original-Datei in das .webp-Format wurde die Funktion hinzugefügt, die Original-Datei zu löschen. Dies wurde durch Einfügen des rm "$1"-Befehls erreicht, der die Original-Datei entfernt. Bevor dies jedoch geschieht, prüft das Skript den Erfolg der Konvertierung durch Überprüfen des Exit-Status von cwebp mit der Bedingung [ $? -eq 0 ]. Nur, wenn die Konvertierung erfolgreich war, wird die Original-Datei gelöscht.

Fehlerprotokollierung

Um die Fehlerbehandlung zu verbessern, haben wir den Code weiter optimiert, um sicherzustellen, dass eine Log-Datei nur dann erstellt wird, wenn ein Fehler auftritt. Dies wurde durch die Verwendung einer temporären Datei erreicht, in die die Fehlerausgabe von cwebp umgeleitet wird. Bei einem Fehler wird der Inhalt dieser temporären Datei dann in die endgültige Log-Datei umgeleitet. So wird verhindert, dass eine Log-Datei erstellt wird, wenn keine Fehler auftreten.

Diese Änderungen verbessern die Automatisierung und Fehlertoleranz des Skripts und machen es insgesamt robuster und zuverlässiger.

Newsletter

Melden Sie sich jetzt für unseren Newsletter an! Erhalten Sie regelmäßige Updates zu neuen Blogbeiträgen und exklusiven Angeboten. Klicken Sie hier, um dabei zu sein.

Folgen Sie gerne meinen Instagram-Kanal oder Google Unternehmensprofil. Regelmäßig werden Sie so über Neuigkeiten und Angebote informiert.


Beitrag veröffentlicht

in

von

Schlagwörter:

Sie könne den Inhalt dieser Seite nicht kopieren.