我希望使用FFMPEG将计算机的本地时间毫秒级嵌入到流中。
我可以使用drawtext将本地时间以秒为单位嵌入,如下所示:
我可以使用drawtext将本地时间以秒为单位嵌入,如下所示:
ffmpeg -i <input> -vf "drawtext=text='%{localtime\:%T}'" -f flv <output>
研究了一些文档、进行了一些测试,并在谷歌上搜索后,发现localtime
和gmtime
似乎没有提供毫秒级别的时间 -- 只有秒。但是pts
选项确实具有毫秒:
ffmpeg -i <input> -vf "drawtext=text='%{pts\:hms}'" -f flv <output>
我还发现pts
支持偏移量,因此我能够使用类似以下的代码来显示本地时间(有点):
ffmpeg -i <input> -vf "drawtext=text='%{pts\:hms\:$(date +%s.%N)}'" -f flv <output>
这个方法有两个问题:
- 在时间显示上,它会显示类似于
17499:17:29
的内容……我找到了(相当复杂的)解决方法。 - 它使用服务器当前时间在你第一次运行 ffmpeg 命令时作为偏移量——而不是 ffmpeg 实际开始解码视频时的服务器当前时间。我注意到 ffmpeg 大约需要启动 2 秒钟,导致时钟偏差大约为 2 秒。
有没有一种方法可以修改我的解决方案,或者有一个完全不同的解决方案,可以将服务器本地时间以毫秒为单位嵌入流中?
st
和ld
函数,以及eif
文本扩展用于 drawtext,因为我不知道这是如何工作的 :) 但它确实有效! - stevendesu*
.. 通过代码格式化进行修复:text='%{localtime}.%{eif\:1M*t-1K*trunc(t*1K)\:d\:3}'
- Stefan Krüger s-lightx
和y
来改变位置。drawtext=text='%{localtime}.%{eif\:1M*t-1K*trunc(t*1K)\:d}':x=100:y=100:fontsize=20
- undefined