![如何使用 ffmpeg 推導並覆蓋具有重複幀的影片的可變幀率?](https://rvso.com/image/1648624/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20ffmpeg%20%E6%8E%A8%E5%B0%8E%E4%B8%A6%E8%A6%86%E8%93%8B%E5%85%B7%E6%9C%89%E9%87%8D%E8%A4%87%E5%B9%80%E7%9A%84%E5%BD%B1%E7%89%87%E7%9A%84%E5%8F%AF%E8%AE%8A%E5%B9%80%E7%8E%87%EF%BC%9F.png)
我有一個遊戲的無損視訊錄製,沒有螢幕撕裂。影片本身恆定為 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
值確實從一幀到另一幀有所不同,因此在繪製文字疊加時獲得恆定值很奇怪。如何獲得可變幀速率的準確疊加?