Lightroom, Postprocessing mit Bash Scripten

Posted on
Post Processing mit Scripten

Einleitung

Vor einiger Zeit gab es schon einmal einen Artikel zum Thema automatisches Erzeugen von Rahmen um Bilder mit Lightroom. Aufgrund von geänderten, persönlichen Anforderungen habe ich mich in den letzten Monaten immer wider mit diesem Thema beschäftigt.

Hintergrund waren folgende Anforderungen:

  1. Für Instagram sollen alle Bilder quadratisch sein. Abhängig ob Hoch- oder Querforamt sollen entsprechende weiße Balken ergänzt werden, die aus dem rechteckigen Bild ein Quadratisches Bild machen.
  2. Für Flickr soll ein weißer Rand um die Bilder entstehen. Die Breite dieses Randes soll abhängig (proportional) von der Größe des Bildes sein.
  3. Der gesamte Prozess soll möglichst aus Lightroom heraus angestoßen werden und dann automatisch ablaufen.

Hinweis: Jeder kann die Scripte kopieren und benutzen. Die Benutzung der Scripte geschieht immer auf eigene Gefahr! Ich übernehme keine Garantie auf Fehlerfreiheit.

Die Scripte

Um diese Arbeiten automatisiert zu erledigen, habe ich folgende Bash Scripte erstellt. Die Scripte nutzen Imagemagick https://imagemagick.org für die Bildanpassungen.

mk_square

Das Script mk_square bestimmt automatisch, ob es sich um Hoch- oder Querformat handelt und vergrößert entsprechend das Bild mit einem Rahmen, so dass das Ergebnis ein quadratisches Bild ist.

#!/bin/bash

export MAGICK_HOME="$HOME/imagemagick"

export PATH="$MAGICK_HOME/bin:$PATH"

export DYLD_LIBRARY_PATH="$MAGICK_HOME/lib/"

width=$(identify -format "%w" "$1")
height=$(identify -format "%h" "$1")

echo "Width " "$width"
echo "Height " "$height"

# Schwarzer Rand? Dann zweiter Parameter -bk
if [ "$2" = "-bk" ]
then
    bk_color=$"Black"
else
    bk_color=$"White"
fi
echo "Border color " "$bk_color"

#Dateiname erweitern
full_file_name="$1"
base_file_name=$(basename "$full_file_name")
file_name="${base_file_name%.*}"
file_ext="${base_file_name##*.}"
file_path=$(dirname "$full_file_name")

echo "Name:" "$file_name"
echo "Ext:" "$file_ext"
echo "base_file_name:" "$base_file_name"
echo "Path:" "$file_path"

new_name="$file_path"/"$file_name"-square."$file_ext"

echo "New filename " "$new_name"

if [ "$width" -gt "$height" ] 
then 
    echo "Querformat"
    wborder=$(expr \( $width - $height \) \/ 2)
    echo "$wborder"
    convert "$1" -bordercolor "$bk_color" -border 0x"$wborder" "$new_name"
else 
    echo "Hochformat"
    expr $height - $width
    hborder=$(expr \( $height - $width \) \/ 2)
    echo "$hborder"
    convert "$1" -bordercolor "$bk_color" -border "$hborder"x0 "$new_name"
fi

add_border

Das Script add_border bestimmt zunächst, die Länge der langen Kante des Bildes. Abhängig von diesem Wert, wir die Breite der Umrandung ermittelt. Durch einige Experimente habe ich herausgefunden, dass für mich persönlich eine Breite von 3,75% der langen Kante optisch passt. Ein Bild mit einer langen Kante von 2000 px bekommt dann einen Rahmen von 75 px, ist also hinterher 2150 px lang.

#!/bin/bash

export MAGICK_HOME="$HOME/imagemagick"

export PATH="$MAGICK_HOME/bin:$PATH"

export DYLD_LIBRARY_PATH="$MAGICK_HOME/lib/"

width=$(identify -format "%w" "$1")
height=$(identify -format "%h" "$1")

echo "Width " "$width"
echo "Height " "$height"

# Laengere Seite ermitteln, wir gehen zunaechst von Querformat aus.
max_val="$width"
if [ "$height" -gt "$width" ] 
then 
    # Also Hochformat
    max_val="$height"
fi

# Border width abhaengig von Laenge der langen Kante (75/2000 = 3,75% der langen Kante haben sich als gut erwiesen)
# Integer Arithmetik, da kein Gleitkomma zur Verfügung
brd_faktor=$"75"
brd_quot=$"2000"
let brd_value="$max_val"\*"$brd_faktor"\/"$brd_quot"

echo "Border " "$brd_value"

# Schwarzer Rand? Dann zweiter Parameter -bk
if [ "$2" = "-bk" ]
then
    bk_color=$"Black"
else
    bk_color=$"White"
fi
echo "Border color " "$bk_color"

#Dateiname erweitern
full_file_name="$1"
base_file_name=$(basename "$full_file_name")
file_name="${base_file_name%.*}"
file_ext="${base_file_name##*.}"
file_path=$(dirname "$full_file_name")

echo "Name:" "$file_name"
echo "Ext:" "$file_ext"
echo "base_file_name:" "$base_file_name"
echo "Path:" "$file_path"

new_name="$file_path"/"$file_name"-border."$file_ext"

echo "New filename " "$new_name"

#Add the border to the image
convert "$1" -bordercolor "$bk_color" -border "$brd_value"x"$brd_value" "$new_name"

post_process

Dieses Script wird von Lightroom aufgerufen, als Aktion „Nach Export“. Es ruft lediglich die beiden anderen Scripte auf und öffnet dann das Zielverzeichnis im Finder.

#!/bin/bash

# durch alle Dateien laufen, die als Argumente übergeben wurden
for i in "$@"; do
    /Pfad/Zu/Den/Scripten/mk_square.sh "$i"
    /Pfad/Zu/Den/Scripten/add_border.sh "$i"
done

# open folder of file in Finder
open $(dirname "$1")

Charmanter Weise könnte man hier noch mehr Aktionen hinterlegen.

Einbinden in Lightroom

Der Aufruf des post_process Script erfolgt über Lightroom. Dazu muss im Export-Dialog beim Punkt „Nachbearbeitung“ im Drop-Down-Menü der Punkt „In anderer Anwendung öffnen…“ selektiert werden. Dann kann man das Script über den Button „Wählen…“ auswählen.

Die exportierten Dateien werden dann als Argumente an das Script übergeben. Nach dem Export der Bilder werden dann alle Aktionen ausgeführt. Die Ergebnisse liegen dann ebenfalls im Export-Ordner oder im Ausgabeordner der Scripte.

Die Exportierte Datei als auch die Kopien mit Rahmen liegen danach nicht in der Lightroom Bibliothek.

Schwarzer Rahmen

Manchmal macht sich ein schwarzer Rahmen besser als ein weißer Rahmen. Den beiden Scripten add_border und mk_square kann neben dem Dateinamen auch noch ein zweiter Parameter -bk übergeben werden. Dann wird die Rahmenfarbe schwarz.

Das post_process Script berücksichtigt diesen Wert aktuell noch nicht.