ffmpeg-Problem, Transcode video zu TS

  • Hi,


    es ist erstmal kein reines VDR Problem - hoffe ich.


    Problem:

    Ich habe ein beliebiges Video File, welches ich so transcodieren will, das es im VDR darstellbar ist: Eigener Player und durchreichen des Streams mittels player->PlayTs().


    Beobachtungen:

    • Das transcodierte Video lässt sich mit ffplay problemlos abspielen
    • Reiche ich den Stream an VDR weiter, dann werden in cDevice::PlayTs nur PAT und PMT PIDs erkannt? Ansonsten kommen fast nur PID 256, hin und wieder PID 17.

    Aktiviere ich im VDR ein wenig mehr Debugging, bekomme ich nur die folgende Ausgabe:

    Code
    1. PAT: TSid = 1, c/n = 1, v = 0, s = 0, ls = 0
    2. PMT: sid = 1, c/n = 1, v = 0, s = 0, ls = 0
    3. pcr = 256

    Aber diese Ausgabe kommt z.B. nicht:

    Code
    1. for (SI::Loop::Iterator it; Pmt.streamLoop.getNext(stream, it); ) {
    2. dbgpatpmt(" stream type = %02X, pid = %d", stream.getStreamType(), stream.getPid());

    Und ich gehe davon aus, daß weder Audio noch Video Streams gefunden werden und deshalb wird auch nix angezeigt.


    Zusammengefasst gehe ich davon aus, daß das Transcoden per ffmpeg irgendwie nicht richtig funktioniert hat. Die Suche im Forum ergab immer nur Treffer für den umgekehrten Fall: Transcode von TS nach was anderem.


    Die aktuelle Kommandozeile ist sehr rudimentär (reines Video, kein Audio):

    $FFMPEG -y -r 25 -i $VIDEO_IN -f mpegts -q:v 10 -an -vcodec mpeg4 test1.ts


    Es müssen wohl ganz viele Parameter fehlen. Nur welche?? Es gibt ja Fantastiliarden davon.

    Hat das schon jemand gemacht? Und wie?


    Zabrimus

  • Warum mpeg4? Damit kann vdr nicht umgehen, besser h264.


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

  • Hmm... mpeg4 habe ich bisher einfach immer überlesen (Wald und Bäume). Gedanklich war ich immer auf h.264 eingestimmt. Das kommt wahrscheinlich daher, daß der Input bisher immer mp4 ist.


    vlc kann auch encoden? Das muss ich mir mal anschauen. Im Prinzip ist es mir egal, womit ich das Video bearbeite, es sollte nur ein Format entstehen, daß ich bequem in VDR abspielen kann.


    Zabrimus


  • Bei meinem Import Skript habe ich folgende Parameter:

    ffmpeg -i <input> -codec copy -f mpegts -bsf:v h264_mp4toannexb "00001.ts"


    Das ist für Quellen mit h264 Video codec. Aber das -bsf:v h264_mp4toannexb ist offenbar wichtig für den VDR.


    Falls das Ausgangsmaterial nicht h264, muss dann aber noch transcodiert werden...

    VDR: Zotac ZBOX EN860, 16GB RAM, 2 TB HDD, Debian Stretch, vdr-2.4.1, softhddevice, satip

  • Das ist für Quellen mit h264 Video codec. Aber das -bsf:v h264_mp4toannexb ist offenbar wichtig für den VDR.

    Please note that this filter is auto-inserted for MPEG-TS (muxer mpegts) and raw H.264 (muxer h264) output formats.


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

  • Erstmal Danke für die richtigen Hinweise!


    Warum mpeg4? Damit kann vdr nicht umgehen, besser h264.

    Genau da lag das Problem. Mit "-vcodec libx264 -vf format=yuv420p" klappt es auch wie gewünscht. Wenngleich mein Testprogramm das Video auch in rasender Geschwindigkeit abspielt. Aber okay. Der Speed wird noch reguliert werden.

    könnte man nicht den browser framebuffer direkt ins OSD mappen?

    In CEF habe ich nur das Rohimage (argb oder rgba) zur Verfügung. Und an die Interna komme ich nicht ran. Und es läuft auch noch alles in verschiedenen Threads, die auch nur "ihren" Teil der Daten zur Verfügung haben.


    Das Transcoden sollte auch nur eine Notlösung sein, wenn die eingehenden Videos schon in h.264/aac vorliegen. Ansonsten will ich einfach nur zu mpeg-ts kopieren. Als ich so mit dem Testprogramm rumgespielt habe, hatte ich die Idee, das man das auch nutzen könnte, um Videoseiten wie vimeo/youtube und sonstwas zur Verfügung zu stellen. Oder auch lokale Videos, die irgendwie codiert sind. Aber alles nur Zukunftsmusik. Noch ist alles eine Baustelle.


    Zabrimus


    ps:

    Ich bin mir gerade nicht mehr sicher, welche Sprache überhaupt verwendet werden soll. Deutsch/Englisch? Das wechselt immer irgendwie. Zumal ich nicht weiß, wer alles mitliest.