FFMPEG x11grab/pulse AV-Aufnahme: Nicht-monotones DTS

FFMPEG x11grab/pulse AV-Aufnahme: Nicht-monotones DTS

Ich habe mit vielen Optionen herumgespielt, um das Problem zu beheben, aber ich dachte, es wäre besser, von Anfang an damit anzufangen, was ich will, und um Hilfe zu bitten. Ich möchte einige emulierte Spielaufnahmen machen, normalerweise in einer Auflösung von 256 x 240, also dachte ich, wenn ich schon dabei bin, könnte ich die Aufnahmen auch verlustfrei und ohne Neuskalierung machen. Ich verwende diese Befehlszeile:

ffmpeg -f x11grab -i :0.0 -f pulse -i alsa_output.pci-0000_08_00.3.analog-stereo.monitor -ac 2 -c:v libx264rgb -pix_fmt bgr0 -c:a copy -y /tmp/capture.mkv

(Übrigens verwende ich /tmp als RAM-Disk-/TMPFS-Partition, ich bin nicht sicher, ob das Auswirkungen hätte.)

Ich stoße jedoch immer auf eine Art Zeitstempelproblem mit einer Warnung, die ungefähr so ​​aussieht:

[matroska @ 0x55b042f269b0] Non-monotonous DTS in output stream 0:1;
previous: 144, current: 141; changing to 144. This may result in
incorrect timestamps in the output file.

Das resultierende Video weist eine Desynchronisierung von Audio und Video auf und bei der Wiedergabe friert das Video zufällig ein und wird schneller, wobei der Ton verzerrt ist und die Wiedergabe mittendrin möglicherweise ganz stoppt. Das Aufnehmen von Video oder Audio funktioniert einzeln einwandfrei, aber wenn ffmpeg versucht, sie zu synchronisieren, treten anscheinend Probleme auf.

Ich habe alle möglichen Optionen aus Forenbeiträgen ausprobiert, insbesondere im StackExchange-Netzwerk, aber die einzige, die in die richtige Richtung zu funktionieren schien, war -async 1/-af aresample=async=1:min_hard_comp=0.100000:first_pts=0:

ffmpeg -f x11grab -i :0.0 -f pulse -i alsa_output.pci-0000_08_00.3.analog-stereo.monitor \
    -ac 2 -c:v libx264rgb -pix_fmt bgr0 -c:a pcm_s16le \
    -af aresample=async=1:min_hard_comp=0.100000:first_pts=0 -y /tmp/capture.mkv

Dies gibt keine DTS-bezogenen Warnungen aus, aber ich erlebe tatsächlich ein Einfrieren von Audio/Video während des Spiels und das resultierende Video ist immer noch nicht großartig. Ich bezweifle es ein wenig, aber es könnte sein, dass meine Hardware einfach nicht in der Lage ist, den Overhead von Spiele-Emulation, Aufnahme und Codierung gleichzeitig zu bewältigen. Vielleicht könnte ich bestätigen, ob es sich um diese Art von Problem handelt, wenn es möglich ist, sowohl Vcodec als auch Acodec auf „Kopieren“ einzustellen, dies in eine .nut-Datei zu muxen (mkv mag anscheinend kein Rohvideo) und Video und Audio irgendwie im Nachhinein neu zu synchronisieren.

Diese Frage ist vielleicht nicht sehr gut formuliert, und das tut mir leid, aber ich bin mit meinem Latein am Ende. Ich dachte, es wäre am besten, selbst eine Frage zu stellen, beginnend mit meinem Ziel und dann ein wenig über Dinge, die ich versucht habe. Ich möchte Fehler beheben, verschiedene Vorschläge erneut ausprobieren und beurteilen, ob das, was ich versuche, mit meiner Hardware tatsächlich möglich ist. Das ist vielleicht etwas zu optimistisch, da die meisten Stackexchange-Fragen scheinbar sterben, wenn der Fragesteller nicht glaubt, dass seine Frage innerhalb von 5 Stunden gelöst wurde und niemand etwas anderes anbieten kann.

Dies sind laut „neofetch“ relevante Spezifikationen:

CPU: AMD Ryzen 5 1600 (12) @ 3.200GHz
GPU: NVIDIA GeForce GTX 970
Memory: 2910MiB / 16017MiB

verwandte Informationen