ffmpeg对延时视频的时间戳进行编码



我有一个延时视频(如果重要的话,由GoPro生成(,每5秒有一个图像。我想把时间戳编码到上面。以前我用过这样的命令来在中刻录时间戳

# Convert the date to EPOCH. This will be used to set the time for the draw text
# method.
EPOCH=$(date --date="${STARTDATE}" +%s)
# we assume that the STARTDATE is in UTC 0000, Zulu time, GMT and that we want
# to convert it to the local time on the computer.
ffmpeg -i "${INPUT}" -vf drawtext="fontsize=30:fontcolor=yellow:text='%{pts:localtime:${EPOCH}}':x=(w-text_w) - 10:y=(h-text_h) - 10" -vcodec libx265 -crf 28 "${OUTPUT}"

问题是,这一进展产生的时间戳就像是一个正常的视频,在30分钟的时间间隔上打上了25秒的印记。我想要的是与时间间隔相匹配的时间戳。

我看了绘图文档。我认为rate可能是关键,但1/5150都会产生这样的错误:

Parsed_drawtext_0 @ 0x10c607370] Failed to parse expression: (h-text_h) - 10 r=1/5 

我想我可能需要乘以当前帧的值来获得正确的时间,但我不知道如何做到这一点。

pts函数将只使用存储的时间戳。您必须在提取文本过滤器之前修改时间戳,然后恢复原始值,即

setpts=PTS*10,drawtext=...,setpts=PTS/10

其中因子CCD_ 5是帧之间的实时性与其在延时视频中的显示间隔的比率。

我们的初中在水培实验室每10分钟有一个树莓派捕捉帧。

我使用以下命令从每张照片的元数据中提取图像文件的创建时间,并将其刻录在我的时间间隔的左上角——假设你的时钟是正确的,那就可以了!

ffmpeg -y -r 24 -export_path_metadata 1 -pattern_type glob -i './*-00Z.jpg' -vf "drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf:x=20:y=20:fontsize=40:fontcolor=yellow:text='%{metadata:DateTime:def_value}'" -c:v libx264 video-file.mp4

生成的视频如下所示:学生水培实验室延时的样本帧,在左上角中显示时间戳

相关内容

  • 没有找到相关文章