Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video FFMPEG:获取视频中每个帧对应的系统时间_Video_Ffmpeg_Duplicates_Timestamp_Video Capture - Fatal编程技术网

Video FFMPEG:获取视频中每个帧对应的系统时间

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分

我目前正在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捕获此帧时,是否有方法获取系统时间?任何输入都会有帮助。

使用

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过滤器同步视频。