Ruckelfreien Screencast mit FFmpeg erstellen

  • Hallo,


    ich habe vor einigen Jahren mal Screencasts von lokal gespeicherten Inhalten hergestellt, die Ergebnissen waren brauchbar, aber nicht überragend. Welche genauen Settings ich da bei FFmpeg verwendet habe, weiß ich nicht mehr. Ich möchte nun versuchen von Webinhalten einen Screencast zu erstellen. Zunächst in SD, später auch in HD. Ich setze voraus, dass der Stream/Download ruckelfrei läuft. Es geht mir mehr darum wie ich mit ffmpeg einen ruckelfreien Screencast hinbekomme, denn bei o.g. Versuchen waren die Dateien lokal gespeichert und dennoch hatte ich manchmal ruckelnde Bilder, wenn sich die Kamera langsam durch das Bild bewegte.


    Ich vermute nicht, dass das Schwächen der Hardware waren, ich denke ich hätte müssen die Framerate des Screencasts anpassen müssen. Woran? An die Framerate des Monitors, der Graka oder des Streams? Wie bekommt man die Framerate des Streams heraus?


    Hat jemand eine schöne kleine Command Line für FFmpeg die schon erfolgreich getestet wurde? Oder gibt es bessere Möglichkeiten?

    _________________________


    Zitat

    Zieht ein Bienenschwarm aus, so wird er herrenlos, wenn nicht der Eigentümer ihn unverzüglich verfolgt oder wenn der Eigentümer die Verfolgung aufgibt.


    § 961 BGB [Eigentumsverlust bei Bienenschwärmen]


    :D

  • Tja, wenn was "ruckelt", gilt erst mal zu klären: Was und warum? Es wäre Zeitverschwendung, an der Encodierung herumzuoptimieren, wenn die Ursache im Tearing liegt, also dass der Bildinhalt wechselt, während der Monitor sein Bild aufbaut.


    Lösungen sind hier auch nicht immer trivial. Theoretisch sollte Tearing sich vermeiden lassen, wenn der Player mit dem Framewechsel wartet, bis der Monitor einen Bildaufbau abgeschlossen hat (wait for vertical retrace). Nach meiner Erfahrung funktioniert das aber bei meinen Flachbildschirmen mit Computerspielen, die das anbieten, gerade eben nicht, was paradox ist.

  • Damit wir uns nicht falsch verstehen. Die Ruckler entstehen nicht durch die Wiedergabe, sondern treten erst auf wenn ich den aufgenommenen Screencast ansehe. Es geht mir auch nicht darum das im Encoding rauszubekommen, sondern schon beim Screencast zu verhindern.


    Was muss denn genau synchron laufen, damit das eben nicht passiert?


    Ich plane ohnehin einen neuen Monitor zu kaufen, auf was müsste man achten? Ich habe auch meinen Fernseher per HDMI angeschlossen. Machen die das besser? Wäre es praktikabler den Screencast durchzuführen wenn er am TV angeschlossen ist?


    Muss ich irgendwas in den FFmpeg-Einstellungen beachten, z. B. mit -r die Input-Framerate festlegen?

    _________________________


    Zitat

    Zieht ein Bienenschwarm aus, so wird er herrenlos, wenn nicht der Eigentümer ihn unverzüglich verfolgt oder wenn der Eigentümer die Verfolgung aufgibt.


    § 961 BGB [Eigentumsverlust bei Bienenschwärmen]


    :D

  • Damit wir uns nicht falsch verstehen. Die Ruckler entstehen nicht durch die Wiedergabe, sondern treten erst auf wenn ich den aufgenommenen Screencast ansehe.

    :/Den Unterschied verstehe ich nicht ganz. Aber vielleicht stelle ich mir unter einem "Screencast" auch das falsche vor? Erzähl mal mehr darüber, was bei dir passiert, welche Software verwendet wird, wie die eingestellt ist, ...


    Für "Ruckler" kann ich mir drei mögliche Ursachen vorstellen:

    1. Zwischen mehreren aufeinander folgenden Frames sind die Zeitabstände der Aufnahme unterschiedlich (Variable Frame-Rate bei der Aufnahme). Selbst wenn jede einzelne Frame-Dauer jeweils bei der Wiedergabe korrekt beachtet wird, fällt ja doch eine Unregelmäßigkeit im zeitlichen Fortschritt auf. Und falls eine VFR-Aufnahme mit CFR abgespielt wird, umso mehr. Wenn man sich das Video während eines theoretisch gleichmäßigen Schwenks Bild für Bild anschaut, sollten unterschiedliche Abstände bei der Bewegung auffallen.
    2. Es gibt Tearing bereits während der Aufnahme, also der Bildinhalt wechselt, während die Aufzeichnungssoftware den Bildschirminhalt ausliest. Das sieht man beim Anschauen von Einzelbildern des Materials.
    3. Das Tearing entsteht allein bei der Wiedergabe, das Material enthält saubere Bilder.


    Wie kann man das nun vermeiden?

    1. Weiß ich nicht genau... nicht jede Aufnahmesoftware lässt sich wohl zuverlässig auf konstante Framerate zwingen, es wird immer etwas auch vom Zeitbedarf der Komprimierung jedes Frames abhängen, der umso höher ist, je mehr sich im Bild verändert.
    2. Pech gehabt. Muss die Aufnahme-Software verhindern (vertical retrace).
    3. ist ein Zusammenspiel von Mediaplayer, Grafikkarte und Monitor. Im Vollbildmodus versuchen manche Player, eine Bildwiederholrate einzustellen, die der des Videos oder Vielfachen davon entspricht; wenn aber nicht mit einer aus der Fernsehtechnik standardisierten Framerate aufgezeichnet wurde, wird das u.U. nicht klappen.
  • Na ja, einen Screencast halt. Die Aufnahme des Inhaltes des Desktops. Wenn dort ein Video abgespielt wird, wird das Video aufgenommen. An Software verwende ich nur FFmpeg und halt die Wiedergabequelle. Das kann z. B. iTunes oder der Webbrowser sein bei Streams.


    Ich hab mal fix einen Test (unter Linux) mit einer lokal gespeicherten Datei gemacht mit dieser Kommandozeile


    Code
    1. ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0 -c:v libx264 -crf 0 -preset ultrafast output.mkv


    Hab es auch mit einer Framerate von 23.976 versucht wie es die Quelle hat, beide ruckelten zunächst einmal nicht. Ich will morgen nochmal einen Versuch mit einer Doku machen, ich hoffe ich finde noch die eine Szene, von der ich glaube sie eignet sich gut dafür. Dürfte gleich zu Beginn von Planet Erde, Folge Bergwelten sein. Da gibt es einen Landschaftsschwenk über besagte Bergwelt.


    Ich könnte mir vorstellen, dass Streams mitzuschneiden schon problematischer wird. Wird da VFR verwendet? Vorstellbar wäre es, wenn es Bandbreite spart. Einstellungen hat man da leider wenig. Der Monitor läuft hier mit 60Hz. Hat das irgendeinen Einfluss auf den Screencast? Passen sich die Player daran an? Keine Serie udn kein Film hat 30fps oder ein Vielfaches davon.

    _________________________


    Zitat

    Zieht ein Bienenschwarm aus, so wird er herrenlos, wenn nicht der Eigentümer ihn unverzüglich verfolgt oder wenn der Eigentümer die Verfolgung aufgibt.


    § 961 BGB [Eigentumsverlust bei Bienenschwärmen]


    :D