![ffmpeg を使用して重複フレームを含むビデオの可変フレームレートを推測してオーバーレイする方法は?](https://rvso.com/image/1648624/ffmpeg%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E9%87%8D%E8%A4%87%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%E5%90%AB%E3%82%80%E3%83%93%E3%83%87%E3%82%AA%E3%81%AE%E5%8F%AF%E5%A4%89%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AC%E3%83%BC%E3%83%88%E3%82%92%E6%8E%A8%E6%B8%AC%E3%81%97%E3%81%A6%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%AC%E3%82%A4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%3F.png)
画面ティアリングのないゲームのロスレス ビデオ録画があります。ビデオ自体は 60fps で一定ですが、デバッグ中のパフォーマンスの問題により、ゲームのフレームレートは 20~30fps の間で変動します。ゲーム内に 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
、テキスト オーバーレイを描画するときに一定の値を取得するのは奇妙です。可変フレームレートの正確なオーバーレイを取得するにはどうすればよいでしょうか?