gpt4 book ai didi

video - FFMPEG : Obtain the system time corresponding to each frame present in a video

转载 作者:行者123 更新时间:2023-12-04 22:52:16 24 4
gpt4 key购买 nike

我目前正在 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-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 的数据格式,它将时间戳存储为毫秒精度的文本。因此,在上面的命令中,输入时间戳首先使用 settb 转换为毫秒精度,然后使用 setpts 将挂钟时间分配给每一帧。但是由于文本格式的精度有限,我们需要减少时间戳。这是通过减去 15e11 来完成的。在 mpdecimate 之后,我们拆分结果,发送一份用于编码,一份用于元数据输出。

nodups.txt 看起来像这样

# timecode format v2
42721944800
42721944867
42721944933
42721945200
...

对于帧号。 X,选择第 X 个条目,添加 15e11 (1500000000000),然后转换为人类时间戳,例如 https://www.epochconverter.com/

关于video - FFMPEG : Obtain the system time corresponding to each frame present in a video,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53391150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com