FFMPEG:根据实际创建时间创建时间戳

FFMPEG: Create timestamp based on actual creation time

期望的结果

根据视频的原始创建时间为视频的每一帧添加带有时间戳的叠加层。例如。从 2022-03-26T15:51:49.000000Z 开始,一秒钟后出现在视频中 2022-03-26T15:51.50.000000Z

接近

Creation_time 已存储在文件中,例如当 运行 ffmpeg -i input.mov" 它呈现 creation_time : 2022-03-26T15:51:49.000000Z.

向视频添加带有时间戳的叠加层: ffmpeg -i input.mov -filter_complex "drawtext=text='%{pts\:gmtime\:1507046400\:%d-%m-%Y %T}': x=100 : y=100: box=1" -c:a copy output.mp4

挑战/需要帮助

需要用实际的 creation_time 替换 gmtime\:1507046400。怎么做到的?

来源

我建议的 link 是固定日期时间。
对于滚动时间,请使用时间偏移量。
如果我选择一个任意日期和时间作为 12:02:03 的 2022/2/28,计算偏移的秒数,在本例中 12 x 60 x 60 加 2 x 60 加 3 等于 43323。
我们将日期固定为文本,然后使用时间的偏移量。

ffmpeg -i some.mp4 -filter_complex  "[0:v]drawtext=text='2022 02 28 %{pts\:hms\:43323}':x=(w-text_w)/2:y=10:font='Noto mono':fontsize=40:alpha=0.5:box=1:boxborderw=4 [vid]" -map [vid] -map 0:a -f matroska - | ffplay -autoexit -i -

对于 运行 午夜过后的视频,您需要该主题的变体。

ffmpeg -i some.mp4 -filter_complex  "[0:v]drawtext=text='%{pts\:gmtime\:1646092780}':x=(w-text_w)/2:y=10:font='Noto mono':fontsize=40:alpha=0.5:box=1:boxborderw=4 [vid]" -map [vid] -map 0:a -f matroska - | ffplay -autoexit -i -

此处的偏移量计算为自 Unix 纪元时间 (01/01/1970 00:00:00) 以来经过的秒数