Autor Thema: [HowTo] Bash-Script für Digikam & QNAP NAS zum erstellen einer Foto-Playliste  (Gelesen 578 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline mepi0011

  • Neuling
  • *
  • Beiträge: 35
  • Dankeschön: 1 mal
  • Desktop: KDE Plasma 5
  • Kernel: 4.4
  • Prozessor: AMD Phenom II X6 (X6 1055T)
  • Skill: Durchschnitt
  • Zweig: stable
Hallo,

vorab eine kleine Beschreibung der Lage.
Mit Digikam verwalte ich schon seit längerer Zeit meine Fotos die ich auf einem QNAP NAS liegen habe.
Auf dem NAS läuft ein Twonky Server (DLNA Server) der es ermöglicht meine Fotos auch auf dem TV anzuschauen.

Das ganze funktioniert fast perfekt. Mich störte, dass ich immer alle Fotos eines Verzeichnis / Datum anschauen muss. Im Menü des Servers gibt es eine Rubrik "Diashow", leider aber nicht die Möglichkeit sich eine zu erstellen z. B. über die Weboberfläche des Server.

Im Internet habe ich lange gesucht bis ich eine Möglichkeit gefunden hatte. Der Twonky Server erkennt WPL-Playlisten wenn diese auf dem NAS liegen und sich bei den Fotos befinden. Die Playlisten ordnet der Server der Rubrik "Diashow" zu.

Zur Lösung habe ich folgenden Workflow erstellt:

  • Mit Digikam filtere ich die Fotos für die eine feste Diashow haben möchte
  • Digikam ermöglicht mit der Funktion "Präsentation" (Diashow) eine Liste mit den Fotos und den Pfaden zu erstellen"
  • Das folgende Bash-Script ändert die Pfade damit diese für den Twonky Serve bzw. das NAS passen und kopiert die neue Playliste auf das NAS
  • Nach einiger Zeit ist die Playliste verfügbar und kann auf dem TV angesehen werden

Bash-Script:
#!/bin/bash
# Pfad in dem die WPL-Playlisten abgelegt werden (aus sicht des aktuellen PC)
wplPfad="/media/Fotos_NAS/Wiedergabelisten"

# Pfad in dem die original Digikam Playliste abgelegt wird
digiPfad="./Digikam"

# Pfad des QNap NAS auf dem die Fotos liegen (hier würde auch /share/Fotos/ funktionieren)
nasMediaPfad="/share/Fotos"

# Pfad mit dem der locale Rechner auf die Fotos zugreift
localMediaPfad="/media/Fotos_NAS"

# Definition der Pfadangaben für Digikam und die WPL
digikamQuelle="Image url"
wplQuelle="media src"

fixQuelle="s#$digikamQuelle#$wplQuelle#"

# Funktion um Header der WPL-Datei zu erstellen
erstelleWPL() {
wplHeader="<?wpl version=\"1.0\"?>
<smil>
  <head>
    <meta name=\"Generator\" content=\"Own Script\"/>
    <meta name=\"ItemCount\" content=\"$anzBilder\"/>
    <meta name=\"Type\" content=\"P\"/>
    <meta name=\"Source\" content=\"CDS\"/>
    <title>${dateiName%.*}</title>
    </head>
    <body>
      <seq>"

echo "$wplHeader" > "./${dateiName%.*}".wpl
}

wplFoot="      </seq>
    </body>
</smil>
"

# Aktueller Pfad
#echo $PWD

# Name der Skript-Datei
#echo $0


for datei in "$PWD"/* ; do
    dateiName=$(basename "$datei")
    # Pruefe ob es sich um eine Datei handelt
    if [ -f "./$dateiName" ] && [ ! "./$dateiName" == $0 ]
      then
echo "Bearbeite Playliste:    $dateiName"
if [ $(grep -c "?xml" $dateiName) == 1 ]
  then
    # echo "ist eine Playliste"
    suchMuster="Image url="
    anzBilder=$(grep -c "$suchMuster" $dateiName) # Ermittelt die Anzahl der Bilder in der Playliste
    echo "Gefundene Bilder: $anzBilder"

    erstelleWPL # Aufruf zum erstellen der WPL Datei, Playlist wird mit gleichem Dateinamen allerding mit der Endung .wpl erstellt

    # grep gibt die Zeilen mit dem Suchmuster "Image url=" aus und über gibt dies an sed,
    # sed korrigiert die Pfade und schreibt das Ergebnis in die Datei *.wpl
    grep "$suchMuster" $dateiName | sed -e 's#Image url#media src#' -e 's#/media/Fotos_NAS#/share/Fotos#' -e 's#file:///#/#' >> "${dateiName%.*}".wpl # Achtung Das standard Trennzeichen / wurde hier durch # ersetzt !!!!!

    echo "$wplFoot" >> "${dateiName%.*}".wpl # Schreibe Fussnote in die wpl Datei

    mv "$dateiName" "$digiPfad" # Speichert die original Digikam Playliste ./Digikam
    mv "${dateiName%.*}".wpl "$wplPfad" # Speichert die wpl Playliste auf dem NAS

    echo "Datei erfolgreich konvertiert und in die jeweiligen Ordner verschoben."
    echo "Die Playliste ist in ca. 2-3 Stunden auf dem TV verfügbar!"

  else
    echo "Warnung: $dateiName ist keine gültige Playliste"
fi
    fi
done


Viel Spaß mit der neuen Funktion wünscht
mepi0011