Video FFMPEG:获取视频中每个帧对应的系统时间
我目前正在Windows 10系统上使用以下命令录制屏幕Video FFMPEG:获取视频中每个帧对应的系统时间,video,ffmpeg,duplicates,timestamp,video-capture,Video,Ffmpeg,Duplicates,Timestamp,Video Capture,我目前正在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分
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捕获此帧时,是否有方法获取系统时间?任何输入都会有帮助。使用
ffmpeg.exe-f gdigrab-framerate 30-i desktop-filter_complex settb=1/1000,setpts=RTCTIME/1000-15000000000,mpdecimate,split[out][ts];[out]setpts=N/FRAME_RATE/TB[out]-map[out]-vcodec libx264-pix_fmt yuv420p-预设fast-crf 0-线程0 nodups.mkv-map[ts]-f mkvtimestamp_v2 nodups.txt-vsync 0
FFmpeg支持一种称为mkvtimestamp_v2的数据格式,该格式以毫秒精度将时间戳存储为文本。因此,在上面的命令中,首先使用settb将输入时间戳转换为毫秒精度,然后使用setpts将wallclock时间分配给每个帧。但是由于文本格式的精度有限,我们需要减少时间戳。这是通过减去15e11来实现的。mpdecimate之后,我们分割结果,发送一个副本用于编码,另一个用于元数据输出
nodups.txt将如下所示
# timecode format v2
42721944800
42721944867
42721944933
42721945200
...
对于第X帧,选择第X个条目,添加15e11(15000000000),然后从转换为人工时间戳,例如而不是RTCTime是否有方法将其转换为系统时间,即系统上的本地时间?未实现。但是你只需要添加一个固定的偏移量就可以了。这可以用来同步多个实时输入吗?我必须用xstack过滤器同步视频。