divx ruckelt beim abspielen

  • Hallo,
    ich versuch mich mal mit meinem ersten posting:

    Wenn ich ein divx File mit dem mplayer-plugin abspiele ruckelt das Bild und der Ton stottert. Dabei benutze ich die mplayer.sh von juri. Aufgerufen wird dann so etwas:


    mplayer -vo mpegpes -ao mpegpes -afm 9 -vop lavc=0:25.000,expand=720:576:-1:-1:1,scale=720 :576 -cache 4096 -slave -nolirc -subpos 80 -sub-bg-color 0 sub-bg-alpha 0 -quiet ....


    Das divx wurde mit vdrconvert aus einem vdr erzeugt. Spiele ich das Original vdr ab, ist alles ok. Spiele ich das divx auf dem PC-Monitor und über die interne Soundkarte ab, ist auch alles ok.
    Das ganze läuft auf einem Athlon 2200+ Rechner und sollte eigentlich schnell genug sein um auch eine Skalierung in realtime ohne ruckeln durchführen zu können (ist es das?).
    Leider fange ich erst an mplayer und vdrconvert zu benutzen und kenne mich herzlich wenig mit den Details/Eigenheiten aus....


    Aufgefallen sind mir folgende Punkte:


    1) Das ursprüngliche vdr hat eine Auflösung von 720x576, das divx 768x576 (hat vdrconvert bei mir so gemacht - wieso weiss ich nicht).
    2) Dadurch scheint überhaupt erst der Kram mit expand und scale (wieso eigentlich beides?) aktiviert zu werden. Beim Abspielen der vdr fehlt dieser Parameter (-vop...)
    3) In der manpage zu mplayer gibts noch dvbscale. Kann man das benutzen?


    Das ganze läuft auf einem Athlon 2200+ System mit 512MB Speicher und eine Hauppauge Nexus 2.1...


    Wer weiss Rat ?


    Alfredo

  • Hi,


    es gibt zwei Grenzen für die Bitrate des MPlayer-on-the-fly-MPEG-Encoders:
    LAVC > 8000~9000 und LAVC > 5000.
    Bei LAVC > 8000 (auch LAVC=0) scheint die DVB-Karte bzw. der PCI-BUS der limitierende Faktur zu sein.
    Bei LAVC > 5000 scheint der MPlayer-on-the-fly-MPEG-Encoder ein Limit zu haben.


    Beide Limits führen zu teilweise starkem Ruckeln - das betrifft aber nicht immer alle Filme. Manche laufen mit LAVC=0 einwandfrei, bei anderen muß man LAVC=8000 setzen, wieder andere laufen erst bei LAVC=5000 bei bestimmten Szenen ruckelfrei.


    Deshalb empfehle ich dir, die ursprünglich Vorgabe von LAVC=5000 beizubehalten - es war nicht ohne Grund da.
    Daß das original VDR-File und das DIVX auf dem X11-Desktop ohne Ruckeln abgespielt werden, ist nicht weiter verwunderlich, da hier völlig andere Voraussetzungen gegebnen sind:
    - VDR-Files sind MPEG2-Streams, die 1:1 and die DVB-Karte durchgereicht werden (deshalb auch kein -vop, wenn MPEG_DIRECT=true) => Prozessorlast minimal
    - DIVX auf Desktop: Das Video muß nur dekodiert werden und dann in den Framebuffer geschrieben werden => Prozessor ab 400MHz sollte keine Probleme haben


    aber bei DIVX über DVB-Karte muß nicht nur DIVX dekodiert werden, sondern in Echtzeit in MPEG1 enkodiert werden. Hier ist mindestens ein Prozessor in der GHz-Klasse gefragt. Dabei kann natürlich je nach Komplexität der Szenen die Prozessorlast zu groß werden.
    Allerdings scheint der MPEG-Enkoder im MPlayer ein Problem mit großen Bitraten zu haben, auch wenn noch genügend Prozessorpower da ist. Deshalb die Begrenzung auf 5000.


    -dvbscale bringt keine Vorteile, da das Skript dieses von selbst berechnet und die Anwendung von -dvbscale nicht sonderlich konsistent ist.


    Gruß,
    Juri

  • Zitat

    1) Das ursprüngliche vdr hat eine Auflösung von 720x576, das divx 768x576 (hat vdrconvert bei mir so gemacht - wieso weiss ich nicht).


    Das habe ich mich auch immer gefragt. Inzwischen weiss ich es. Der einzige Grund ist, dass vdrconvert AVIs erzeugen möchte, die dem Standard entsprechen. Und das bedeutet: Square Pixels wie auf jedem PC. Der DVB-Standard am Fernseher hat, vereinfacht ausgedrückt, leicht plattgedrückte Pixels, sodass 720 x 576 dort ein Seitenverhältnis (Aspect Ratio) von 1.3333 ergeben. Auf dem PC wären 720 x 576 natürlich nur 1.25, das Bild wäre leicht in Höhe gezogen.


    Wenn vdrconvert nun nach 768 x 576 skaliert, kann das AVI auf jedem PC abgespielt werden und hat auch dort wieder 1.3333 Aspect Ratio.


    Blöd ist dann eben nur, dass beim Abspielen das ganze wieder nach 720 x 576 zurückskaliert werden muss, damit es wieder auf die DVB-Karte und den TV passt. Man hat also immer eine doppelte Skalierung.


    Rein theoretisch könnte man auch ein DivX in 720 x 576 mit Apect 1.25 erzeugen, dann spart man sich 2 Skalierungen, und wahrscheinlich würde es auch weniger ruckeln, da der mplayer einen Arbeitsschritt beim Abspielen spart. Nur wäre das eben ein AVI welches nicht zulässig ist. Solange es Deinen VDR nicht verlassen soll, wäre das sicherlich mal einen Test wert...

  • Zitat

    Original von jha
    Allerdings scheint der MPEG-Enkoder im MPlayer ein Problem mit großen Bitraten zu haben, auch wenn noch genügend Prozessorpower da ist. Deshalb die Begrenzung auf 5000.


    Danke für die Hinweise, ich hab mich nicht getraut, zu lavc zu fragen, weil ich zwar keine vernünftige Doku fand, aber die Frage zu trivial schien ;)


    Also ich hab nen Celeron-1800, der theoretisch für DivX prima reichen sollte. Ein leichtes Ruckeln krieg ich jedoch niemals weg, mein Kiss DP-500 (DVD-Player der auch unter Linux läuft) kann über's Netz komplett ruckelfrei spielen. Ich hab verschiedene lavc Einstellungen probiert (meist 5000 oder 9000), aber die leichte Ruckelei nie wegbekommen.


    Gibt es da eine Abhilfe oder einen Trick, außer bei jedem Abspielen die Parameter durch trial-and-error zu ermitteln?


    TIA Frederick

  • Hmm, 5000 liefert bei mir die besten Ergebnisse. Du kannst ja mal zuerst in 500er Schritten an einen neuen Wert herantasten um dann in 100er Schritten das Ergebnis zu verfeinern.


    Optimal ist die Wiedergabe per MPlayer leider nur selten. Müßte man mal den Entwicklern stecken, um da vielleicht noch etwas Fortschritt hervorzurufen.


    Juri

  • Zitat

    Original von jha
    Hmm, 5000 liefert bei mir die besten Ergebnisse.


    Bei mir bisher auch, hab allerdings noch nicht allzuviele verschiedene Einstellungen getestet, weil ich (Asche über mein Haupt) die DVB-Docs vom mplayer nicht gefunden hatte. Im Moment muß ich feststellen, daß mein Kiss DP 500 (DivX fähiger DVD-Player mit Ethernet) die Dateien besser/ruckelfreier abspielt. Dafür kann der natürlich erheblich weniger Formate als der mplayer.


    Zitat

    Du kannst ja mal zuerst in 500er Schritten an einen neuen Wert herantasten um dann in 100er Schritten das Ergebnis zu verfeinern.


    Das scheint mir eine gute Idee zu sein. An irgendwelche Skalierungs- und/oder CPU-Optionen sollte ich mich erstmal besser nicht drangeben?


    Ist Deiner Meinung nach ein Celeron-1800 (hat ja wenig L1-Cache) überhaupt geeignet? Das war nämlich zum Zeitpunkt des Aufbaus des VDR-Rechners die billigste CPU von der ich annahm, daß sie ausreichend sei. Natürlich ist das für DVB der Fall, aber jetzt stelle ich fest, daß der Appetit beim Essen kommt und ich doch gern vernünftiges DivX hätte ;) So im Nachhinein hätte ich doch besser nen echten P4-2400 (oder so) nehmen sollen.


    Allerdings wundert mich, daß "top" beim Abspielen von DivX mit mplayer bei der Idle-Zeit permanent Werte zwischen 35 und 45% anzeigt, also scheinbar noch ungenutzte CPU-Ressourcen vorhanden sein sollten? Oder liegt das am (kleinen) Celeron-Cache, CPU-Leistung ist zwar noch da, aber die Daten aus dem Speicher (der ist erheblich langsamer als der Cache) konnten nicht schnell genug gelesen/geschrieben werden?


    Jedenfalls danke für die Hinweise und bis denne!


    Frederick

  • Zitat

    Allerdings wundert mich, daß "top" beim Abspielen von DivX mit mplayer bei der Idle-Zeit permanent Werte zwischen 35 und 45% anzeigt, also scheinbar noch ungenutzte CPU-Ressourcen vorhanden sein sollten? Oder liegt das am (kleinen) Celeron-Cache, CPU-Leistung ist zwar noch da, aber die Daten aus dem Speicher (der ist erheblich langsamer als der Cache) konnten nicht schnell genug gelesen/geschrieben werden?


    Siehe mein erstes Posting in diesem Thread (Problem mit MPlayer MPEG-Encoder).


    Was deinen KISS-Player angeht:
    siehe auch da mein erstes Posting


    Juri

  • Hallo allerseits,
    vielen Dank für die ausführlichen Infos. Ich war gestern Abend/Nacht auch nicht untätig (allerdings ohne Interanschluss ) an meiner vdr-Kiste...
      juri: Jetzt hab ich den VOP Eintrag kapiert. In den mplayer dokus hatte ich anfangs nichts gefunden (Wald vor lauter Bäumen...) ;D . Kannst du vielleicht eine 2. Kommentarzeile in dem Script und an der Stelle spendieren ( ... wenns ruckelt -> 9000 -> 5000 ... )?


    Was bedeutet eigentlich der Wert hinter lavc= genau? Bits/s oder kBits? Ist der direkt vergleichbar mit der Bitrate welche z.B. mplayer -identify aus der avi ermittelt?


    Achso das wichtigste: mein Testfile kann ich jetzt ruckelfrei abspielen, bis zu ca lavc=12000 klappt alles, darüber gehts los mit stottern. Krieg ich irgendwie raus um wieviel das Video ausgebremst wird?


    Als nächstes werde ich mal xine installieren und testen. Leider hat SuSE den ja in der 9.0 Version amputiert sodass ich erst mal die Quellen übersetzen muss.


    Das die Karte oder der PCI-Bus schuld sein soll kann ich mir nicht so richtig vorstellen. Schliesslich schickt ja auch der vdr einen entsprechen hohen MPEG-2 Strom auf die dvb. Das müsste doch das gleiche sein wie vom mplayer!
    Anderns ausgdrückt: "was hinten rauskommt" sollte ähnlich hohe Bitraten haben, mplayer kann ja z.B. ruckelfrei ohne lavc eine vdr-Datei auf die dvb schieben. Nur wenn irgendein Filter noch mit reinspielt (bei vdr-Files ist das wohl ein pass-through) fängst an zu ruckeln.
    Demnos: Gestern abend habe ich auch ein DIVX in 720x576 erzeugt. Irgendwie stimmt dann aber immer noch nicht der colorspace und ein scale-Filter fühlt sich zuständig. Ich muss aber erst noch mehr in der Materie lesen um das besser im Griff zu haben.


    Grüße
    Alfredo

  • Hi alfredo,


    was den Kommentar betrifft:
    Der neue Default-Wert für LAVC ist in der aktuellen mplayer.sh-Version bereits auf 5000 herabgesetzt, da ich hier im Forum öfter Leuten helfen mußte, die mit dem alten Default von 9000 nicht ruckelfrei abspielen konnten. Ich kann aber trotzdem den Kommentar überarbeiten und ein paar Tips unterbringen.


    Der Wert hinter lavc ist laut man-page von MPlayer in kBit/s. Danach kommt die zu benutzende Framerate (25fps/29.97fps usw.).


    Was das "Ausbremsen" des Videos angeht: Mir ist kein Weg bekannt, die Differenz herauszubekommen. Ich würde mir da aber auch keine Gedanken machen. 12MBit/s ist IMHO jenseits von Gut und Böse. Selbst mit 8MBit/s siehts noch bestens aus. Mit 5MBit/s kann man gelegentlich Blockartefakte sehen, auch sonst ist das Bild leider nicht so gut, wie mit 9 oder 12 MBit/s.


    Und was den Flaschenhals angeht:
    Keine Ahnung, ob es wirklich der PCI-Bus ist - es war eine Vermutung vom MPlayer-DVB-Entwickler Arpi. Allerdings haben DVB-Videos normalerweise nicht eine so hohe Bitrate, auch wenn sie konstant 15MBit angeben.


    Juri

  • Gibt es inzwischen eine brauchbare Lösung?
    Ich schlage mich im Moment auch mit ruckelnden AVIs herum. Die CPU Auslastung liegt dabei etwa bei 60 % (Duron 1300). Meistens fängt es an zu ruckeln, wenn sich viele Sachen bewegen (zB bei einer Szene, bei der man eine Straße mit vielen Passanten von oben sieht).


    Testweise habe ich mal lavc=2000 probiert, da tritt kein Ruckeln mehr auf.
    Außerdem habe ich mal mit mencoder ein AVI nach MPEG1 umgewandelt (mit lavc=5000) und dieses dann wiedergegeben. Dabei tritt auch kein Ruckeln mehr auf. Das Problem muss also irgendwie am mplayer liegen und nicht am PCI Bus oder der Hardware.

  • Nein, es gibt dafür leider immernoch keine Lösung. Ich sehe es übrigens auch so, daß das Problem im MPlayer liegt, denn wenn man anstatt auf das DVB-.Device in eine Datei schreiben läßt, kommen genau die gleichen Ruckler zu stande...


    Gruß,
    Juri

  • Wie meinst du das mit "in eine Datei schreiben"?
    Wenn ich den mencoder benutze und das AVI in eine MPEG Datei umkodiere, dann habe ich keine Ruckler im MPEG:

    Code
    mencoder -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video:vbitrate=2500 -oac lavc -vop scale=720:576 input.avi -o output.mpg


    Die Datei kann man dann auch ohne Probleme mit dem VDR abspielen. Irgendwie muss das Ruckeln daher kommen, dass der mplayer alles "on the fly" macht, kann mir aber nicht erklären, wieso. CPU Leistung ist ja ausreichend vorhanden.


    Noch etwas: bei lavc=5000 können die 5000 unmöglich 5000 kbit bedeuten. Der mencoder schafft bei 2000 kbit noch ein gutes Bild und mit mplayer lavc=2000 bekommt man nur noch Pixelbrei.

  • Was mir noch aufgefallen ist: Die CPU Auslastung steigt beim ruckeln nicht etwa, sondern sie fällt von 60 % auf etwa 45-50%.


    Außerdem habe ich ein wenig experimentiert:
    Ich habe versucht erst die Umwandlung in ein MPEG mittels mencoder im Hintergrund zu starten, das MPEG quasi als temporäre Datei auf die Festplatte schreiben zu lassen und dann dieses MPEG abzuspielen. Da die MPEG Umwandlung mit etwa 40 FPS läuft sollte das ja klappen. Aber leider gibt es ein Problem: Der Mplayer überprüft mein Start wohl irgendwie die Länge der MPEG Datei und bricht dann immer die Wiedergabe ab, sobald er an das "Ende" kommt obwohl die MPEG Datei ja inzwischen viel länger ist.


    Code
    mencoder -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video:vbitrate=3000 -oac lavc -vop expand=$NEW_X:$REAL_Y:-1:-1:1,scale=$NEW_X:${NEW_Y} "$FILE" -o /home/videos/filme/temp/vdr-mplayer.mpg &
    sleep 15
    $MPLAYER -vo $VO $AOUT $FDSTR $CACHESTR $REMOTE $USERDEF /home/videos/filme/temp/vdr-mplayer.mpg
  • Ich hab auch schon Stunden damit verbracht ...
    CPU bis 3200 Mhz P4 / Buffer bis 80960 MB usw.


    Denn 5000 ist wirklich miese Qualität auf einem Grossen TV.
    (Das reicht gerade mal für 16 Farbige Trickfilme)
    Somit ist vdr bisher ungeeignet zum Abspielen von DivXviD Files.
    AC3 macht das ganze ruckeln noch schlimmer ...


    Aber was solls mittlerweilen ruckelt vdr ja schon von ganz alleine ...
    (ARD/ZDF .. machmal schon pro7 usw / bei AC3overDVB Ton)


    Für pmeg4 Files hab ich jetzt eine Lacie Silverscreen genommen.
    Die läuft gut, mit toller Qualität ... und vermutlich 500 Mhz ...


    Ich hab nun endlich eine DXR3 vdr zum laufen gekriegt ..
    Nun will ich mal mplayer da drauf etwas zum schwitzen bringen.


    Vielleicht passiert das Ruckeln es ja nur bei den DVB Karten.

  • Zitat

    Original von thenktor
    Wie meinst du das mit "in eine Datei schreiben"?
    Wenn ich den mencoder benutze und das AVI in eine MPEG Datei umkodiere, dann habe ich keine Ruckler im MPEG:


    Ich meine damit, daß man entweder MPlayer ohne die DVB-Header kompiliert (dann schreibt er alles in eine Datei namens grab.mpg, wenn man über mpegpes ausgibt), oder man gibt beim Ausgabedevice noch einen Filenamen an:

    Code
    mplayer -vo mpegpes:grab.mpg ...


    Zitat

    Noch etwas: bei lavc=5000 können die 5000 unmöglich 5000 kbit bedeuten. Der mencoder schafft bei 2000 kbit noch ein gutes Bild und mit mplayer lavc=2000 bekommt man nur noch Pixelbrei.


    Ich kann nur wiedergeben, was in den man pages steht. In den Code tauche ich nicht ab.
    Überhaupt habe ich oft den Eindruck, man sollte so einige Diskussionen auf die mplayer-users Mailingliste verlagern, da da ja hoffentlich auch ein paar MPlayer-Entwickler mitmischen...


    Gruß,
    Juri

  • So, jetzt habe ich auch mal mit der MPEG Ausgab von MPlayer getestet und mit MEncoder verglichen:
    Video Bitrate eingestellt: 5000 (lavc=5000 / vbitrate=5000)
    -mencoder kommt auf eine Video Bitrate von 1,9 MBit/s
    -mplayer kommt auf eine Video Bitrate von 4,5 MBit/s


    Video Bitrate eingestellt: 9000 (lavc=9000)
    -mplayer kommt auf eine Video Bitrate von 5,3 MBit/s


    Also da frage ich mich ernsthaft, wo diese Unterschiede herkommen und wieso MPlayer so hohe Bitraten braucht um gute Qualität zu erzeugen. So richtig werde ich aus dem ganzen Zeug noch nicht schlau.


    Als nächsten Lösungsversuch könnte ich mir vorstellen, den Film mit mencoder oder transcode ins MPEG Format zu wandeln und das dann mittels Pipe oder Stream an mplayer weiterzureichen. Ob das geht weiss ich aber noch nicht.

  • Also ich meine, ich habe die Ursache für das Ruckeln gefunden. Auf linuxforen.de hat wakko gerade eben das geschrieben:

    Zitat

    Scheint wohl doch ein Problem im Mplayer zu sein. In der mplayer-dvb mailing list kann man im Dezember 2004 etwas darüber lesen. Die DVB-Karten haben wohl eine Grenze von 10Mbit/s. Und obwohl man über den VOP eine Grenze von 5Mbit/s angibt, kann es in einigen Szenen wohl mehr als 10Mibit/s ergeben und ein kurzer Ruckler ist zu sehen (soweit wie ich es verstanden habe). Schraubt man den VOP-Wert noch weiter hoch, wird diese Grenze umso häufiger überschritten. Geht man weiter nach unten, sinkt die Qualität ins bodenlose. Die 5000 ist dann wohl ein guter Wert um die 10Mbits nicht zu überschreiten. Der PCI-Bus spielt nach dieser Theorie wirklich keine Rolle.
    Auf der Mailing-List hat jemand auch einen Patch veröffentlicht, ob der was bringt, weiss ich nicht.


    Ich hab mir das ganze mal auf der Mailing List angesehen:
    http://mplayerhq.hu/pipermail/…2004-December/thread.html
    Da den Thread anschauen: [MPlayer-dvb] Better picture for mplayer-dvb


    Diese Erklärung hört sich bis jetzt mit Abstand am besten an und würde sich auch mit meinen restlichen Erkenntnissen decken:
    1. mplayer mit mpeges Ausgabe erzeugt viel höhere Bitraten als mencoder. Obwohl Qualität und CPU Belastung bei beiden annähernd gleich ist. Das würde erklären, wieso sich mit mencoder erstellte MPEGs immer problemlos abspielen lassen.
    2. Andere MPEGs mit hohen Bitraten, zB VDR Aufnahmen oder DVDs haben zwar hohe Durchscnittswerte, bleiben aber immer unter den 10 MBit/s und machen deswegen keine Probleme.
    3. Die mit mplayer -vo mpeges:datei.mpg und lavc=9000 erstellte MPEG Datei läuft am Monitor ruckelfrei aber über die DVB Karte kommt es wieder zu Rucklern.


    Als Lösung bliebe demnach nur eine harte Bitratengrenze für mpeges in den mplayer zu bauen oder eben doch den MPEG Stream mit etwas anderes zu erzeugen (zB mencoder/transcode/vlc)

  • Na endlich scheint man dem Problem auf die Spur zu kommen.
    Die Erklärungen von wegen PCI Bus ... der Überträgt in der Praxis problemlos 100 MByte /sec.


    Komisch ist nur, das vdr nun auch beim LiveTV mit ruckeln anfing .. ;(

  • Weiss jemand, wie ich an den Patch in der Mailing-List komme. In den Archiven werden (so glaube ich) keine Attachments gespeichert. Ich möchte das mit den Bitratengrenzen mal ausprobieren...


    Gruß
    Dagget (aka Wakko)

Jetzt mitmachen!

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