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
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 ffprobe
ausführen -show_frames
. Ich denke, Sie werden feststellen, dass die Präsentationszeiten für jeden Rahmen genau richtig sind.
Jim Mack
Logan
ffmpeg
Befehls.Tildepfeil
Gyan
-vsync 0
. Unabhängig von der Rate, die die Quelle liefert, codiert MKV dieselben Timings.