ffmpeg를 사용하여 중복 프레임이 있는 비디오의 가변 프레임 속도를 추론하고 오버레이하는 방법은 무엇입니까?

ffmpeg를 사용하여 중복 프레임이 있는 비디오의 가변 프레임 속도를 추론하고 오버레이하는 방법은 무엇입니까?

화면 찢김 현상 없이 게임을 무손실 비디오로 녹화했습니다. 비디오 자체는 일정한 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가변 프레임 속도의 정확한 오버레이를 얻으려면 어떻게 해야 합니까?

관련 정보