FFMPEG: получить системное время, соответствующее каждому кадру в видео - PullRequest
0 голосов
/ 20 ноября 2018

В настоящее время я записываю экран с помощью приведенной ниже команды в системе Windows 10:

ffmpeg.exe -loglevel quiet -f gdigrab -framerate 30 -i desktop -vf mpdecimate,setpts=N/FRAME_RATE/TB -vcodec libx264 -pix_fmt yuv420p -preset slow -crf 0 -threads 0 nodups.mkv

Если я записываю видео в течение 5 минут, когда 4 минуты бездействуют.Финальное видео получено всего за 1 минуту.Я хочу узнать системное время, соответствующее конкретному кадру, из этого 1-минутного видео.Я попытался использовать команду для получения информации о кадре из этого 1-минутного видео для 40-го кадра, например: ffmpeg -i nodups.mkv -vf select='eq(n,40)',showinfo -f null - Это выводит меня

[Parsed_showinfo_1 @ 000002455fce5dc0] n:   0 pts:   1333 pts_time:1.333   pos:   158601 fmt:yuv420p sar:0/1 s:1600x900 i:P iskey:0 type:P checksum:885ECCE2 plane_checksum:[7D89AD8E DC745BDC 0E23C369] mean:[158 128 128] stdev:[101.7 4.5 4.0

Есть ли способ получить системное время, когда этот кадр былзахвачено с помощью FFMPEG?Любые входы помогут.

1 Ответ

0 голосов
/ 20 ноября 2018

Использовать

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/

...