Korrektur fehlerhafter Indexdateien IDX/RAP

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

    • Korrektur fehlerhafter Indexdateien IDX/RAP

      Eisha schrieb:

      Spulen mit den Cursor-Tasten (Links/Rechts) funktioniert nur bedingt
      Bei einigen (nicht allen) Aufnahmen wird beim Spulen mit den Cursor-Tasten immer auf bestimmte Position vor- bzw zurückgesprungen.
      Die bei der Aufnahmen mit erzeugten Indexdateien (idx, rap) enthalten einen fehlerhaften Timecode.
      Bei Verwendung der normalen Spultasten oder genügend weites Überspulen der Position oder durch Löschen der Indexdateien (Aufnahme < 4GB) kann das Problem umgangen werden.

      Da dies Problem auch in der V10794 vorhanden ist gab von maxodil den Vorschlag ein Plugin zu erstellen mit dem Aufnahmen korrigiert werden.
      Da ein Weglöschen, wie ilchegu herausgefunden hat, der IDX/RAP nur für TS-Dateien < 4 GB funktioniert benötigen man ein Binary welches die IDX/RAP neu ohne Zeitsprünge schreibt.
      Ich habe dazu mit Unterstützung von maxodil das Tool "ForIdx" angefangen zu entwickeln. Es erlaubt erstmal den Test von IDX/RAP auf Zeitsprünge.

      Quellcode

      1. ForIdx <idx> [ ([ -N ] [ -fix ]) | -text ]
      2. <idx> Check Idx/Rap by 2000 ms
      3. <idx> -N Check Idx/Rap by N ms
      4. <idx> -text Output Idx/Rap as text
      5. <idx> -fix Output fixed Idx/Rap as *.fixed

      Der Returncode gibt die Anzahl der gefundenen Zeitsprünge an bzw. 255 bei anderen Fehlern. Des weiteren erfolgt ein Ausgabe der notwendigen Korrekturmaßnahmen.

      Quellcode

      1. D:\Octagon\Aufnahme\Indexfehler>ForIdx.exe Goetter.idx
      2. Index time jump at
      3. 00:05:05.366 B380C
      4. 00:23:18.126 B3872
      5. ==> CurDelta: Time= 1092760 Pack= 66
      6. ==> AvgDelta: Time= 100 Pack= F3
      7. ==> new Corr: Time= 1092660 ms (00:18:12.660)
      8. Index time jump at
      9. 00:25:13.160 F98D0
      10. 00:36:47.575 FA000
      11. ==> CurDelta: Time= 694415 Pack= 730
      12. ==> AvgDelta: Time= 100 Pack= F5
      13. ==> new Corr: Time= 1786975 ms (00:29:46.975)
      14. D:\Octagon\Aufnahme\Indexfehler>echo %errorlevel%
      15. 2
      Alles anzeigen

      Für IDX-Dateien die fortlaufen alle 100 ms einen Eintrag erzeugen kann mit der Option "-fix" bereits eine korrigierte Datei "*.idx.fixed" ausgegeben werden.
      Es geht auch so für RAP-Dateien. Bei diesen ist aber der gemittelte Korrekturwert für den Zeitsprung nicht korrekt. Des wegen würde ich die Korrektur gemeinsam für IDX und RAP vornehmen wollen um die Info aus der IDX-Korrektur für die RAP zu verwenden.

      Wer möchte kann es gerne mit testen.
      Im Anhang findet ihr:
      - ein Binary "ForIdx" für STLinux. Nach "/var/" kopieren und mit "chmod 755 ForIdx" ausführbar machen.
      - ein VS2005-Excutable "ForIdx.exe" für den Vorabtest unter Windows
      - den Quellcode mit Kommentaren
      Dateien
      • ForIdx.zip

        (11,82 kB, 19 mal heruntergeladen, zuletzt: )
      +++ Octagon SF-1018 HD +++ Philips 32PFL9604 +++
      --- Bastel I: Icecrypt S4000 ---
    • Update bzgl. an IDX-Fix gekoppeltes RAP-Fix

      Bei diesen ist aber der gemittelte Korrekturwert für den Zeitsprung nicht korrekt. Des wegen würde ich die Korrektur gemeinsam für IDX und RAP vornehmen wollen um die Info aus der IDX-Korrektur für die RAP zu verwenden.
      erledigt

      Quellcode

      1. ForIdx <idx/rap> [ -N | -text ]
      2. <idx/rap> Check Idx or Rap by 2000 ms
      3. <idx/rap> -N Check Idx or Rap by N ms
      4. <idx/rap> -text Output Idx or Rap as text
      5. ForIdx -fix <idx> [ -N ]
      6. -fix <idx> Output fixed Idx and Rap as *.fixed
      Dateien
      • ForIdx.zip

        (13,24 kB, 5 mal heruntergeladen, zuletzt: )
      +++ Octagon SF-1018 HD +++ Philips 32PFL9604 +++
      --- Bastel I: Icecrypt S4000 ---
    • Habs gerade mit einer Aufnahme von gestern getestet. Da war ein grosser Sprung drinnen:

      Quellcode

      1. Index time jump at
      2. 00:38:00.347 C442CE
      3. 01:41:15.761 C44454
      4. ==> CurDelta: Time= 3795414 Pack= 186
      5. ==> AvgDelta: Time= 110 Pack= 271
      6. ==> new Corr: Time= 3795304 ms (01:03:15.304)


      Nach dem Fix lässt sich die Aufmahe normal spulen :thumbup:

      Werde es jetzt an meiner 5 Stunden langen Start-Trek Aufnahme testen. Dabei ist das Programm ja beim ersten Test abgestürzt.
    • Das hat nun auch geklappt:

      Quellcode

      1. Index time jump at
      2. 02:14:53.030 D0CE53
      3. 03:18:08.444 D0CF17
      4. ==> CurDelta: Time= 3795414 Pack= C4
      5. ==> AvgDelta: Time= 102 Pack= AC
      6. ==> new Corr: Time= 3795312 ms (01:03:15.312)


      Konnte nun auch endlich 6 Sprungmarken setzen. Nach der fehlerhaften Stelle ließen sich vorher keine Sprungmarken mehr setzen.

      Jetzt stellt sich noch die Frage, wie man das nun am besten realisiert, dass man seine Aufnahmen damit schnell und einfach reparieren kann.
    • Jetzt stellt sich noch die Frage, wie man das nun am besten realisiert, dass man seine Aufnahmen damit schnell und einfach reparieren kann.

      Ich sehe z.Zt. nur folgenden Plugin-Ansatze:
      Unterordner "/STORAGE/HDD/ForIdx" in den die betroffenen Aufnahme verschoben "Gehe zum Ordner" ( "Verschieben nach" hätte es auch getan ) wird. Danach wird über Plugin ein Shellskript aufgerufen welches die darin befindlichen IDX/RAP fixt, die Originale löscht und die Fixes umbenennt.
      Vorteil ist ein relativ einfaches Skript und die anwendergesteuerte Eingrenzung auf bestimmte Aufnahmen.
      Nachteil es geht nicht vollautomatisch. Dies wäre über das Auswerten des Datums zwar machbar und geht auch relativ schnell, gefällt mir aber nicht wirklich.
      +++ Octagon SF-1018 HD +++ Philips 32PFL9604 +++
      --- Bastel I: Icecrypt S4000 ---
    • ilchegu schrieb:

      Werde es jetzt an meiner 5 Stunden langen Start-Trek Aufnahme testen. Dabei ist das Programm ja beim ersten Test abgestürzt.
      Das Programm nicht :ironie:

      Quellcode

      1. /var # ./ForIdx /STORAGE/HDD/Dominik/Die\ Liga\ der\ au▀ergew÷hnlichen\ Gentlemen.idx -fix
      2. Index time jump at
      3. 00:43:46.739 6EDCDA
      4. 01:47:02.153 6EDE30
      5. ==> CurDelta: Time= 3795414 Pack= 156
      6. ==> AvgDelta: Time= 101 Pack= 11A
      7. ==> new Corr: Time= 3795313 ms (01:03:15.313)

      Was will uns der Zeitsprung der 3 Aufnahmen wohl sagen? Hmm....
      +++ Octagon SF-1018 HD +++ Philips 32PFL9604 +++
      --- Bastel I: Icecrypt S4000 ---

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Eisha ()

    • Eisha schrieb:

      Hat den Fehler nun schon jemand mit der V10794 in freier Wildbahn wieder gehabt?


      Ja. Heute Aufnahme zeitversetzt geschaut, Wiedergabe wurde dann vom Receiver kurz vor Schluss abgebrochen, wollte nach Neustart wieder hinspulen und rabäh!!! der blöde Fehler war wieder da.
      "Das Leben ist ungerecht, aber denke daran: nicht immer zu deinen Ungunsten."
      (John F. Kennedy)

      Brave Mädchen kommen in den Himmel, böse überall hin

    • Anbei ein Bündel zum testen. Diesmal:
      - STLinux binary ==> "ForIdx <idx> -fix" ersetzt jetzt IDX/RAP am Ende, nicht mehr "*.idx.fixed" wegen Restmüll
      - VS2005 Exe
      - Quellcode
      - Shellskript zum Test nach "/var/" kopieren, mit "sh ForIdx.sh" aufrufen, arbeitet vorläufig mit "/STORAGE/HDD/Temp/"

      Ob das Binary z.B. eher unter "/var/usr/bin/" kommt hab ihr durch die CAM's bestimmt mehr Ahnung.
      Das Skript muss dann ja unter "/var/bin" ohne sh-Erweiterung mit einem klangvollen namen.
      Unter "/var/" werden z.Zt. eine Log-Datei und eine LastRun-Datei abgelegt. Ort ist verhandelbar ;)
      Dateien
      • ForIdx.zip

        (14,2 kB, 10 mal heruntergeladen, zuletzt: )
      +++ Octagon SF-1018 HD +++ Philips 32PFL9604 +++
      --- Bastel I: Icecrypt S4000 ---

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Eisha ()

    • Komme heute Abend wieder zum testen, aber das schaut ja schon sehr gut aus.

      Ich habe das bei mir der Übersichtlichkeit halber so organisiert, dass unter /var keine Dateien sondern nur Verzeichnisse liegen. Die Binaries ForTS und ForIdx liegen bei mir unter /var/bin/tools.

      Das Logfile könnte man auch nach /tmp legen, was dann halt zur Folge hätte, dass es beim Ausschalten (Deep Standby) gelöscht wird. Ich glaube, das würde nicht witklich stören?

      Die Lastrun-Datei könnte man z.B. als versteckte Datei .ForIdx_lastrun in das jeweilige Arbeitsverzeichnis (hier also /STORAGE/HDD/Temp) speichern. Das hätte gleich mehrere Vorteile. Zum einen habe ich dann für verschiedene Verzeichnisse verschiedene lastrun-Dateien, was ja durchaus sinnvoll sein kann. Zum anderen bleiben die lastrun-Dateine auch erhalten, wenn der /var-Bereich mal gelöscht wird z.B. durch Formatieren der Userdate nach FW-Upgrade, was oft empfohlen wird.

      Ein Arbeitsverzeichnis wäre also fix eingestellt, bei mir z.B. /STORAGE/HDD. Über das PlugIn-Menu könnte man damit nun also neue Aufnahmen mittels FB in diesem Verzeichnis reparieren. Sinnvoll wäre vielleicht auch die Möglichkeit, bei Aufruf des Scripts über die Shell einen Parameter $1 übergeben zu können, der das Arbeitsverzeichnis überschreibt. So könnte man dann zusätzlich über die Shell verschiedenen Verzeichnisse schnell und einfach reparieren.

      Was haltet ihr davon?
    • Klingt soweit gut, insbesondere "/var/bin/tools/" gefällt mir.

      Shell-Script

      1. #!/bin/sh
      2. if [ -d $1 ] ; then
      3. cd $1
      4. else
      5. cd /STORAGE/HDD/Temp
      6. fi
      7. VFD=""
      8. LOG=/tmp/ForIdx.log
      9. LRN=.ForIdx_lastrun
      10. date > $LOG
      11. vfd_display "ForIdx start"
      12. for i in *.idx ; do
      13. if [ "$i" != "_timeshift.idx" ] ; then # ignore TMS
      14. if [ ! -f $LRN -o "$i" -nt $LRN ] ; then # lastrun exists and idx is newer
      15. if /var/bin/tools/ForIdx "$i" ; then # idx is io
      16. echo "nofix "$i
      17. else # idx has jumps
      18. echo "tofix "$i
      19. /var/bin/tools/ForIdx "$i" -fix >> $LOG
      20. VFD=$VFD"."
      21. vfd_display "ForIdx $VFD"
      22. fi
      23. else # idx is older than last run
      24. echo "older "$i
      25. fi
      26. fi
      27. done
      28. touch /var/ForIdx.lastrun
      29. vfd_display "ForIdx done"
      Alles anzeigen

      Obiges ist noch nicht getestet!!!
      Mit der ".ForIdx_lastrun" im aktuellen Ordner handeln wir uns dann aber ein, dass man diesen nicht mehr über das Menü löschen kann. Sieh hier letzer Punkt
      Ansonsten bliebe nur unter "/var/" eine ".ForIdx_lastrun_(Pfad ohne / )" zu benutzen. Die geht natürlich beim Ablöschen von "/var/" flöten.
      +++ Octagon SF-1018 HD +++ Philips 32PFL9604 +++
      --- Bastel I: Icecrypt S4000 ---
    • Eisha schrieb:

      Mit der ".ForIdx_lastrun" im aktuellen Ordner handeln wir uns dann aber ein, dass man diesen nicht mehr über das Menü löschen kann. Sieh hier letzer Punkt
      Ansonsten bliebe nur unter "/var/" eine ".ForIdx_lastrun_(Pfad ohne / )" zu benutzen. Die geht natürlich beim Ablöschen von "/var/" flöten.







      Aja, an diesen Fehler hatte ich nicht gedacht. Man könnte die ".ForIdx_lastrun_(Pfad ohne / )" aber auch direkt unter /STORAGE/HDD bzw. /STORAGE/USB1 etc abspeichern, anstatt in /var, dann würden sie nicht mehr flöten gehen. Also so in der Art:



      Shell-Script

      1. #!/bin/sh
      2. DEFAULTPATH=/STORAGE/HDD/Temp # standard working directory
      3. LRN_NAME=".ForIdx_lastrun" # base name of lastrun-file
      4. LOG=/tmp/ForIdx.log # logfile
      5. if [ -z "$1" ]; then
      6. WORKINGPATH=$DEFAULTPATH # no argument is given -> standard working directory
      7. else
      8. if [ -d $1 ] ; then
      9. WORKINGPATH=$1 # if first argument is a directory -> working directory
      10. else
      11. echo "ERROR: $1 is not a Directory" # wrong argument
      12. exit 1
      13. fi
      14. fi
      15. #split $WORKINGPATH by slashes (/) and create lastrun-file
      16. #e.g. /STORAGE/HDD/Temp -> /STORAGE/HDD/.ForIdx_lastrun__Temp
      17. LRN="/"`echo $WORKINGPATH | busybox cut -d / -f 2`
      18. LRN=$LRN"/"`echo $WORKINGPATH | busybox cut -d / -f 3`"/"$LRN_NAME
      19. n=4
      20. TMP_LRN=`echo $WORKINGPATH | busybox cut -d / -f $n`
      21. while [ "$TMP_LRN" != "" ]
      22. do
      23. LRN=$LRN"__"$TMP_LRN
      24. let n++
      25. TMP_LRN=`echo $WORKINGPATH | busybox cut -d / -f $n`
      26. done
      27. echo "WORKINGPATH: "$WORKINGPATH
      28. echo "LRN: "$LRN
      29. cd $WORKINGPATH
      30. VFD=""
      31. date > $LOG
      32. vfd_display "ForIdx start"
      33. for i in *.idx ; do
      34. if [ "$i" != "_timeshift.idx" ] ; then # ignore TMS
      35. if [ ! -f $LRN -o "$i" -nt $LRN ] ; then # lastrun exists and idx is newer
      36. if /var/bin/tools/ForIdx "$i" ; then # idx is io
      37. echo "nofix "$i
      38. else # idx has jumps
      39. echo "tofix "$i
      40. /var/bin/tools/ForIdx "$i" -fix >> $LOG
      41. VFD=$VFD"."
      42. vfd_display "ForIdx $VFD"
      43. fi
      44. else # idx is older than last run
      45. echo "older "$i
      46. fi
      47. fi
      48. done
      49. touch $LRN
      50. vfd_display "ForIdx done"
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ilchegu ()

    • Ich habe es erst mal so als "ForIdx__Korrektur_IDX_RAP" ( no space ) zum Laufen gebracht.
      Ob wir lastrun auch für die $1-Ordner brauchen? Eigentlich geht es sehr schnell.

      Shell-Script

      1. #!/bin/sh
      2. WORK_DIR=/STORAGE/HDD/Temp # standard working directory
      3. LOG_FILE=/tmp/ForIdx.log # logfile
      4. if [ -z "$1" ] ; then
      5. # no argument is given -> standard working directory
      6. LRN_FILE=.ForIdx_lastrun # path of lastrun-file, only for plugin mode
      7. echo "LRN_FILE= "$LRN_FILE
      8. else
      9. if [ -d $1 ] ; then
      10. WORK_DIR=$1 # if first argument is a directory -> working directory
      11. else
      12. echo "ERROR: $1 is not a Directory" # wrong argument
      13. exit 1
      14. fi
      15. fi
      16. echo "WORK_DIR= "$WORK_DIR
      17. cd $WORK_DIR
      18. date > $LOG_FILE
      19. VFD=""
      20. vfd_display "ForIdx"
      21. chmod 755 /var/bin/tools/ForIdx
      22. for i in *.idx ; do
      23. if [ "$i" != "_timeshift.idx" ] ; then # ignore TMS
      24. if [ ! -f $LRN_FILE -o "$i" -nt $LRN_FILE ] ; then # lastrun exists and idx is newer
      25. if /var/bin/tools/ForIdx "$i" ; then # return 0 ==> idx is io
      26. echo "nofix "$i
      27. else # idx has jumps
      28. echo "tofix "$i
      29. /var/bin/tools/ForIdx -fix "$i" >> $LOG_FILE
      30. VFD="."$VFD
      31. vfd_display "ForIdx "$VFD
      32. fi
      33. else # idx is older than last run
      34. echo "older "$i
      35. fi
      36. fi
      37. done
      38. if [ -z "$VFD" ] ; then
      39. vfd_display "ForIdx done"
      40. fi
      41. if [ -n "$LRN_FILE" ] ; then
      42. touch $LRN_FILE
      43. fi
      Alles anzeigen


      O ist schon wieder OFF :cursing:
      +++ Octagon SF-1018 HD +++ Philips 32PFL9604 +++
      --- Bastel I: Icecrypt S4000 ---
    • Rechnen ohne 'expr"

      Hi ilchegu, hast du eine Idee, wie man die Anzahl korrigierter IDXen addiert?
      Die Fortis-busybox kennt ja 'expr' offenbar nicht.
      Möchte gerne noch am Ende die VFD-Ausgabe auf "ForIdx NN ok" (sind 12 Zeichen habe nachgezählt!) verbessern.
      +++ Octagon SF-1018 HD +++ Philips 32PFL9604 +++
      --- Bastel I: Icecrypt S4000 ---

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Eisha ()

    • Eisha schrieb:

      Ob wir lastrun auch für die $1-Ordner brauchen? Eigentlich geht es sehr schnell.


      Stimmt, eigentlich brauchen wir das nicht. 1. geht es schnell und 2. wird man in einem Unterordner nicht oft reparieren.

      Eisha schrieb:

      Möchte gerne noch am Ende die VFD-Ausgabe auf "ForIdx NN ok" (sind 12 Zeichen habe nachgezählt!) verbessern.


      Kann man nicht einfach eine Variable mitzählen lassen und die dann ausgeben, bzw. ich weiss jetzt nicht genau, wo dabei ein Problem auftritt?
    • Ich kenne Variablen addieren nur so:

      Quellcode

      1. TIMEOUT=30
      2. TIMER=0
      3. until test $TIMER -eq $TIMEOUT ; do
      4. sleep 1
      5. echo -n "."
      6. TIMER=`expr $TIMER + 1`
      7. done
      und 'expr' kennt er nicht. Naja mal googeln, vielleicht geht es auch anders.

      OK, sehe gerade "let n++", wenn das geht hätte es sich erledigt. ==> ist in der bash drin, hab ich irgendwie voll übersehen.
      +++ Octagon SF-1018 HD +++ Philips 32PFL9604 +++
      --- Bastel I: Icecrypt S4000 ---

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Eisha ()

    • Nun dann sollte es so gehen

      Quellcode

      1. date > $LOG_FILE
      2. VFD=0
      3. vfd_display "ForIdx"
      4. chmod 755 /var/bin/tools/ForIdx
      5. for i in *.idx ; do
      6. if [ "$i" != "_timeshift.idx" ] ; then # ignore TMS
      7. if [ ! -f $LRN_FILE -o "$i" -nt $LRN_FILE ] ; then # lastrun exists and idx is newer
      8. if /var/bin/tools/ForIdx "$i" ; then # return 0 ==> idx is io
      9. echo "nofix "$i
      10. else # idx has jumps
      11. echo "tofix "$i
      12. /var/bin/tools/ForIdx "$i" >> $LOG_FILE
      13. let VFD++
      14. vfd_display "ForIdx $VFD .."
      15. fi
      16. else # idx is older than last run
      17. echo "older "$i
      18. fi
      19. fi
      20. done
      21. vfd_display "ForIdx $VFD ok"
      Alles anzeigen

      So langsam denke ich können wir das wirklich mal als Plugin bauen und veröffentlichen.

      Was hälts du von einem zusätzlichen Plugin mit Namen: "ForIdx-Uninstall" mit folgendem Inhalt:

      Shell-Script

      1. #!/bin/sh
      2. rm /STORAGE/HDD/.ForIdx_lastrun # ggf. mit if fuer HDD, USB1 und USB2
      3. rm /var/bin/tools/ForIdx
      4. rm /var/bin/ForIdx-Korrektur_IDX_RAP
      5. rm /var/bin/ForIdx-Uninstall
      6. exit 0

      Ob sowas Sinn macht?
      +++ Octagon SF-1018 HD +++ Philips 32PFL9604 +++
      --- Bastel I: Icecrypt S4000 ---

    Unsere Partnerboards

    ^
    Flag Counter