FFmpeg Desktop Capture mit vielen (Fehler) Meldungen - Aufnahme ist in Ordnung und synchron :-)

  • Ich habe hier mit:

    Linux Mint 19.2 x64 Cinnamon >

    eine Desktop Aufnahme (x264 lossless und WAV Audio Spur) mit folgenden Terminal Befehl aufgenommen:


    Code
    1. ffmpeg -f x11grab -framerate 25 -video_size 1920x1080 -i :0+0,0 -f pulse -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -pix_fmt yuv444p -c:v libx264 -preset ultrafast -qp 0 -c:a pcm_s16le -q:v 1 -s 1920x1080 -f matroska "Desktop-Capture.001.mkv"


    Die Aufnahme ist wie ich finde in Ordnung und der Ton passt auch synchron zum Video :-)
    Nur leider stören mich folgende gelbe (Fehler) Meldungen:


    141174.png


    536189.png


    Ich mach mir da Sorgen :rtfm:



    -sqcale is ignorde, crf is recommended

    +

    past duration 0.XXXXXX too large

    Thread message queue blocking: consider raising the thread_queue_size option (current value: 8))

    Non-monotonous DTS in output stream 0:1; previous XXX, current: XXX: changing to XXX

    This may result in incorrect timestamps in the output file.


    Was bedeutet das?


    Und falls jemand Verbesserung an meinem FFmpeg Script hat, würde ich mich über Korrektur Befehle freuen :)

  • Zitat

    -sqcale is ignorde, crf is recommended

    Anstatt '-qp 0' will ffmpeg, dass man '-crf 0' nimmt.


    Zitat

    past duration 0.XXXXXX too large
    Thread message queue blocking: consider raising the thread_queue_size option (current value: 8))
    Non-monotonous DTS in output stream 0:1; previous XXX, current: XXX: changing to XXX
    This may result in incorrect timestamps in the output file.

    Versuch mal "-async 1 -vsync 1".


    Cu Selur

  • Danke dir, es ist schon etwas besser geworden mit den gelben (Fehler) Meldungen :)


    Es bleiben trotzdem noch folgende gelbe Meldungen übrig:


    Stream #0: not enogh frames to estimate rate; consider increasing probesize

    ^ Diese war auch schon am Anfang da - Hatte ich vergessen im ersten Beitrag zu erwähnen.

    Da blicke ich nicht durch was das genau bedeuten soll?

    Auf Deutsch grob übersetzt: nicht genug Frames um die Rate zu schätzen...

    Bekommt er die Framerate nicht genau hin obwohl 25 FPS angegeben sind?


    -sqcale is ignorde, crf is recommended

    Diese Meldung sollte eigentlich jetzt verschwinden!

    Habe statt "-qp 0" nun "-crf 0" tatsächlich genommen.

    (Siehe neues FFmpeg Script Update weiter unten)


    Und diese Meldung kommt weiter hin:

    past duration 0.XXXXXX too large

    Ab und zu noch diese hier:

    Thread message queue blocking: consider raising the thread_queue_size option (current value: 8))


    Code
    1. ffmpeg -f x11grab -framerate 25 -video_size 1920x1080 -i :0+0,0 -f pulse -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -pix_fmt yuv444p -c:v libx264 -crf 0 -preset ultrafast -c:a pcm_s16le -q:v 1 -s 1920x1080 -f matroska -threads 0 "Desktop-Capture.001.mkv" -async 1 -vsync 1
  • Zitat

    Thread message queue blocking: consider raising the thread_queue_size option (current value: 8))

    "Thread message queue blocking"-Nachricht weicht eigentlichd arauf hin, dass der Computer mit dem Encoden in Realtime nicht mitkommt.

    Kann an CPU, Platte usw. liegen.

    Zitat

    -thread_queue_size size (input)
    This option sets the maximum number of queued packets when reading from the
    file or device. With low latency / high rate live streams, packets may be
    discarded if they are not read in a timely manner; raising this value can
    avoid it.

    Quelle: https://www.ffmpeg.org/ffmpeg-all.html


    Gerade wenn es nur ab und zu passiert kann das es helfen einen höheren Wert für thread_queue_size zu wählen.


    Falls der Computer da irgendwo nen Engpass hat würde das auch das 'past duration 0.XXXXXX too large' erklären.


    Cu Selur


    Ps.: Falls möglich würde ich empfehlen nicht x264 sondern eher NVEnc oder QSVEnc sprich einen Encoder der einen Hardwareencoder verwendet zu nutzen. OBS ist vermutlich keine schlechte Idee.

  • Aber OBS ist praktisch ffmpeg + GUI und sinnvolle Einstellungen zusammengefasst. Damit schon probiert?

    OBS kenn ich schon sehr viele Jahre (Ist ganz brauchbar)

    Leider gibt OBS In der Log Datei die verwendete FFmpeg Kommandozeile nicht Preis.


    Hab gerade im Internet gesucht z.B. nach OBS FFmpeg command line output

    Die geben nix Preis :(


    Das "Free and open source" sollten sie streichen.

  • Ps.: Falls möglich würde ich empfehlen nicht x264 sondern eher NVEnc oder QSVEnc sprich einen Encoder der einen Hardwareencoder verwendet zu nutzen. OBS ist vermutlich keine schlechte Idee.

    Da muss ich mal schauen ob ich mir Befehle irgendwo im Internet für NVEnc oder QSVEnc zusammen kratzen kann ;)

    Um eine Lossless Video Aufnahme damit hinzubekommen..

  • Wenn ich mich recht erinnere, unterstützen NVEnc und QSEnc möglicherweise nicht den verlustlosen Modus der H.264-Kompression, weil dieser grundlegend anders funktioniert als die üblichen Algorithmen im Main- und High-Profil. Sie unterstützen aber wohl auch nicht den CRF-Modus wie x264, oder es würde mich überraschen, dass GPU-Hardware-Encoderchips das tun. Korrigiert mich, wenn meine Erinnerungen veraltet sind... :saint:


    In einem Reddit-Beitrag habe ich diese Empfehlung für verlustfreie Aufzeichnungen mit ffmpeg und libx264 im RGB-Modus mit vollem Farbumfang (notwendig für die Aufzeichnung von Computerspielen) gefunden. Es kann aber gut sein, dass andere verlustfreie Videocodecs einen geringeren Rechenaufwand haben als x264.

  • In einem Reddit-Beitrag habe ich diese Empfehlung für verlustfreie Aufzeichnungen mit ffmpeg und libx264 im RGB-Modus mit vollem Farbumfang (notwendig für die Aufzeichnung von Computerspielen) gefunden. Es kann aber gut sein, dass andere verlustfreie Videocodecs einen geringeren Rechenaufwand haben als x264.

    Was nützt mir diese OPS Konfiguration, wenn ich nicht weiß was im Hintergrund tatsächlich passiert ;)

    Das könnte ich ganz einfach nach prüfen in dem ich den verwendeten FFmpeg Aufnahme Befehl den OPS da benutzt
    nachträglich in der Konsole unter Windows oder Terminal unter Linux eingeben kann.

    Vertrauen ist gut - Kontrolle ist besser ;)


    Leider gibt OBS den verwendeten FFmpeg Aufnahme Befehl nicht Preis.

    Selbst wenn ich OBS über die Konsole heraus starte und dann folgenden Befehl eingebe:

    obs --unfiltered_log

    Selbst dann wird der verwendete FFmpeg Aufnahme Befehl nicht angezeigt!

    Siehe: Bild Anhang unten..


    Ich würde mich gerne im OBS Forum (Leider Englisch) anmelden um diese berechtigte Frage zu stellen!

    Könntest du mir auf Englisch in paar Sätzen formulieren wie man das am besten beschreiben kann?


    OBS - Completely FFmpeg command line output in the Log File ...

  • Falls der Computer da irgendwo nen Engpass hat würde das auch das 'past duration 0.XXXXXX too large' erklären.

    Ich habe bei dem oben genannten FFmpeg Desktop Capture Befehl in Beitrag #3

    eine CPU Auslastung zwischen 20-40%

    Siehe: Bild Anhang unten..



    Zudem müsste doch -preset ultrafast = eine hohe CPU Auslastung verhindern?

    Und dann könnte man doch noch z.B. -threads 4 setzen?? (Für 4 CPU Zuweisung) ?

    Ich habe 8 CPUs zur Verfügung mit diesem hier: Intel Core i7-2760QM (2.40GHz, 6MB L3, 1600MHz FSB, 45W)


    Zu den gelben (Fehler) Meldungen steht hier folgendes geschrieben:


    Code
    1. FFMpeg versions after Jan 15 2015 often display this warning.
    2. It has been added to warn about possible rate control distortion, otherwise it does not cause any harm.
    3. FFMpeg-Versionen nach dem 15. Januar 2015 zeigen diese Warnung häufig an.
    4. Es wurde hinzugefügt, um vor möglichen Verzerrungen der Ratensteuerung zu warnen, da es sonst keinen Schaden verursacht.

    https://stackoverflow.com/ques…tion-x-xxx-too-large-mean

  • Selbst dann wird der verwendete FFmpeg Aufnahme Befehl nicht angezeigt!

    Siehe: Bild Anhang unten..


    Ich würde mich gerne im OBS Forum (Leider Englisch) anmelden um diese berechtigte Frage zu stellen!

    Könntest du mir auf Englisch in paar Sätzen formulieren wie man das am besten beschreiben kann?

    Ich glaube, ich habe mich da missverständlich ausgedrückt. OBS verwendet ffmpeg, aber nicht das Kommandozeilen Programm davon, sondern ist direkt dagegen gelinkt.


    Sonst könnte man z.B. nicht während des Streamens einfach einen Filter austauschen.

  • Bei OBS kann man sich nach der Video Aufnahme, eine Protokoll Datei ansehen..

    In dieser *.log Datei sind u.a. Rechner Daten, geladene Module, benutzte Video und Audio Settings usw.. aufgeführt.

    Siehe: Bild Anhang unten..


    Was fehlt ist der verwendete Aufnahme Befehl wie das Video aufgenommen wurde.

    Ob jetzt FFmpeg Static gelinkt oder fest verwurzelt ist, spielt (meine ich) keine Rolle ;)

    Befehl ist Befehl.

  • Ob jetzt FFmpeg Static gelinkt oder fest verwurzelt ist, spielt (meine ich) keine Rolle ;)

    Befehl ist Befehl.

    Nein.


    Es gibt bei OBS keine ffmpeg.exe, die über einen Kommandozeilenbefehl aufgerufen wird. Es gibt Programmfunktionen innerhalb von OBS, die ohne jede Kommandozeile im Programm verwendet werden, über Heap und Stack und CPU-Register.


    Vielleicht ist dir ja auch schon mal bei x264 oder x265 aufgefallen, dass die Liste an Parametern, die als Zusatzinfo im Videostream gespeichert wird, gar nicht den Kommandozeilenparametern entspricht, die man an eine x264.exe oder x265.exe übergeben hätte, beispielsweise findet man da niemals etwas mit Preset oder Tuning. Das ist ein ähnliches Prinzip: Man muss diese Encoder nicht über einen Kommandozeilenbefehl steuern, man kann sie auch in einem Programm verwenden, das niemals eine Kommandozeile generiert, sondern stattdessen eine Datenstruktur mit unterschiedlichen Werten allein im Hauptspeicher ablegt und dann deren Adresse über eine Programmfunktion an die eingebundene Encoderfunktion übergibt.