![Wie kann man mithilfe von ffmpeg die variable Bildrate eines Videos ableiten und mit doppelten Bildern überlagern?](https://rvso.com/image/1648624/Wie%20kann%20man%20mithilfe%20von%20ffmpeg%20die%20variable%20Bildrate%20eines%20Videos%20ableiten%20und%20mit%20doppelten%20Bildern%20%C3%BCberlagern%3F.png)
Ich habe eine verlustfreie Videoaufnahme eines Spiels ohne Screen Tearing. Das Video selbst hat konstant 60 fps, aber die Bildrate des Spiels schwankt aufgrund von Leistungsproblemen, die wir debuggen, zwischen 20 und 30 fps. Wir können einen FPS-Zähler im Spiel einblenden, aber dies wirkt sich auf die Leistung aus und gibt ein ungenaues Bild der tatsächlich erreichbaren Bildrate. Gibt es eine Möglichkeit, stattdessen mit ffmpeg die Bildrate aus den doppelten Bildern in der Videodatei abzuleiten und eine neue Videodatei mit der abgeleiteten Bildrate oder den überlagerten Bildzeiten zu erstellen?
Durch einige Recherchen habe ich herausgefunden, dass ffmpeg -i lossless.mkv -vf "mpdecimate=hi=0:lo=0:frac=0" -loglevel debug -f null -
eine Liste aller duplizierten Frames korrekt ausgedruckt wird, aber das ist nicht sehr nützlich und es kann kompliziertes Scripting erfordern, um das gewünschte Ergebnis zu erzielen. Wenn es eine Möglichkeit gibt, das Video zuerst in eine variable Framerate umzuwandeln, indem die duplizierten Frames kombiniert werden, und diese Framerate dann über das Video zu legen, wäre das idealer.
Bei meinen Tests habe ich diese Befehlskombination ausprobiert:
ffmpeg -i lossless.mkv -vf "mpdecimate=hi=0:lo=0:frac=0" -vsync vfr -r 60 -c:v libx264 -preset medium -crf 0 -c:a copy lossless-vfr.mkv
ffmpeg -i lossless-vfr.mkv -vsync vfr -r 60 -vf "drawtext=fontfile='C\:\\Windows\\Fonts\\arial.ttf':x=10:y=10:fontsize=20:fontcolor=white:text='frametime\=%{expr\:pkt_duration}'" -c:v libx264 -preset medium -crf 0 -c:a copy lossless-fps.mkv
Die angezeigte Frametime zeigt jedoch trotz der variablen Framerate immer den gleichen Wert im Overlay von 0,016000. Wenn ich es ausführe, ffprobe -show_frames lossless-vfr.mkv
sehe ich, dass der pkt_duration_time
Wert von einem Frame zum anderen variiert. Daher ist es seltsam, dass beim Zeichnen des Text-Overlays ein konstanter Wert angezeigt wird. Wie kann ich ein genaues Overlay der variablen Framerate erhalten?