如何使用 ffmpeg 推導並覆蓋具有重複幀的影片的可變幀率?

如何使用 ffmpeg 推導並覆蓋具有重複幀的影片的可變幀率?

我有一個遊戲的無損視訊錄製,沒有螢幕撕裂。影片本身恆定為 60 fps,但由於我們正在調試的效能問題,遊戲幀速率在 20-30 fps 之間變化。我們可以在遊戲中覆蓋 FPS 計數器,但這會影響效能,並且無法準確了解真正可實現的幀速率。有沒有一種方法可以使用 ffmpeg 從視訊檔案中的重複幀中推斷出幀速率,並產生一個新的視訊文件,並覆蓋推斷出的幀速率或幀時間?

從一些研究中,我發現它將ffmpeg -i lossless.mkv -vf "mpdecimate=hi=0:lo=0:frac=0" -loglevel debug -f null -正確列印所有重複幀的列表,但這不是很有用,並且可能需要複雜的腳本才能轉換為所需的結果。如果有一種方法可以先透過組合重複影格將影片轉換為可變幀率,然後將此幀率覆蓋在影片上,那就更理想了。

在我的測試中,我嘗試了以下命令組合:

  • 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

然而,儘管幀速率可變,但顯示的幀時間始終在疊加層中顯示相同的值 0.016000。如果我運行,ffprobe -show_frames lossless-vfr.mkv我會發現該pkt_duration_time值確實從一幀到另一幀有所不同,因此在繪製文字疊加時獲得恆定值很奇怪。如何獲得可變幀速率的準確疊加?

相關內容