![Как вывести и наложить переменную частоту кадров видео на повторяющиеся кадры с помощью ffmpeg?](https://rvso.com/image/1648624/%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8%20%D0%B8%20%D0%BD%D0%B0%D0%BB%D0%BE%D0%B6%D0%B8%D1%82%D1%8C%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%83%D1%8E%20%D1%87%D0%B0%D1%81%D1%82%D0%BE%D1%82%D1%83%20%D0%BA%D0%B0%D0%B4%D1%80%D0%BE%D0%B2%20%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%20%D0%BD%D0%B0%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%B5%D1%81%D1%8F%20%D0%BA%D0%B0%D0%B4%D1%80%D1%8B%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20ffmpeg%3F.png)
У меня есть видеозапись игры без потерь качества без разрывов экрана. Само видео имеет постоянную частоту 60 кадров в секунду, но частота кадров игры колеблется между 20-30 кадрами в секунду из-за проблем с производительностью, которые мы отлаживаем. Мы можем наложить счетчик 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
значение меняется от кадра к кадру, поэтому странно, что оно получает постоянное значение при отрисовке текстового наложения. Как мне получить точное наложение переменной частоты кадров?