Die Framerate des Matroska-Formats ist bei bestimmten Werten nicht genau

Wenn das Matroska-Format verwendet wird, wird bei bestimmten Frameraten nicht mit der exakten Eingabe-Framerate aufgezeichnet, sondern etwas höher als die Eingabe-Framerate.

Als Beispiel:

ffmpeg -video_size 1920x1080 -f x11grab -framerate 30 -i :0.0 -c:v libx264rgb -crf 0 -preset ultrafast video.mkv

erzeugt keine Aufnahme mit 30fps, sondern mit 30.0003fps.

Dies ist nicht gut, da selbst eine geringfügige Änderung der Eingabe-Framerate zu einem starken Frame-Stottern führen kann. Es sei denn, ffmpeg beschleunigt den Stream um 1.00001x, was ich bei der Verwendung von x11grab nicht glaube.

Um dies zu beweisen, kann VLC zur Überprüfung der Bildrate verwendet werden.

Gibt es eine Möglichkeit, genau 30 fps zu erzwingen, oder ist das ein Formatfehler?

Außerdem uname -a:

Linux linux 4.1.15-rt17-1-rt-fixedtimers #1 SMP PREEMPT RT Sat Jan 16 01:14:52 GMT+5 2016 x86_64 GNU/Linux
Wie äußert sich "Major Frame Stottern"? Ich kann mir Synchronisierungsprobleme vorstellen, aber ich kann mir nicht genau vorstellen, wie etwas Wichtiges von einem Fehler von 1 Teil pro 10000 kommen könnte.
Bitte zeigen Sie die vollständige Konsolenausgabe Ihres ffmpegBefehls.
Mir ist gerade aufgefallen, dass dies nur im .mkv-Format passiert. Ich aktualisiere Informationen darüber. Hier ist die Paste: pastebin.com/yUbn1zrL
Fügen Sie für die Aufnahme auf MKV -vsync 0. Unabhängig von der Rate, die die Quelle liefert, codiert MKV dieselben Timings.

Antworten (1)

MKV speichert keine Framerate in seinem Container. Daher betrachtet ffmpeg/vlc stattdessen die Standarddauer eines Frames. Es sieht 33,333 ms und berechnet, woher Ihre seltsame Zahl kommt.

Weitere Informationen finden Sie unter: https://gitlab.com/mbunkus/mkvtoolnix/wikis/Wrong-frame-rate-displayed

Um dies zu testen, können Sie mit ffprobeausführen -show_frames. Ich denke, Sie werden feststellen, dass die Präsentationszeiten für jeden Rahmen genau richtig sind.