我想使用 FFMPEG将计算机的本地时间(以毫秒为单位)嵌入到流中。
我可以使用 drawtext 以秒为单位嵌入本地时间,如下所示:
ffmpeg -i <input> -vf "drawtext=text='%{localtime\:%T}'" -f flv <output>
Run Code Online (Sandbox Code Playgroud)
查看 drawtext 的文档,做一些测试,并在谷歌上搜索,似乎localtime并且gmtime不提供毫秒 - 只是几秒钟。但是pts选项确实有毫秒:
ffmpeg -i <input> -vf "drawtext=text='%{pts\:hms}'" -f flv <output>
Run Code Online (Sandbox Code Playgroud)
我还发现它pts支持偏移量,所以我能够使用这样的东西来显示本地时间(有点):
ffmpeg -i <input> -vf "drawtext=text='%{pts\:hms\:$(date +%s.%N)}'" -f flv <output>
Run Code Online (Sandbox Code Playgroud)
这有两个问题:
17499:17:29的时间......我找到了一种(相当复杂的)方法来解决这个问题有没有办法修改我的解决方案,或者一个完全独立的解决方案,可以将服务器本地时间(以毫秒为单位)嵌入到流中?
用
ffmpeg -i input
-vf "settb=AVTB,
setpts='trunc(PTS/1K)*1K+st(1,trunc(RTCTIME/1K))-1K*trunc(ld(1)/1K)',
drawtext=text='%{localtime}.%{eif\:1M*t-1K*trunc(t*1K)\:d}'"
-f flv out
Run Code Online (Sandbox Code Playgroud)
首先,通过将时基强制为默认 AVTB,传入时间戳表示为微秒精度10e-6。
其次,设置一个新的 PTS,它包括减少到毫秒的原始 PTS 和左移(十进制)三位数字。为此,添加了挂钟的毫秒组件。RTCTIME 在 setpts 中可用,并返回一个微秒精度的整数。
第三,文本字符串由三部分组成。第一个是本地时间,它被格式化为 YMDHMS 字符串并返回第二个精度。然后用一个点来划分毫秒。在第三个中,t返回小数秒。毫秒分量被提取并打印为整数。
| 归档时间: |
|
| 查看次数: |
7725 次 |
| 最近记录: |