为 Windows 构建 ffmpeg,支持毫秒级时间,将本地时间戳叠加到视频上

为 Windows 构建 ffmpeg,支持毫秒级时间,将本地时间戳叠加到视频上

使用 ffmpeg,我想将当前本地时间戳(以毫秒为单位)叠加到使用 ffmpeg 格式的视频上YYYY-MM-DD HH:MM:SS.mmm。我见过类似的问题,但没有看到显示毫秒部分的答案。

使用text=%{localtime}simply 显示YYYY-MM-DD HH:MM:SS不带毫秒数。如果您尝试使用常见的毫秒说明符来显示毫秒部分,则它不会像text=%{localtime\\:%Y %m %d %H %M %S %s}或那样工作text=%{localtime\\:%Y %m %d %H %M %S %f}

如果您使用text=%{pts\\:hms}它,它确实会显示毫秒,但它不参考当前本地时间。您可以添加自午夜以来的总秒数偏移量,以使您接近当地时间,例如text=%{pts\\:hms\\:61200}使您到达下午 5 点,但这是调用命令时的快照,而不是捕获视频帧的实际当前本地时间(以毫秒为单位)。

更新:

我刚刚发现这篇文章:https://github.com/InSoundz/ffmpeg-strftime-milliseconds
看起来有人在strftime()ffmpeg 使用的函数中添加了毫秒分辨率。

我唯一的问题是我不知道如何使用此源代码重新构建 Windows 版本 *.exe。有人可以帮忙吗?一旦将其重新构建为 Windows 可执行文件,我就应该能够使用格式化程序添加毫秒分辨率,%u如下所示:%Y-%m-%d_%H-%M-%S.%%03u获取添加到录制视频的时间戳示例2017-05-28_12-26-33.599。有人能帮我使用这个修改后的库重新构建这个 Windows *.exe 吗?

任何帮助都将不胜感激!

答案1

来自drawtext 文档

localtime
过滤器运行的时间,以本地时区表示。它可以接受一个参数:strftime() 格式字符串。

但是 strftime 没有显示毫秒的功能。请参阅man strftime

您使用的%s是“自纪元 1970-01-01 00:00:00 +0000 (UTC) 以来的秒数”。这不是您想要的。我不确定您在哪里找到的%f,但它对 strftime 无效。

相关内容