Schnittmarken setzen, I-Frame finden

  • Hallo,


    ich würde gerne mit einem Python-Skript Schnittmarken setzen. Gemäß Dokumentation der marks-Datei muss ich dazu neben dem Zeitpunkt (hh.mm.ss) auch die Frame-Nummer eines passenden I-Frame (ff) angeben.


    Auf ein sekundengenaues Schneiden kommt es mir nicht an. Ich suche deshalb eine Funktion, die für einen Wunschzeitpunkt hh.mm.ss den "nächsten" gültigen Wert hh.mm.SS.ff liefert. Gibt's da was, z.B. ein Plugin, das passende SVDRP-Befehle anbietet?


    Danke, Malte

  • Hallo,


    ich würde gerne mit einem Python-Skript Schnittmarken setzen. Gemäß Dokumentation der marks-Datei muss ich dazu neben dem Zeitpunkt (hh.mm.ss) auch die Frame-Nummer eines passenden I-Frame (ff) angeben.


    Auf ein sekundengenaues Schneiden kommt es mir nicht an. Ich suche deshalb eine Funktion, die für einen Wunschzeitpunkt hh.mm.ss den "nächsten" gültigen Wert hh.mm.SS.ff liefert. Gibt's da was, z.B. ein Plugin, das passende SVDRP-Befehle anbietet?


    Seit Version 1.7.32 verschiebt VDR Schnittmarken, die nicht an I-Frames liegen, beim Einlesen der 'marks'-Datei automatisch zum nächstgelegenen I-Frame.


    Klaus

  • Seit Version 1.7.32 verschiebt VDR Schnittmarken, die nicht an I-Frames liegen, beim Einlesen der 'marks'-Datei automatisch zum nächstgelegenen I-Frame.


    Entschuldige bitte, mein Fehler! Ich hatte einen Hinweis darauf hier gefunden, dann aber nur die aktuelle Version von MANUAL kontrolliert, wenn ich doch vdr.5 hätte lesen müssen.


    Reichen ab 1.7.32 Einträge der Form 'hh.mm.ss', oder sollte es besser etwas wie 'hh.mm.ss.00' sein?


    Allerdings würde ich gerne auch Versionen vor 1.7.32 untertützen, zumindest 1.7.29, idealerweise auch 1.6.x. Hat dafür noch jemand einen Ratschlag?


    Malte

  • Moin!


    In der index-Datei ist eigentlich der Frametyp drin:


    Wenn du also die FPS aus der info-Datei holst, kannst du die index-Datei ablaufen und den passenden Zeitstempel aus der Anzahl der Frames ableiten.


    Lars.

  • Wenn du also die FPS aus der info-Datei holst, kannst du die index-Datei ablaufen und den passenden Zeitstempel aus der Anzahl der Frames ableiten.


    Wo findet ich den Wert für FPS für ältere Aufnahmen? Das Feld F gibt es ja erst seit VDR 1.7.3.


    Ich habe mir willkürlich eine ältere Aufzeichnung und deren index- und marks-Datei zum Testen herausgesucht. Wenn ich die Anzahl der Einträge in der index-Datei durch 25/s (mein Ansatz für FPS) teile, "reichen" die Frames genau für die Dauer der Aufzeichnung. Mit der Annahme, das immer 25 Frames zu einer Sekunde der Aufzeichnung gehören, kann ich die Frames identifizieren, die zu derjenigen Sekunde gehören, für die eine Schnittmarke in der marks-Datei gesetzt ist. Und tatsächlich: Innerhalb der Frames dieser Sekunde steht ein I-Frame an der Position, die in der marks-Datei als Frame-Nummer eingetragen ist. Irgendetwas mache ich aber vielleicht noch falsch. Oder ist die Frame-Nummer tatsächlich 1-basiert? Wenn ich die Frames einer Sekunde beginnend mit 0 durchnummeriere, ist die Frame-Nummer immer um eins höher als die Nummer des I-Frames.


    Trotz dieser Zufallserfolge: Mir fehlt noch einiges an Wissen über PES, TS und die index-Datei. Was würdet ihr mir zum Einlesen empfehlen?


    Malte

  • Wo findet ich den Wert für FPS für ältere Aufnahmen? Das Feld F gibt es ja erst seit VDR 1.7.3.


    Im VDR Quellcode ;)


    ---
    #define FRAMESPERSEC 25
    ---
    oder aktuell
    ---
    #define DEFAULTFRAMESPERSECOND 25.0
    ---


    Da (kein F Feld) gibts halt nur Aufnahmen mit 25 FPS.



    cu

  • Für alle, die nicht sofort glauben mögen, dass sich die Sender der Definition der Frame Rate im VDR Quellcode verpflichtet fühlen, habe ich noch einen anderen Beleg gefunden :)


    Und damit meine Frage nicht untergeht: Ist die Frame-Nummer tatsächlich 1-basiert (s. meinen Test oben)?

  • Für alle, die nicht sofort glauben mögen, dass sich die Sender der Definition der Frame Rate im VDR Quellcode verpflichtet fühlen, habe ich noch einen anderen Beleg gefunden :)


    Naja, vor 1.7.3 konnte der VDR halt nur mit Sendern mit 25FPS umgehen, also gibts da per Definition nur Aufnahmen in 25FPS ;)


    Und damit meine Frage nicht untergeht: Ist die Frame-Nummer tatsächlich 1-basiert (s. meinen Test oben)?


    Im Zweifel immer in den VDR Qellcode schauen ;)


    Code
    int HMSFToIndex(const char *HMSF, double FramesPerSecond)
    {
      int h, m, s, f = 1;
      int n = sscanf(HMSF, "%d:%d:%d.%d", &h, &m, &s, &f);
      if (n == 1)
         return h - 1; // plain frame number
      if (n >= 3)
         return int(round((h * 3600 + m * 60 + s) * FramesPerSecond)) + f - 1;
      return 0;
    }


    Da wird auch imer 1 abgezogen, also schient deine Theorie (die ja anscheinend auch perfekt zur Wirklichkeit passt) zu stimmen ;)


    cu

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!