Использовать
ffmpeg.exe -f gdigrab -framerate 30 -i desktop -filter_complex settb=1/1000,setpts=RTCTIME/1000-1500000000000,mpdecimate,split[out][ts];[out]setpts=N/FRAME_RATE/TB[out] -map [out] -vcodec libx264 -pix_fmt yuv420p -preset fast -crf 0 -threads 0 nodups.mkv -map [ts] -f mkvtimestamp_v2 nodups.txt -vsync 0
FFmpeg поддерживает формат данных mkvtimestamp_v2, который сохраняет временные метки в виде текста с точностью до миллисекунды.Таким образом, в приведенной выше команде входные временные метки сначала преобразуются с точностью до миллисекунды с помощью установки, а затем setpts используется для назначения времени настенного часа каждому кадру.Но поскольку текстовый формат имеет ограниченную точность, нам нужно уменьшить временную метку.Это делается путем вычитания 15e11.После mpdecimate мы разделяем результат, отправляя одну копию для кодирования и одну для вывода метаданных.
nodups.txt будет выглядеть так:
# timecode format v2
42721944800
42721944867
42721944933
42721945200
...
Для кадра №.X, выберите X-ую запись, добавьте 15e11 (1500000000000) и затем преобразуйте в отметку времени человека, например, из https://www.epochconverter.com/