Neue Schnittfunktion in VDR 1.7.32

  • Das scheint noch nicht alles zu sein, es gibt noch ein kurzes Stocken in der Wiedergabe nach der Schnittstelle.
    Eine weitere Idee: Beim Cut-In werden ja die B-Frames nach dem I-Frame "rausgeschossen". Fuer den PTS macht das nichts, weil der ja auch im rausgeschnittenen Bereich liegt. Der DTS der rausgeschossenen Frames liegt aber nach dem DTS des I-Frame, somit muss der DTS des ersten nicht geloeschten Frames auf den Wert des ersten rausgeschossenen B-Frames gepatcht werden. Ohne diese Korrektur kann es im Extremfall sogar soweit kommen, dass der DTS eines Frames nach seinem PTS liegt, worauf - wie ich gehoert habe - insbesondere Macs extrem allergisch reagieren.


    Es werden aber doch alle PTS-, DTS- und PCR-Werte um den berechneten Offset verschoben. Somit kann es doch gar nicht vorkommen, daß der DTS eines Frames nach seinem PTS liegt, denn wenn DTS < PTS gilt, dann gilt auch DTS + x < PTS + x.
    Oder übersehe ich da was?


    Klaus

  • Es werden aber doch alle PTS-, DTS- und PCR-Werte um den berechneten Offset verschoben. Somit kann es doch gar nicht vorkommen, daß der DTS eines Frames nach seinem PTS liegt, denn wenn DTS < PTS gilt, dann gilt auch DTS + x < PTS + x.
    Oder übersehe ich da was?


    OK, meine erste Diagnose war wohl nicht ganz richtig. Aber es gibt doch ein Problem, siehe folgendes Beispiel:

    Code
    Sequenz: P   B   B [Cut]  I   B   B   P   B   B
    DTS      0   1   2       101 102 103 104 105 106
    PTS      4   2   3       105 103 104 108 106 107
    nach dem Schneiden mit Korrektur (X: geloeschte Frames):
    DTS      0   1   2        1   X   X   4   5   6
    PTS      4   2   3        5   X   X   8   6   7

    Der DTS des I-Frames beim Cut-In laeuft rueckwaerts, liegt also einen Timer-Wrap-Around in der Zukunft.


    Edit: Es muss also der DTS des I-Frames um die Dauer der herausgeschnittenen B-Frames korrigiert werden, im Beispiel also auf 3. Dann stimmt alles.


    Die Anzahl der B-Frames ist nur als Beispiel zu verstehen, ebenso die Anzahl der herausgeschnittenen Frames. Die Timestamps sind natuerlich als Vielfache der Frame-Zeit zu verstehen, mit beliebigem Offset.


    Gruss,
    S:oren


  • Hab's mir geholt.
    Die Artefakte an der Schnittstelle sehe ich hier auch, trotz der jüngsten Änderung, daß keine Video-Pakete am Schnitt-Ende reingezogen werden (siehe hier).
    Momentan habe ich leider keine Idee, woran das liegen könnte...


    Auf einen Fehler in cMarks::GetNumSequences() bin ich bei den Untersuchungen gestoßen:


    Bei "offenem Ende" wurde die Zahl der Sequenzen nicht richtig berechnet.
    Diese Änderung behebt allerdings noch nicht das eigentliche Problem - aber da verfolge ich jetzt den Hinweis von "S:oren" aus Posting 43...


    Klaus

  • Hallo,


    ich finde die neue Schnittfunktion inf Bezug auf Artefakte merkbar besser, als die alte.


    Ich habe hier aber ein kleines Problem, vieleicht hift das ja:


    Ich wandele HD-Aufnahmen mit Handbrake für mein tf101. Aufruf:

    Code

    Wenn ich jedoch mit der neuen Schnittfunktion eine ZDF HD (also 720p) so schneide, dass nicht nur am Anfang und am Ende etwas weggeschnitten wird, sondern auch Werbung in der Mitte entferne, dann erzeugt Hanbrake eine Ausgabe, die ab dem Schnitt unbrauchbar ist (die unteren 2/3 des Bildes sind verzerrt und verpixelt). Schneide ich nur Am Anfang und am Ende funktioniert es gut. Handbrake erzeugt dabi folgen Fehler:


    Ich denke, das Muster der Fehler ist erkennbar, Ich kann bei Bedarf noch megabyteweise mehr davon liefern ( ;) ), denn das geht bis zum Ende so weiter. Hoffe es hilft.


    Gruß, Ingo


  • Was vergessen? ;)


    Zitat

    Wenn ich jedoch mit der neuen Schnittfunktion eine ZDF HD (also 720p) so schneide, dass nicht nur am Anfang und am Ende etwas weggeschnitten wird, sondern auch Werbung in der Mitte entferne, dann erzeugt Hanbrake eine Ausgabe, die ab dem Schnitt unbrauchbar ist (die unteren 2/3 des Bildes sind verzerrt und verpixelt). Schneide ich nur Am Anfang und am Ende funktioniert es gut.


    Wenn nur am Anfang und/oder Ende was weggeschnitten wird, dann fasst VDR die Timestamps etc. nicht an, daher gibt es in dem Fall kein Problem.


    Zitat


    Handbrake erzeugt dabi folgen Fehler:

    Code
    [13:39:10]...
    [13:39:12] stream: error near frame 1: continuity error: got 1 expected 0
    [13:39:12] stream: error near frame 4: continuity error: got 5 expected 4
    [13:39:12] stream: error near frame 1: continuity error: got 2 expected 1
    [13:39:12] stream: error near frame 3: continuity error: got 15 expected 14
    [13:39:12] stream: error near frame 4: continuity error: got 15 expected 14
    [13:39:12] stream: error near frame 3: continuity error: got 7 expected 6


    Probier's bitte mal hiermit:


    Zitat
    Code
    [13:39:22] stream: error near frame 1763: continuity error: got 14 expected 13
    [h264 @ 0x7f9c1c0c8120] left block unavailable for requested intra4x4 mode -1 at 0 28
    [h264 @ 0x7f9c1c0c8120] error while decoding MB 0 28, bytestream (-1)
    [h264 @ 0x7f9c1c0c8120] concealing 1409 DC, 1409 AC, 1409 MV errors
    ...


    Woher diese Fehler kommen, kann ich mir nicht erklären. Vielleicht eine Folge des continuity errors?
    Probier mal den Patch und sag Bescheid, ob damit auch die anderen Fehlermeldungen weg sind.


    Klaus

  • ...ja, da war das Sende-Fingerchen schneller als der Kopf...

    Code
    HandBrakeCLI -i $i  -o $DESTDIR/$(basename $i ts)m4v  -e x264 -q 22.0 -a 1 -E faac -B 128 -6 stereo -R 44.1 -D 2.8 -f mp4 --loose-anamorphic --modulus 16 -m -x cabac=0:bframes=0:weightp=0:8x8dct=0:ref=4:deblock=-2,-1:mixed-refs=0:analyse=some:trellis=1:subq=7 -r 25 -w 1280 -X 1280 -Y 720 --crop autocrop --large-file

    $i kommt aus einer Schleife - das sind die .ts Dateien.


    Vielen Dank für den Patch - nach einem ersten schnellen Test scheint es zu funtionieren. Und Du hattest Recht: der Rest sind Folgefehler. Der Schnelltest ist ohne Fehler durchgelaufen, und das Ergebnis sieht wieder schick aus.


    Gruß, Ingo


  • Der beiliegende Patch (gegen die Version 1.7.32, enthält auch einige andere notwendige Fixes) sollte jetzt die DTS-Werte richtig setzen.
    Wenn ich eine damit geschnittene Aufnahme mit Kaffeine abspiele, dann bekomme ich absolut saubere Schnittstellen (weder Video- noch Audio-Artefakte, sowohl SD als auch HD 720p).
    Mit der TT S2-6400 gibt es in der HD-Aufnahme an der Schnittstelle noch Verpixelungen, der Ton ist OK. Die SD-Aufnahme wird auch auf der 6400 störungsfrei abgespielt.
    Der Mac-Player macht es jetzt in beiden Fällen gefühlt etwas besser, stottert und verschluckt sich aber immer noch heftig, und bleibt manchmal ganz hängen.


    Bitte schau dir das mal an und laß mich wissen, ob dir sonst noch was an den Schnittergebnissen auffällt, das für die Störungen verantwortlich sein könnte. Mein nächster Verdacht ist ja, daß die PCR-Werte noch nicht ganz astrein sind...


    Klaus

  • Bitte schau dir das mal an und laß mich wissen, ob dir sonst noch was an den Schnittergebnissen auffällt, das für die Störungen verantwortlich sein könnte. Mein nächster Verdacht ist ja, daß die PCR-Werte noch nicht ganz astrein sind...


    Habe es mal schnell ausprobiert, nur mit MPEG-2-Material. Das ist auf jeden Fall ein gigantischer Fortschritt, auf der S2-6400 komplett ohne Artefakte. Ich bin begeistert!!
    Ich schau nochmal weiter, ob mir irgendwas auffaellt...
    Gruss,
    S:oren

  • Habe gerade eine Aufzeichnung von RTL HD geschnitten, die ich vor dem Patch aufgezeichnet hatte. Markierungen, die vor dem Patch gesetzt waren müssen neu gesetzt werden bzw. neu verschoben werden. Das Ergebnis sieht sehr gut aus, aber das war es teilweise auch vorher, daher müssen weitere Tests folgen.


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Ich habe mal gerade eine ältere Aufzeichnung von RTL II HD genommen, die schlechte Schnittübergänge hatte, Marken jeweils mal zur Seite und wieder hingeschoben, Schnitt neu gestartet, Ergebnis: deutlich sauberere Schnitte.


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Ich habe mal gerade eine ältere Aufzeichnung von RTL II HD genommen, die schlechte Schnittübergänge hatte, Marken jeweils mal zur Seite und wieder hingeschoben, Schnitt neu gestartet, Ergebnis: deutlich sauberere Schnitte.


    funktioniert leider nicht immer, aber immer öfter :] auch index neu generieren hilft hier nicht immer.


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Falls jemand hier Beiträge vermisst, die sind jetzt dort -> Plugin-Patches für vdr-1.7.32

    Dirk

  • gelöscht.


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

    Einmal editiert, zuletzt von jsffm ()

  • war ein versehen! habs zurück verschoben

    Dirk

  • Mein nächster Verdacht ist ja, daß die PCR-Werte noch nicht ganz astrein sind...


    Hatte leider wenig Zeit, mir das alles im Detail anzusehen. Bisher ist mir nur das hier aufgefallen

    Allerdings bin ich mir nicht sicher, ob der 90kHz-Offset so einfach auf den 27MHz-Offset umgerechnet werden sollte. Waere es nicht besser, den PCR-Offset direkt in voller Genauigkeit zu berechnen?


    Den PTS-Offset wuerde ich etwas uebersichtlicher so bestimmen, ist aber nur Kosmetik mit gleichem Ergebnis


    Vielleicht waere es aber insgesamt besser, den PTS- und PCR-Offset direkt aus der Differenz der Werte des I-Frames beim Cut-In und des I-Frames nach dem Cut-Out zu berechnen (ohne delta), dann hat man erstens den exakten 27MHz-Wert fuer PCR und zweitens keine Probleme, wenn nicht jeder Frame einen eigenen PTS im Datenstrom hat. Z.B. auf WDR ueber DVB-T habe ich schon gesehen, dass eine ganze GOP in einem einzigen PES-Paket steckt und deshalb auch nur einen PTS fuer den I-Frame hat - dann klappt es ja mit der Berechnung des lastPts im bisherigen Code nicht so recht. In diesem Fall waere natuerlich auch das Herausschneiden der B-Frames beim Cut-In nicht (so einfach) moeglich, dann sollte man wenigstens (bei MPEG-2) das BrokenLink-Flag setzen. Oder habe ich nur uebersehen, wie der vdr so eine Single-PES-GOP auseinander nimmt?


    Edit: Fuer den PTS-Offset klappt es bei geloeschten B-Frames nicht so ganz mit der direkten I-Frame-Differenz, der erste geloeschte B-Frame hat den richtigen Wert. Fuer den PCR-Offeset sollte es aber mit den I-Frames stimmen. Diese unterschiedlichen Offsets bringen vielleicht den Mac-Player durcheinander (bisher wars ja der gleiche Offset).


    Gruss,
    S:oren


  • Hatte leider wenig Zeit, mir das alles im Detail anzusehen. Bisher ist mir nur das hier aufgefallen


    Ein Überlauf hat ja erst dann stattgefunden, wenn NewPcr größer als der maximal mögliche Wert ist. MAX27MHZ ist ja noch ein gültiger Wert.


    Zitat


    Allerdings bin ich mir nicht sicher, ob der 90kHz-Offset so einfach auf den 27MHz-Offset umgerechnet werden sollte. Waere es nicht besser, den PCR-Offset direkt in voller Genauigkeit zu berechnen?


    Der Offset ist ja in ganzzahligen Vielfachen des 90kHz-Taktes, und der wiederum besteht aus Einheiten zu je 300 27MHz-Takten. Also müsste Pcr + offset * PCRFACTOR doch eigentlich genau sein, oder?


    Zitat


    Den PTS-Offset wuerde ich etwas uebersichtlicher so bestimmen, ist aber nur Kosmetik mit gleichem Ergebnis


    Bist du dir da ganz sicher, daß da in allen Fällen das gleiche rauskommt? Das sieht mir fast etwas zu einfach aus (obwohl ich nichts dagegen hätte ;-).


    Zitat


    Vielleicht waere es aber insgesamt besser, den PTS- und PCR-Offset direkt aus der Differenz der Werte des I-Frames beim Cut-In und des I-Frames nach dem Cut-Out zu berechnen (ohne delta), dann hat man erstens den exakten 27MHz-Wert fuer PCR und zweitens keine Probleme, wenn nicht jeder Frame einen eigenen PTS im Datenstrom hat. Z.B. auf WDR ueber DVB-T habe ich schon gesehen, dass eine ganze GOP in einem einzigen PES-Paket steckt und deshalb auch nur einen PTS fuer den I-Frame hat - dann klappt es ja mit der Berechnung des lastPts im bisherigen Code nicht so recht. In diesem Fall waere natuerlich auch das Herausschneiden der B-Frames beim Cut-In nicht (so einfach) moeglich, dann sollte man wenigstens (bei MPEG-2) das BrokenLink-Flag setzen. Oder habe ich nur uebersehen, wie der vdr so eine Single-PES-GOP auseinander nimmt?


    Da hast du nichts übersehen, diesen Fall habe ich noch nicht behandelt (kommt zum Glück eher selten vor, zumindest bei den Kanälen, die ich so schaue).


    Zitat


    Edit: Fuer den PTS-Offset klappt es bei geloeschten B-Frames nicht so ganz mit der direkten I-Frame-Differenz, der erste geloeschte B-Frame hat den richtigen Wert. Fuer den PCR-Offeset sollte es aber mit den I-Frames stimmen. Diese unterschiedlichen Offsets bringen vielleicht den Mac-Player durcheinander (bisher wars ja der gleiche Offset).


    Ich bin momentan am experimentieren mit dem PCR-Offset. Da war auf jeden Fall der gleiche Fehler drin, wie bei den DTS-Werten, daß es eine negative Differenz gab.


    Klaus

  • Habe seit Freitag viel mit dem neuen Patch geschnitten. Gefällt mir sehr gut und ich habe kaum noch gepixel. Selbstbwenn es pixelt, tuts das nur noch max. 1.5 Sekunden und nicht bis zu 6 Sekunden mit Einblenden alter Bilder von vor dem Scnitt. Ich galube folgendes beobachtet zu haben, die Verpixlungen treten dann verstärkt auf, wenn es keine Überlappung gibt, und dr Sender an den Schnittstellen das Tonformat ändert - kann aber auch Zufall sein. Ich habe nur mit "frischem" - also mit Patch aufgezeichnetem - Material von 1024i und 720p Kanälen getestet. Bei 720p habe ich keine einzige Verpixlung gehabt (aber da war der Ton auch immer durchgehend Dolby stereo). Bin sehr Zufrieden mit den neuen Schnitten!


    Frage: Ich habe hier markad laufen und bearbeite die Schnitte per Hand nach, so dass für die Tests jede einzelne mark min. hin- und her verschoben wurde. Könnte man die markad marks auch direkt vrwenden, oder hebeln die dann die neue Schnitt- und marks-Mimik aus?


    Gruß, Ingo

  • Ein Überlauf hat ja erst dann stattgefunden, wenn NewPcr größer als der maximal mögliche Wert ist. MAX27MHZ ist ja noch ein gültiger Wert.

    Ja, deshalb ist >= ja auch falsch und > richtig.


    Der Offset ist ja in ganzzahligen Vielfachen des 90kHz-Taktes

    Gilt das auch bei NTSC-artigen Bildwiederholraten von 60Hz*1000/1001 ?


    Bist du dir da ganz sicher, daß da in allen Fällen das gleiche rauskommt?

    Ja, Zweierkomplement-Additionen und -Subtraktionen gehen mit beliebiger Bitbreite, solange das Ergebnis die gleiche Bitbreite wie die Summanden hat. Beim PCR-Offset ist es schwieriger, da die Bits dort ja nicht "vollstaendig" benutzt werden.


    Da hast du nichts übersehen, diesen Fall habe ich noch nicht behandelt (kommt zum Glück eher selten vor, zumindest bei den Kanälen, die ich so schaue).

    Ja, schon daemlich, aber WDR ueber DVB-T macht sowas (hat zumindest, hab nicht nochmal aktuell getestet).


    Ich bin momentan am experimentieren mit dem PCR-Offset. Da war auf jeden Fall der gleiche Fehler drin, wie bei den DTS-Werten, daß es eine negative Differenz gab.

    Das bringt wahrscheinlich den Mac durcheinander, "normale" Player duerften sich eher selten fuer PCR interessieren...


    Gruss,
    S:oren

  • Ja, deshalb ist >= ja auch falsch und > richtig.


    O, sorry, ich dachte, du hättest aus meinem Patch zitiert (irgendwie war ich der Meinung, das schon geändert zu haben ;-).
    Aber möglicherweise werde ich an der Stelle sowieso noch einiges ändern müssen...


    Zitat

    Gilt das auch bei NTSC-artigen Bildwiederholraten von 60Hz*1000/1001 ?


    Mir ist zumindest nichts anderes bekannt.


    Zitat

    Ja, Zweierkomplement-Additionen und -Subtraktionen gehen mit beliebiger Bitbreite, solange das Ergebnis die gleiche Bitbreite wie die Summanden hat.


    OK, dann werde ich das so ändern.


    Zitat


    Beim PCR-Offset ist es schwieriger, da die Bits dort ja nicht "vollstaendig" benutzt werden.


    Da muß man halt mit Division und Rest arbeiten...


    Klaus

Jetzt mitmachen!

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