Shell-Scripte zum Transportieren & Archivieren der Aufnahmen von der VU+ auf ein linuxbasiertes NAS

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Shell-Scripte zum Transportieren & Archivieren der Aufnahmen von der VU+ auf ein linuxbasiertes NAS

      Hallo allesamt,

      da man mit der VU+-Box so viele schöne Sachen machen kann, gibt es natürlich auch viele Wege, wie man etwas machen kann.
      Meine Hardwarekonstellation ist folgendermaßen:

      - Die VU+-Box hat eine (ausreichend große) Festplatte, auf die Aufnahmen lokal gespeichert werden.
      - Über einen Cronjob wird ein Script ausgeführt, das überprüft, ob bereits abgeschlossene Aufnahmen am üblichen Aufnahmeort liegen.
      - Das Script überprüft, ob mein NAS gerade aktiv ist (ich lasse es aus Energiespargründen 30 Minuten nach dem letzten Zugriff und bei zu wenig Prozessorlast automatisch herunterfahren) und fährt es ggf. via WOL hoch und mountet das korrekte Share anschließend
      - Wenn das NAS und auch das Share erreichbar ist, wird die Aufnahme auf das NAS geschoben und die lokale Kopie auf der VU+ gelöscht

      Shell-Script

      1. #!/bin/bash
      2. # Verzeichnisse
      3. BASEDIR=/media/hdd
      4. MOUNTDIR=/media/net/NAS
      5. DESTDIR=$MOUNTDIR/records
      6. # Zielserver
      7. SERVERIP=192.168.20.30
      8. SERVERMAC=bc:5f:f4:e9:d2:c7
      9. SERVERSHARE=video
      10. SERVERUSER=BENUTZERNAME
      11. SERVERPASS=PASSWORT
      12. # Programme
      13. LSOF=/usr/sbin/lsof
      14. BB=/bin/busybox
      15. WOL="$BB ether-wake"
      16. MOUNT=/bin/mount
      17. # Ueberpruefungen, ob alle benoetigten Verzeichnisse vorhanden sind und alle wichtigen Programme dabei sind
      18. if [ ! -x $LSOF ]; then
      19. echo "Bitte das Paket 'lsof' installieren"
      20. echo "opkg install lsof"
      21. exit 1
      22. fi
      23. if [ ! -x $BB ]; then
      24. echo "Bitte das Paket 'busybox' installieren"
      25. echo "opkg install busybox"
      26. exit 1
      27. fi
      28. if [ ! -d "$BASEDIR" ]; then
      29. echo "Das Aufnahmeverzeichnis $BASEDIR existiert nicht"
      30. exit 1
      31. fi
      32. if [ ! -d "$MOUNTDIR" ]; then
      33. echo "Das Netzwerkverzeichnis $MOUNTDIR existiert nicht"
      34. exit 1
      35. fi
      36. if [ ! -d "$DESTDIR" ]; then
      37. echo "Das Zielverzeichnis $DESTDIR existiert nicht"
      38. exit 1
      39. fi
      40. # And so it begins...
      41. WASMOUNTED=1
      42. if [ `$MOUNT | grep "$MOUNTDIR" | wc -l` -ne 1 ]; then
      43. WASMOUNTED=0
      44. # Das Verzeichnis ist nicht gemountet, also muss ein wenig geprueft werden
      45. while [ `ping -c 3 $SERVERIP | echo $1` -ne 0 ]; do
      46. # Die IP ist nicht anpingbar, also nun das Magic Paket schicken
      47. $WOL $SERVERMAC
      48. sleep 60
      49. done
      50. $MOUNT -t cifs -o user=$SERVERUSER,pass=$SERVERPASS \\$SERVERIP\$SERVERSHARE $MOUNTDIR || exit 1
      51. fi
      52. # Offene Dateien auslesen, die sich in $BASEDIR befinden und von der Box gerade gespeichert werden
      53. OPENFILES=`$LSOF $BASEDIR | grep enigma2`
      54. # Dateien auslesen, die sich in $BASEDIR befinden
      55. for i in $BASEDIR/*.ts; do
      56. # Nur Dateien anfassen, die gerade NICHT beschrieben werden
      57. if [ `echo $OPENFILES | grep "$i" | wc -l` -eq 0 ]; then
      58. if [ -e "$i" ]; then
      59. # Endung abschnippeln und Leerzeichen maskieren
      60. BASENAME=`echo "$i" | sed 's/\.ts$//' | sed 's/ /\\\\ /g'`.\*
      61. # Datei verschieben und im Falle des Erfolgs alle anderen dazugehoerigen Dateien auf der Box (nicht auf dem Netzwerkshare) loeschen
      62. mv "$i" $DESTDIR && rm $BASENAME
      63. fi
      64. fi
      65. done
      66. # Wenn das Verzeichnis vorher nicht gemountet war, soll es danach auch nicht gemountet sein
      67. if [ $WASMOUNTED -eq 0 ]; then
      68. umount $MOUNTDIR
      69. fi
      70. exit 0
      Alles anzeigen


      Wer also eine ähnliche Konstellation hat, kann mein Script gerne als Basis verwenden. Verwendung ist allerdings auf eigene Gefahr, ich übernehme keine Gewähr, wenn Datenverlust (der eigentlich nicht auftreten sollte) auftritt. Es setzt auch die Installation von "lsof" und "busybox" voraus (und bricht auch mit entsprechender Fehlermeldung ab).

      Grüsse,
      Wolfgang
    • Und hier noch mein Script, das ich dann auf meinem NAS laufen lasse (auch wieder via Cronjob). Allerdings übernimmt es momentan nur das Transcoding und muss mit der umzuformenden *.ts-Datei als Parameter gefüttert werden:

      ./recode.sh Aufnahme-vom-Receiver-mit-ganz-tollen-Bildern.ts

      Shell-Script

      1. #!/bin/bash
      2. HB=/usr/local/bin/HandBrakeCLI
      3. FILE=$1
      4. # Leerzeichen entfernen
      5. NEW=`echo "$FILE" | tr " " "_"`
      6. if [ "$FILE" != "$NEW" ]; then
      7. mv "$FILE" "$NEW"
      8. FILE=`echo "$NEW"`
      9. fi
      10. FILE2=`echo ${FILE%.*}.mp4`
      11. # Erstmal feststellen, was da so alles drinsteckt
      12. FILEINFO=`$HB --scan -i $FILE 2>&1`
      13. SIZE=`echo "$FILEINFO" | grep "size:" | cut -d ":" -f2 | cut -d"," -f1 | tr -d " "`
      14. WIDTH=`echo $SIZE | cut -d"x" -f1`
      15. HEIGHT=`echo $SIZE | cut -d"x" -f2`
      16. if [ $HEIGHT -gt 720 ]; then
      17. OHEIGHT=720
      18. else
      19. OHEIGHT=$HEIGHT
      20. fi
      21. AUDIO1=`echo "$FILEINFO" | grep -h -n "audio tracks:" | cut -d":" -f1`
      22. AUDIO2=`echo "$FILEINFO" | grep -h -n "subtitle tracks:" | cut -d":" -f1`
      23. AUDIO1=$[$AUDIO1+1]
      24. ACHANS=$[$AUDIO2-$AUDIO1]
      25. AUDIOLINES=`echo "$FILEINFO" | tail -n+$AUDIO1 | head -n$ACHANS`
      26. for i in `seq 1 $ACHANS`; do
      27. if [ $i -eq 1 ]; then
      28. AUDIO="1"
      29. AUDIOCODEC=`echo "$AUDIOLINES" | head -n1 | cut -d"(" -f2 | cut -d")" -f1`
      30. AUDIONAME=`echo "$AUDIOLINES" | head -n1 | cut -d"," -f2 | cut -d"(" -f1 | tr -s [:blank:] | tr -d " " `
      31. else
      32. AUDIO="$AUDIO,$i"
      33. AUDIOCODEC="$AUDIOCODEC,"`echo "$AUDIOLINES" | tail -n+$i | head -n1 | cut -d'(' -f2 | cut -d')' -f1`
      34. AUDIONAME="$AUDIONAME,"`echo "$AUDIOLINES" | tail -n+$i | head -n1 | cut -d"," -f2 | cut -d"(" -f1 | tr -s [:blank:] | tr -d " "`
      35. fi
      36. done
      37. TRANSCODE="$HB -e x264 -q 22 -f mp4 -a $AUDIO -E $AUDIOCODEC -A $AUDIONAME -l $OHEIGHT -i $FILE -o $FILE2"
      38. $TRANSCODE
      Alles anzeigen



      Das Script nimmt die *.ts-Datei entgegen, schaut nach, wieviele Audiostreams vorhanden sind und schleift die im Grunde 1:1 durch an die zu erstellende *.mp4-Datei.
      SD-Aufnahmen (also mit weniger als 720 Pixel Höhe) sollte das Script von der Größe her lassen, 1080p oder 1080i-Aufnahmen (also alles mit mehr als 720 Pixel Höhe) wird auf 720p runterskaliert (einfach aus dem Grund, weil ich hier mit meinen Clients ein relativ schwaches WLAN habe dank Stahlbeton en masse und die 720p-Aufnahmen ein guter Kompromiss zwischen Ruckel/Stottershow und Qualität sind).

      So 100% ausgereift ist das Script noch nicht, ich habe einfach noch zu wenige Aufnahmen damit konvertiert, um wirklich sagen zu können "Yep, das klappt immer unter allen Umständen" - deswegen auch hier: Verwendung auf eigene Gefahr, ich übernehme keine Garantie.

      Achja, für das Transcoding benötigt das Script natürlich auch das schöne OpenSource-Programm Handbrake. Auf der verlinkten Seite steht auch recht schön erklärt, wie man das Päckchen compilieren kann und vielleicht habt ihr ja Glück und es existiert schon eine Binary für das System, das ihr auf eurem NAS verwendet.
    • Hi,

      wow, das ist so in etwa das, was ich gesucht habe :)
      Mein Szenario:
      Ich habe neben der Solo² noch ein NAS und einen etwas älteren Rechner mit Lubuntu 14.04 LTS am Laufen.
      Die Solo² speichert ihre Aufnahmen bereits direkt auf das NAS, mehr passiert momentan aber noch nicht.

      Jetzt würde ich gerne den internen DVD-Brenner des Rechners dazu nutzen, um Aufnahmen der Solo² vom NAS weg zu konvertieren und als Video DVD zu brennen (z.B. zur Weitergabe e.t.c.)

      Ich habe überlegt, ob ich mit MEncoder weiterkomme... wiki.ubuntuusers.de/mencoder. Lt diesem Post: vuplus-support.org/wbb3/index.…hlight=mencoder#post57684 ist es wohl möglich, damit die Dateien der solo² auszulesen und in alles zu konvertieren, was man möchte.
      Wobei das Handbrake wohl auch nicht sooo schlecht sein soll (und DVDs wohl sauber ins VU+ einlesen kann).

      Ich werde mir Dein zweites Skript mal näher angucken und sehen, wie ich mich da einklinken kann ;)
      VU+ Uno 4k SE, VTI 14.0.2
      VU+ Solo², VTI 13.0.9

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von AndyMu ()