DVB-S2 Streams von der Dreambox encoden (Linux only)

  • Das Problem mit DVB Zeug ist, dass es soweit mir bekannt kein tool gibt was über CLI genutzt werden kann, was 1. kostenlos nutzbar und 2. mit DVB2 Streams klarkommt. Gibt leider keinen wirkliches Pendant was wie ProjectX für DVB mit DVB-2 klar kommt.
    HandbrakeCLI ist ne gute Idee, da Handbrake teilweise etwas robuster im Umgang mit 'kaputten' Streams ist als mencoder&ffmpeg.

  • Nicht das ich jetzt unbedingt auf die folgende Variante setzen will, aber mir scheint mittlerweile doch der Fehler in meinem Encoding mit x264 zu liegen.

    1. TS file in mkv muxen

    Code
    mkvmerge -o CSI_NY.mkv csi_ny_20110912\ 2105\ -\ VOX\ HD\ -\ CSI_NY.ts

    Das mkv ist nach diesem Step noch synchron

    2. Timecodes extrahieren

    Code
    mkvextract timecodes_v2 CSI_NY.mkv 1:video.tmc 2:audio.tmc

    3. Tracks extrahieren

    Code
    mkvextract tracks CSI_NY.mkv 1:video.h264 2:audio.ac3

    4. Testweise alles wieder in ein mkv muxen

    Code
    mkvmerge --title "CSI NY" -o CSI_NY2.mkv --timecodes 0:video.tmc video.h264 --track-name 0:german --language 0:ger --timecodes 0:audio.tmc audio.ac3

    Dieses mkv ist auch synchron

    5. Video track mit x264 encodieren (Normal verwende ich crf 23 und preset slow... dies ist nur für den test)

    Code
    x264 --crf 25 --vbv-maxrate 40000 --vbv-bufsize 30000 --profile high --level 41 --tune film --preset superfast -o video.x264 video.h264

    6. Encodierten Video track mit timecode und Audio track muxen

    Code
    mkvmerge --title "CSI NY" -o CSI_NY3.mkv --timecodes 0:video.tmc video.x264 --track-name 0:german --language 0:ger audio.ac3

    Dieses mkv ist nun asynchron. Dann habe ich das video mal durchgeklickt und festgestellt das es fast genau doppelt so schnell läuft wie es sollte.
    Die Serie geht eigentlich knapp eine Stunde, aber nach ca. 30min ist kein Bild mehr zu sehen nur der Ton kommt noch.

    Wenn ich jetzt die video.x264 mit der video.h264 vergleiche, fällt mir nichts auf, was der Grund sein könnte.

    Links ist die video.h264 und rechts die video.x264.

    Einmal editiert, zuletzt von morlix (7. November 2012 um 21:31)

  • Dann hat möglicherweise der im x264cli genutzte Decoder ein Problem mit dem Eingangsmaterial.
    Da hilft meist nur anderer Decoder (--demuxer lavf oder einen externen über pipe).
    Fehlt denn auch jedes zweite Bild, wenn Du einzeln durchgehst? Sind in den Timecodes die Abstände 20ms oder 40ms? Wenn Du den ersten Timecode bei mkvmerge als Delay einsetzt und die fps auf 25 stellst, was passiert dann?

  • Fehlt denn auch jedes zweite Bild, wenn Du einzeln durchgehst? Sind in den Timecodes die Abstände 20ms oder 40ms? Wenn Du den ersten Timecode bei mkvmerge als Delay einsetzt und die fps auf 25 stellst, was passiert dann?

    Das ist immer Unterschiedlich. Meistens sind es 20ms manchmal sind aber auch größere gaps drin.

    Code
    # timecode format v2229409429449469489509569589

    x264 bringt folgende Meldungen. VIelleicht ist der Fehler am Anfang doch ernster als ich dachte.

  • Dann hat möglicherweise der im x264cli genutzte Decoder ein Problem mit dem Eingangsmaterial.
    Da hilft meist nur anderer Decoder (--demuxer lavf oder einen externen über pipe).
    Fehlt denn auch jedes zweite Bild, wenn Du einzeln durchgehst?

    Wie kann ich den einen anderen Demuxer über pipe angeben? so z.B.? "mencoder filename.ts -nosound -ovc copy -of rawvideo | x264"

    Wie kann ich sehen ob jedes zweite Bild fehlt?

  • Zitat

    mencoder filename.ts -nosound -ovc copy -of rawvideo | x264


    Würde eher mit mencoder nach y4m oder i420 dekodieren wenn ich nach x264 pipe,...
    Generell ist es vielleicht auch eine gute Idee mal Hybrid an zu gucken und falls das einen synchronen Output erzeugt könnte man sich angucken, welche Command Lines es nutzt (Jobs->Minimize job command lines deaktivieren).

    Code
    ffms [error]: could not create index        
    lavf [info]: 1920x1080i 1:1 @ 25/1 fps (cfr)
    x264 [warning]: input appears to be interlaced, enabling tff interlaced mode.
                    If you want otherwise, use --no-interlaced or --bff
    x264 [warning]: interlace + weightp is not implemented


    -> mal versucht die vorgeschlagenen Änderungen zu machen?

    Würde ich x264 auch nicht mit RAW H.264 sondern eher mit dem mkv file als Input füttern,..

    Cu Selur

  • -> mal versucht die vorgeschlagenen Änderungen zu machen?

    Sollte keinen Unterschied machen. Mkvmerge behandelt die x264-Ausgabe hinsichtlich der Timecodes gleich, egal ob interlaced oder progressiv.

    Man könnte versuchen, die Timecodes wieder zu glätten und einen durchgängigen Stream zu erzeugen, irgendwie so:
    ffmpeg -i filename.ts -r 25 -f yuv4mpegpipe - | x264 - --demuxer y4m -o output.h264

    Danach ohne die Video-Timecodes muxen.

    4 Mal editiert, zuletzt von sneaker2 (7. November 2012 um 17:38)

  • Ich habe endlich rausgefunden wie ich alles synchron bekomme.

    Wenn man Schritt 6 nicht so:

    Code
    [COLOR=#333333]mkvmerge --title "CSI NY" -o CSI_NY3.mkv --timecodes 0:video.tmc video.x264 --track-name 0:german --language 0:ger audio.ac3[/COLOR]

    sondern so:

    Code
    [/COLOR]mkvmerge --title "CSI NY" -o CSI_NY3.mkv video.x264 --track-name 0:german --language 0:ger -y 0:-229 audio.ac3

    macht wird alles synchron. Das Problem scheint also irgendwie beim muxen mit dem timecode file zusammen zu hängen.
    Jetzt gebe ich den timecode halt manuell an, den ich vorher aus dem ts stream bekommen habe und alles ist sync.

    Ich teste das jetzt mal noch mit ein paar anderen Aufnahmen und wenn das soweit funktioniert, dann schreib ich ein Script dafür.

    Ich danke nochmal allen die mir hier geholfen haben!

    Falls ihr noch weitere Hinweise oder Anregungen habt, immer her damit :)

  • Würde ich x264 auch nicht mit RAW H.264 sondern eher mit dem mkv file als Input füttern,..

    Kannst du mir hierfür noch ein paar mehr Infos oder Hintergründe nennen?


    Sorry mein Post zuvor hatte ich geschrieben bevor ich eure 2 Posts heute gelesen hatte.

  • Jetzt gebe ich den timecode halt manuell an, den ich vorher aus dem ts stream bekommen habe und alles ist sync.

    Ja, hatte ich ja gestern schon mal geschrieben, daß Du das versuchen sollst.
    Aber paß auf: Könnte sein, daß es nun an den Lücken (z.B. 60ms im Timecode) Stück für Stück asynchron wird, Du es aber nur noch nicht gemerkt hast.

  • Ich habe immer am Anfang, in der Mitte und am Ende der Aufnahme kontrolliert und das hat alles gepasst, aber das bedeutet ja nicht, das es bei jeder Aufnahme geht.
    Ich werde wie schon gesagt mal ein paar mehr tests machen und das kontrollieren.

    Jetzt hab ich gerade nochmal ein paar Tests fertig und muss sagen so habe ich das beste Ergebnis inkl. Timecodes.

    1. TS file in mkv muxen

    Code
    mkvmerge -o CSI_NY.mkv csi_ny_20110912\ 2105\ -\ VOX\ HD\ -\ CSI_NY.ts

    Das mkv ist nach diesem Step noch synchron

    2. Timecodes extrahieren

    Code
    mkvextract timecodes_v2 CSI_NY.mkv 1:video.tmc 2:audio.tmc

    3. Tracks extrahieren

    Code
    mkvextract tracks CSI_NY.mkv 1:video.h264 2:audio.ac3

    4. Testweise alles wieder in ein mkv muxen

    Code
    mkvmerge --title "CSI NY" -o CSI_NY2.mkv --timecodes 0:video.tmc video.h264 --track-name 0:german --language 0:ger --timecodes 0:audio.tmc audio.ac3

    Dieses mkv ist auch synchron

    5. Video track mit x264 encodieren (Normal verwende ich crf 23 und preset slow... dies ist nur für den test)

    Code
    time x264 --crf 25 --vbv-maxrate 40000 --vbv-bufsize 30000 --profile high --level 41 --tune film --preset superfast -o video.x264 CSI_NY.mkv

    6. Encodierten Video track mit timecode und Audio track muxen

    Code
    mkvmerge --title "CSI NY" -o CSI_NY3.mkv --timecodes 0:video.tmc video.x264 --track-name 0:german --language 0:ger audio.ac3

    Ich glaub soweit sollte jetzt alles passen, den jetzt meldet x264 auch keinen index Fehler mehr beim starten.

  • Richtig. Wenn ich nicht den x264 Track direkt mit x264 encodiere sondern das mkv aus Schritt 1 als input angebe, scheint danach alles zu passen wenn ich auch die video Timecodes angebe. Bei diesem Versuch muss ich dann auch keine Audio delay manuell eingeben.

    Sorry wenn das etwas Verwirrung stiftet, aber ich hab alles mögliche probiert und dies scheint bisher das beste zu sein was ich hin bekommen habe.

    Jetzt stellt sich mir nur noch die Frage wie ich das mit dem crop, cropdetect und Schnitt (avconv options -t und -ss) mache.

  • Also ist der einzige Unterschied zwischen #6 und #37 der, daß Du x264 mit der .mkv anstatt der extrahierten .h264 gefüttert hast?
    So ganz glauben kann ich das noch nicht, sind doch laut Deiner Aussage die Timecodes meist 20ms (also 50 fps) lang, und deren Erstellung hat sich nicht geändert, oder? Oder ich übersehe gerade etwas...

Jetzt mitmachen!

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