Aufnahmen viel größer als Nutzdaten

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

    • Kingspring schrieb:

      dass drei Timer kurz nacheinander zu Ende waren und somit das Skript 3 mal kurz nacheinander aufgerufen wurde
      Tipp hierfür: eine Datei mit der Prozess-Id (Variable $$ in bash) im Konvertierungs-Verzeichnis anlegen, die überprüft wird, ob schon ein Job läuft. Diese Datei wird am Ende des Script wieder gelöscht (schau für die Bash mal nach "trap"). Sicherheitshalber kannst du eine solche Datei auch in einem Init-Script löschen, wenn du nicht zusätzlich mit "ps" nach dem laufenden Prozess suchst.
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.
    • Ja, Prozess-ID abfragen wäre der richtige Weg! Den Befehl "trap" kannte ich noch nicht, sehr interessant was man damit machen kann!
      Macht Enigma2 nicht beim Abbrechen eines Timer und Neu-Setzen bei gleichem Dateinamen hinten ein "001" o.ä. hin?

      Aber ich denke, am "saubersten" ist ein Cronjob, der z.B. alle 15 Minuten aufgerufen wird. Dann braucht man keinen Autostart und es kommen sich keine Mehrfachaufrufe ins Gehege.
      Bei einer evtl. Neuinstallation des Systems hat man das schneller wieder am Laufen.
      Also: im "onrecend.sh" wird nur noch der Name der zu konvertierenden Datei in die Queue geschrieben, fertig.
      Der Cronjob ruft regelmäßig "onrecend_convert.sh" auf und arbeitet die Queue ab. Wenn genau zu dieser Zeit ein neuer Eintrag geschrieben wird, wird dieser beim nächsten Cron-Aufruf abgearbeitet.
      Die Logdatei wird noch auf die Festplatte geschrieben, später kann man das wieder in TMP speichern.
      Hier die Dateien, in den Bemerkungen am Anfang stehen noch ein paar Erläuterungen. Ich finde es ganz praktisch direkt hier das Wichtigste hineinzuschreiben, dann verliert man's nicht :D

      Shell-Script: onrecend.sh

      1. #!/bin/bash
      2. # Plugin OnRecEnd von rdamas installieren
      3. # entweder aus TMP-Verzeichnis im VTI-Panel oder
      4. # ipkg install /tmp/enigma2-plugin-extensions-onrecend_0.1_all.ipk
      5. # Dann dieses Skript sowie das "onrecend_convert.sh" in diesen Pfad kopieren:
      6. # /usr/lib/enigma2/python/Plugins/Extensions/OnRecEnd
      7. # und beide ausführbar machen (Rechte 755)
      8. # Und das modifizierte "plugin.py", damit auch wiederholende Timer berücksichtigt werden!
      9. # ffmpeg installieren (installiert auch ffprobe mit)
      10. # opkg install ffmpeg
      11. TSFILE=$1
      12. # LOGFILE="/var/log/onrecend.log"
      13. LOGFILE="/media/hdd/movie/audio/onrecend.log"
      14. TSPATH="/media/hdd/movie/"
      15. OUTPUTPATH="/media/hdd/movie/audio/"
      16. OUTPUTQUEUE="/media/hdd/movie/audio/queue/"
      17. # Test, ob Verzeichnisse bereits existieren
      18. DATUM=$(date +%Y%m%d-%H%M%S)
      19. if [ -d "$OUTPUTPATH" ]; then
      20. echo "$DATUM $OUTPUTPATH already exists" >> $LOGFILE
      21. else
      22. echo "$DATUM creating directory $OUTPUTPATH" >> $LOGFILE
      23. mkdir $OUTPUTPATH
      24. fi
      25. if [ -d "$OUTPUTQUEUE" ]; then
      26. echo "$DATUM $OUTPUTQUEUE already exists" >> $LOGFILE
      27. else
      28. echo "$DATUM creating directory $OUTPUTQUEUE" >> $LOGFILE
      29. mkdir $OUTPUTQUEUE
      30. fi
      31. DATUM=$(date +%Y%m%d-%H%M%S)
      32. echo "$DATUM recording stopped '$TSFILE'" >> $LOGFILE
      33. # Queue Eintrag anlegen
      34. DATUM=$(date +%Y%m%d-%H%M%S)
      35. echo "$DATUM creating $OUTPUTQUEUE$TSFILE" >> $LOGFILE
      36. touch "$OUTPUTQUEUE$TSFILE"
      37. # Fertig
      38. DATUM=$(date +%Y%m%d-%H%M%S)
      39. echo "$DATUM closing onrecend.sh" >> $LOGFILE
      Alles anzeigen

      Shell-Script: onrecend_convert.sh

      1. #!/bin/bash
      2. # Dieses Skript wird als Cronjob alle 15 Minuten aufgerufen
      3. # Dazu im VTi-Panel einen neuen Cronjob anlegen (VTi Systemwerkzeuge - Cronjob-Verwaltung)
      4. # Auszuführender Befehl: /usr/lib/enigma2/python/Plugins/Extensions/OnRecEnd/onrecend_convert.sh
      5. # Minute eingeben: */15
      6. # Damit wird in /etc/cron/crontabs eine Datei "root" mit diesem Inhalt angelegt:
      7. # */15 * * * * /usr/lib/enigma2/python/Plugins/Extensions/OnRecEnd/onrecend_convert.sh
      8. # (Neustart der Box zum Aktivieren nicht vergessen!)
      9. # LOGFILE="/var/log/onrecend.log"
      10. LOGFILE="/media/hdd/movie/audio/onrecend.log"
      11. TSPATH="/media/hdd/movie/"
      12. OUTPUTPATH="/media/hdd/movie/audio/"
      13. OUTPUTQUEUE="/media/hdd/movie/audio/queue/"
      14. DATUM=$(date +%Y%m%d-%H%M%S)
      15. echo "$DATUM starting onrecend_convert.sh" >> $LOGFILE
      16. # Test, ob Verzeichnisse bereits existieren
      17. if [ -d "$OUTPUTPATH" ]; then
      18. echo "$DATUM $OUTPUTPATH already exists" >> $LOGFILE
      19. else
      20. echo "$DATUM creating directory $OUTPUTPATH" >> $LOGFILE
      21. mkdir $OUTPUTPATH
      22. fi
      23. if [ -d "$OUTPUTQUEUE" ]; then
      24. echo "$DATUM $OUTPUTQUEUE already exists" >> $LOGFILE
      25. else
      26. echo "$DATUM creating directory $OUTPUTQUEUE" >> $LOGFILE
      27. mkdir $OUTPUTQUEUE
      28. fi
      29. # Im Verzeichnis $OUTPUTQUEUE liegen die Dateinamen der beendeten Aufnahmen
      30. cd $OUTPUTQUEUE
      31. for QUEUE in *; do
      32. TSFILE="$QUEUE"
      33. # extension mit %.* abschneiden!
      34. OUTPUTFILEWAV="${TSFILE%.*}.wav"
      35. OUTPUTFILEMP2="${TSFILE%.*}.mp2"
      36. EITFILE="$TSPATH${TSFILE%.*}.eit"
      37. DATUM=$(date +%Y%m%d-%H%M%S)
      38. echo "$DATUM found '$TSFILE'" >> $LOGFILE
      39. if [[ $TSFILE =~ "SWR1" || $TSFILE =~ "SWR2" || $TSFILE =~ "SWR3" || $TSFILE =~ "SWR4" \
      40. || $TSFILE =~ "WDR 3" || $TSFILE =~ "WDR 4" || $TSFILE =~ "WDR 5" || $TSFILE =~ "Bayern" \
      41. || $TSFILE =~ "NDR1" || $TSFILE =~ "1LIVE" || $TSFILE =~ "hr2" || $TSFILE =~ "radioeins" \
      42. || $TSFILE =~ "Bremen Zwei" || $TSFILE =~ "Absolute 80s" ]]; then
      43. echo "$DATUM demuxing '$TSFILE' to WAV" >> $LOGFILE
      44. ffmpeg -i "$TSPATH$TSFILE" -vn "$OUTPUTPATH$OUTPUTFILEWAV"
      45. DATUM=$(date +%Y%m%d-%H%M%S)
      46. echo "$DATUM demuxed to '$OUTPUTFILEWAV'" >> $LOGFILE
      47. if [ -f "$EITFILE" ]; then
      48. cp "$EITFILE" "${OUTPUTPATH}."
      49. echo "$DATUM eventinfo '$EITFILE' copied to path '${OUTPUTPATH}.'" >> $LOGFILE
      50. fi
      51. else
      52. if [[ $TSFILE =~ "BBC R2" || $TSFILE =~ "SRF 1" || $TSFILE =~ "SRF 2" || $TSFILE =~ "Dlf" ]]; then
      53. echo "$DATUM demuxing '$TSFILE' to MP2" >> $LOGFILE
      54. ffmpeg -i "$TSPATH$TSFILE" -acodec copy -vn "$OUTPUTPATH$OUTPUTFILEMP2"
      55. DATUM=$(date +%Y%m%d-%H%M%S)
      56. echo "$DATUM demuxed to '$OUTPUTFILEMP2'" >> $LOGFILE
      57. if [ -f "$EITFILE" ]; then
      58. cp "$EITFILE" "${OUTPUTPATH}."
      59. echo "$DATUM eventinfo '$EITFILE' copied to path '${OUTPUTPATH}.'" >> $LOGFILE
      60. fi
      61. else
      62. echo "$DATUM not demuxing '$TSFILE'" >> $LOGFILE
      63. fi
      64. fi
      65. # Queue Eintrag löschen
      66. echo "$DATUM deleting '$TSFILE'" >> $LOGFILE
      67. rm "$OUTPUTQUEUE$TSFILE"
      68. done
      Alles anzeigen
    • Da es mir um die Radioaufnahmen geht, habe ich das "onrecend_convert.sh" umgeschrieben.
      Jetzt frage ich mit "ffprobe" ab, ob es sich um eine TV- oder Radioaufnahme handelt. Und wenn Radio, ob AAC, MP2 oder AC3 verwendet wird. Je nachdem konvertiere oder demuxe ich dann.
      "ffprobe" wird automatisch bei der Installation von "ffmpeg" mitinstalliert.
      Hier die beiden Shellskripte, die wichtigsten Infos dazu sind als Kommentarzeilen darin enthalten!

      Shell-Script: onrecend.sh

      1. #!/bin/bash
      2. # Dieses Skript wird automatisch am Ende einer Aufnahme ausgeführt!
      3. # Plugin OnRecEnd von rdamas installieren
      4. # entweder aus TMP-Verzeichnis im VTI-Panel oder
      5. # ipkg install /tmp/enigma2-plugin-extensions-onrecend_0.1_all.ipk
      6. # Dann dieses Skript sowie das "onrecend_convert.sh" in diesen Pfad kopieren:
      7. # /usr/lib/enigma2/python/Plugins/Extensions/OnRecEnd
      8. # und beide ausführbar machen (Rechte 755)
      9. # Und das modifizierte "plugin.py", damit auch wiederholende Timer berücksichtigt werden!
      10. # ffmpeg installieren (installiert auch ffprobe mit)
      11. # opkg install ffmpeg
      12. TSFILE=$1
      13. # LOGFILE="/var/log/onrecend.log"
      14. LOGFILE="/media/hdd/movie/audio/onrecend.log"
      15. TSPATH="/media/hdd/movie/"
      16. OUTPUTPATH="/media/hdd/movie/audio/"
      17. OUTPUTQUEUE="/media/hdd/movie/audio/queue/"
      18. DATUM=$(date +%Y%m%d-%H%M%S)
      19. echo "$DATUM starting onrecend.sh" >> $LOGFILE
      20. # Test, ob Verzeichnisse bereits existieren
      21. DATUM=$(date +%Y%m%d-%H%M%S)
      22. if ! [ -d "$OUTPUTPATH" ]; then
      23. echo "$DATUM creating directory $OUTPUTPATH" >> $LOGFILE
      24. mkdir $OUTPUTPATH
      25. fi
      26. if ! [ -d "$OUTPUTQUEUE" ]; then
      27. echo "$DATUM creating directory $OUTPUTQUEUE" >> $LOGFILE
      28. mkdir $OUTPUTQUEUE
      29. fi
      30. DATUM=$(date +%Y%m%d-%H%M%S)
      31. echo "$DATUM recording stopped '$TSFILE'" >> $LOGFILE
      32. # Queue Eintrag anlegen
      33. DATUM=$(date +%Y%m%d-%H%M%S)
      34. echo "$DATUM creating $OUTPUTQUEUE$TSFILE" >> $LOGFILE
      35. touch "$OUTPUTQUEUE$TSFILE"
      36. # Fertig
      37. DATUM=$(date +%Y%m%d-%H%M%S)
      38. echo "$DATUM closing onrecend.sh" >> $LOGFILE
      Alles anzeigen

      Shell-Script: onrecend_convert.sh

      1. #!/bin/bash
      2. # Dieses Skript wird als Cronjob alle 15 Minuten aufgerufen
      3. # und konvertiert Radioaufnahmen von TS nach WAV, MP2, AC3
      4. # Dazu im VTi-Panel einen neuen Cronjob anlegen (VTi Systemwerkzeuge - Cronjob-Verwaltung)
      5. # Auszuführender Befehl: /usr/lib/enigma2/python/Plugins/Extensions/OnRecEnd/onrecend_convert.sh
      6. # Minute eingeben: */15
      7. # Damit wird in /etc/cron/crontabs eine Datei "root" mit diesem Inhalt angelegt:
      8. # */15 * * * * /usr/lib/enigma2/python/Plugins/Extensions/OnRecEnd/onrecend_convert.sh
      9. # (Neustart der Box zum Aktivieren nicht vergessen!)
      10. # Strings die mit dem ffprobe Befehl gefunden werden:
      11. # MPEG-2 video (BBC, ÖR SD-Programme)
      12. # H.264 / AVC / MPEG-4 (BBC HD, ÖR HD-Programme)
      13. # H.265 (UHD Programme)
      14. # MP2 / MPEG audio layer 2 (BBC Radio, DLF, SRF Radio)
      15. # AAC LATM / aac_latm (ÖR Radios)
      16. # ac3 / ATSC A/52A (AC-3) (NDR Kultur)
      17. # MP3 / MPEG audio layer 3 (IP Radio)
      18. # LOGFILE="/var/log/onrecend.log"
      19. LOGFILE="/media/hdd/movie/audio/onrecend.log"
      20. TSPATH="/media/hdd/movie/"
      21. OUTPUTPATH="/media/hdd/movie/audio/"
      22. OUTPUTQUEUE="/media/hdd/movie/audio/queue/"
      23. DATUM=$(date +%Y%m%d-%H%M%S)
      24. echo "$DATUM starting onrecend_convert.sh" >> $LOGFILE
      25. # Test, ob Verzeichnisse bereits existieren
      26. if ! [ -d "$OUTPUTPATH" ]; then
      27. echo "$DATUM creating directory $OUTPUTPATH" >> $LOGFILE
      28. mkdir $OUTPUTPATH
      29. fi
      30. if ! [ -d "$OUTPUTQUEUE" ]; then
      31. echo "$DATUM creating directory $OUTPUTQUEUE" >> $LOGFILE
      32. mkdir $OUTPUTQUEUE
      33. fi
      34. # Im Verzeichnis $OUTPUTQUEUE liegen die Dateinamen der beendeten Aufnahmen
      35. cd $OUTPUTQUEUE
      36. for QUEUE in *; do
      37. if [ "$QUEUE" != "*" ]; then
      38. TSFILE="$QUEUE"
      39. # extension mit %.* abschneiden!
      40. OUTPUTFILEWAV="${TSFILE%.*}.wav"
      41. OUTPUTFILEMP2="${TSFILE%.*}.mp2"
      42. OUTPUTFILEAC3="${TSFILE%.*}.ac3"
      43. EITFILE="$TSPATH${TSFILE%.*}.eit"
      44. DATUM=$(date +%Y%m%d-%H%M%S)
      45. echo "$DATUM found '$TSFILE'" >> $LOGFILE
      46. # Test, ob ein MP3 Stream vorhanden ist (IP-Radioaufnahme)
      47. MP3TEST=$(ffprobe -show_entries stream=codec_name,codec_long_name -v quiet "$TSPATH$TSFILE" | grep -c -i "MP3")
      48. # Test, ob ein MP2 Stream vorhanden ist
      49. MP2TEST=$(ffprobe -show_entries stream=codec_name,codec_long_name -v quiet "$TSPATH$TSFILE" | grep -c -i "MP2")
      50. # Test, ob ein AC3 Stream vorhanden ist
      51. AC3TEST=$(ffprobe -show_entries stream=codec_name,codec_long_name -v quiet "$TSPATH$TSFILE" | grep -c -i "ac3")
      52. # Test, ob ein AAC Stream vorhanden ist
      53. AACTEST=$(ffprobe -show_entries stream=codec_name,codec_long_name -v quiet "$TSPATH$TSFILE" | grep -c -i "aac")
      54. # Test, ob es sich um eine Radioaufnahme handelt, also kein Video Stream vorhanden ist
      55. VIDEOTEST=$(ffprobe -show_entries stream=codec_name,codec_long_name -v quiet \
      56. "$TSPATH$TSFILE" | grep -c -i -e "MPEG-2" -e "h.264" -e "h.265")
      57. # Streamtests
      58. echo "$DATUM VIDEO=$VIDEOTEST MP3=$MP3TEST MP2=$MP2TEST AC3=$AC3TEST AAC=$AACTEST" >> $LOGFILE
      59. # Alte Methode:
      60. # if [[ $TSFILE =~ "SWR1" || $TSFILE =~ "SWR2" || $TSFILE =~ "SWR3" || $TSFILE =~ "SWR4" ]]; then
      61. # Nur wenn kein Videostream und kein MP3-Stream vorhanden ist!
      62. if [[ $VIDEOTEST = 0 && $MP3TEST = 0 ]]; then
      63. # Wenn AAC vorhanden, nach WAV konvertieren
      64. if [[ $AACTEST != 0 ]]; then
      65. echo "$DATUM demuxing '$TSFILE' to WAV" >> $LOGFILE
      66. ffmpeg -i "$TSPATH$TSFILE" -vn "$OUTPUTPATH$OUTPUTFILEWAV"
      67. DATUM=$(date +%Y%m%d-%H%M%S)
      68. echo "$DATUM demuxed to '$OUTPUTFILEWAV'" >> $LOGFILE
      69. fi
      70. # Wenn MP2 vorhanden, nur MP2 demuxen
      71. if [[ $MP2TEST != 0 ]]; then
      72. echo "$DATUM demuxing '$TSFILE' to MP2" >> $LOGFILE
      73. ffmpeg -i "$TSPATH$TSFILE" -acodec copy -vn "$OUTPUTPATH$OUTPUTFILEMP2"
      74. DATUM=$(date +%Y%m%d-%H%M%S)
      75. echo "$DATUM demuxed to '$OUTPUTFILEMP2'" >> $LOGFILE
      76. fi
      77. # Wenn AC3 vorhanden, nur AC3 demuxen
      78. if [[ $AC3TEST != 0 ]]; then
      79. echo "$DATUM demuxing '$TSFILE' to AC3" >> $LOGFILE
      80. ffmpeg -i "$TSPATH$TSFILE" -acodec copy -vn "$OUTPUTPATH$OUTPUTFILEAC3"
      81. DATUM=$(date +%Y%m%d-%H%M%S)
      82. echo "$DATUM demuxed to '$OUTPUTFILEAC3'" >> $LOGFILE
      83. fi
      84. # Wenn Eventinformation vorhanden, diese einfach dazu kopieren
      85. if [[ -f "$EITFILE" ]]; then
      86. cp "$EITFILE" "${OUTPUTPATH}."
      87. echo "$DATUM eventinfo '$EITFILE' copied to path '${OUTPUTPATH}.'" >> $LOGFILE
      88. fi
      89. else
      90. # Videostream oder MP3-Stream wird nicht ausgewertet
      91. DATUM=$(date +%Y%m%d-%H%M%S)
      92. echo "$DATUM not evaluating '$TSFILE'" >> $LOGFILE
      93. fi
      94. # Queue Eintrag löschen
      95. DATUM=$(date +%Y%m%d-%H%M%S)
      96. echo "$DATUM deleting in queue '$TSFILE'" >> $LOGFILE
      97. rm "$OUTPUTQUEUE$TSFILE"
      98. fi
      99. done
      100. # Fertig
      101. DATUM=$(date +%Y%m%d-%H%M%S)
      102. echo "$DATUM closing onrecend_convert.sh" >> $LOGFILE
      Alles anzeigen