Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: hevc_FPS_changer

  1. #1
    Kaiser
    Registriert seit
    5. December 2007
    Beiträge
    1.197

    Standard hevc_FPS_changer

    Hallo zusammen,

    Ich hatte beim re-encoden einer Serie versehentlich 23.976 (24000/1001) anstatt 25 FPS angegeben was logischerweise zu einer gewaltigen Versatz bei Video/Audio führte.
    Da ich nicht alle Episoden wieder neu coden wollte, suchte ich nach einem Programm mit dem man die FPS des Elementar-Streams ändern konnte.
    Leider erfolglos.

    Daher hab ich einfach selbst eins geschrieben.
    https://github.com/hydra44/hevc_FPS_changer

    Wer's gerne testen möchte kann sich das Python Script gerne runterladen.
    Bitte Bugs und Änderungswünsche hier im Thread.

    Limits:
    Nur RAW-HEVC Streams werden unterstützt
    Python 3.x wird benötigt
    Nur single SPS Streams werden (derzeit) unterstützt ... hab leider keine multi-SPS Clips zum testen/entwickeln ...

    Ein letztes:
    Im Prinzip kann jeder die SW so benutzen wie er will und auch in andere Sachen integrieren ...
    Daher wollte ich noch "Das Übliche" wie "Haftungsausschluss" und "License" dazu packen. Was/welche/woher nimmt man da am besten ? (Oder ist meine saloppe Formulierung in der Readme.md ausreichend ) )

  2. #2
    Kaiser
    Registriert seit
    6. July 2009
    Beiträge
    1.329

    Standard AW: hevc_FPS_changer

    Danke.

    Falls Du Clips für Multi-SPS brauchst, einfach mit x265 --repeat-headers encoden.

  3. #3
    Kaiser
    Registriert seit
    5. December 2007
    Beiträge
    1.197

    Standard AW: hevc_FPS_changer

    Hm ... ok
    und wie oft repeated der den header ... oder besser gefragt in welchem Abstand schreibt der 'nen Neuen ?

    Nachtrag: so wie's ausschaut wird bei der " --repeat-headers" Option nach jedem GOP und somit vor jedem IDR Frame ein VPS, SPS, PPS und SEI_Prefix geschrieben
    Geändert von may24 (2. June 2017 um 00:15 Uhr)

  4. #4
    Kaiser
    Registriert seit
    5. December 2007
    Beiträge
    1.197

    Standard AW: hevc_FPS_changer

    Hm, macht es überhaupt Sinn einen multi-SPS check/modifier einzubauen ?

    Ich meine, der einzige "use case" der mir einfällt warum man überhaupt multi VPS/SPS/PPS bräuchte, wäre beim TV wenn zwischen 4k/HD/SD umgeschaltet wird.
    Vielleicht noch bei VOD ?

  5. #5
    Kaiser
    Registriert seit
    6. July 2009
    Beiträge
    1.329

    Standard AW: hevc_FPS_changer

    Zitat Zitat von may24 Beitrag anzeigen
    Nachtrag: so wie's ausschaut wird bei der " --repeat-headers" Option nach jedem GOP und somit vor jedem IDR Frame ein VPS, SPS, PPS und SEI_Prefix geschrieben
    Nicht nur IDR, ist etwas komplizierter. Stichwort OpenGOP.

    Zitat Zitat von may24 Beitrag anzeigen
    Ich meine, der einzige "use case" der mir einfällt warum man überhaupt multi VPS/SPS/PPS bräuchte, wäre beim TV wenn zwischen 4k/HD/SD umgeschaltet wird.
    Und woher bekomme ich VPS/SPS, wenn ich frisch in einen Sender zappe? Das muß laufend gesendet werden.

  6. #6
    Kaiser
    Registriert seit
    5. December 2007
    Beiträge
    1.197

    Standard AW: hevc_FPS_changer

    Ok, ich arbeite an einer neuen Version die den Ganzen File parsen kann ...

    Dabei ist mir was aufgefallen ... Stimmt es das in HEVC die Horizontale mod2 und die Vertikale mod16 sein muss ? Oder ist hier nur meine Interpretation des Binärcodes falsch ?

  7. #7
    Kaiser
    Registriert seit
    6. July 2009
    Beiträge
    1.329

    Standard AW: hevc_FPS_changer

    Das ist falsch.

  8. #8
    Kaiser
    Registriert seit
    5. December 2007
    Beiträge
    1.197

    Standard AW: hevc_FPS_changer

    jup, und es kommt noch schlimmer ...
    Ich habe gerade ein neues Testfile erzeugt ... mit anderen Presets ... und siehe da: NICHTS passt mehr.

    Nach einiger Analyse kam jetzt heraus das der (z.B.) FPS Wert nur manchmal als mod4 gespeichert ist ... er kann aber auch als mod16 gespeichert sein. (mod8 ??)
    D.h. es gibt irgendwo ein Flag welches indiziert welcher Modulo gerade verwendet wird ... was natürlich unbekannt ist !

    Oder weiß da jemand mehr ?

  9. #9
    Kaiser
    Registriert seit
    6. July 2009
    Beiträge
    1.329

    Standard AW: hevc_FPS_changer

    "FPS Wert"? Warum sollte das interessant sein, ob der mod-irgendwas ist? Ich kann Dir nicht folgen. Zeig mal ganz genau anhand eines Beispiels, wovon Du redest.

  10. #10
    Kaiser
    Registriert seit
    5. December 2007
    Beiträge
    1.197

    Standard AW: hevc_FPS_changer



    Anmerkung: Ich habe immer "mod16" oder "mod4" in Klammern geschrieben um aufzuzeigen das es hier um ein Vielfaches von 16 o. 4 und nicht um eine Modulo Operation an dieser Stelle geht !

    ok ...
    Erstes Testfile mit 1000 Frames gecoded mit folgenden Settings:
    Code:
    "C:\Program Files (x86)\Video Tools\avs2pipemod-1.1.1\avs2pipemod.exe" -rawvideo "test.avs" | "C:\Program Files\x265\x265-2.4_37.exe" --preset slower --crf 24 --psy-rd 2.0 --psy-rdoq 10.0 --aq-mode 3 --rd 5 --me star --no-open-gop --no-sao --ctu 32 --limit-modes --input-res 1280x720 --input-depth 16 --fps 24000/1003 --output "test.h265" --input -
    Wie man sofort erkennt wird nur ein SPS geschrieben. Ich habe bewusst eine völlig abstruse Geschwindigkeit genommen um die Werte besser wiederzufinden.
    Hier mal ein Ausschnitt aus dem SPS mit den relevanten Bytes:
    Code:
    00 fa c0 00 17 70
    Die ersten 2 Bytes geben den Denominator an: 0xFA -> 250 -> x4 (mod4) -> 1000
    Die nächsten 2 Byte das "Offset" des Denominators (1003 kann man ja nicht durch 4 teilen ...) Nur das erste der zwei Bytes wird scheinbar ausgewertet ...
    0xC0 ist zwar dezimal 192 steht aber in diesem Fall aber für 3. ( 0x40 = 1, 0x80 = 2) ... (mod64 ???)
    Die letzten Bytes markieren die eigentlichen FPS: 0x1770 -> 6000 -> x4 (mod4) -> 24000

    ABER
    Nächstes testfile mit folgenden Optionen gecoded:
    Code:
    "C:\Program Files (x86)\Video Tools\avs2pipemod-1.1.1\avs2pipemod.exe" -rawvideo "test.avs" | "C:\Program Files\x265\x265-2.4_37.exe" --preset faster --crf 24 --repeat-headers --limit-modes --ctu 32 --input-res 1280x720 --input-depth 16 --fps 24000/1003 --output "test.h265" --input -
    Diese Settings packen alle "paar Frames" einen neuen VPS/SPS/PPS in den Stream ...
    Nur jetzt schaut's folgendermaßen aus:
    Code:
    00 3e b0 00 05 dc
    Erste 2 Byte: 0x3e -> 62 -> x16 (mod16) -> 992
    Zweite 2 Bytes: 0xb0 -> 176 (nur das erste Byte wird ausgewertet ... und ja, hier ist alles "big" ) Teilt man die 176 durch 16 (anstatt durch 64 wie im Beispiel oben) so bekommt man 11. Addiert man das zu 992 -> 1003
    Drittes Byte Paar: 0x05dc -> 1500 -> x16 (mod16) -> 24000

    Und nun die Große Preisfrage: Wo/wie bzw. an welcher Stelle wird angegeben ob nun in mod4, mod16 oder ... gearbeitet wird ?
    Ums besser/komplizierter zu machen sollte man sich mal einen Stream mit dem hevcbrowser anschauen

Seite 1 von 2 12 LetzteLetzte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •