我想从 ffmpeg 生成一个直播播放,该播放会叠加时间码,但会应用特定时区(或简单的基于小时的偏移)。我发现使用 gmtime 和 localtime 过滤器可以成功生成时间码叠加,但是,我无法通过以下方式破解偏移该时间所需的上下文:n小时数。以下是我迄今为止能够实现的一个快速而粗略的示例:
ffmpeg -re -loop 1 -i image.png -vf drawtext="fontsize=96: box=1: [email protected]: boxborderw=5: fontcolor=white: x=(w-text_w)/2: y=(h-text_h)/2: text='%{localtime\:%H\\\\\:%M\\\\\:%S}'" -r 10 -c:v libx264 -preset ultrafast -an -f mpegts udp://239.0.0.1:50000
ffmpeg -re -loop 1 -i image.png -vf drawtext="fontsize=96: box=1: [email protected]: boxborderw=5: fontcolor=white: x=(w-text_w)/2: y=(h-text_h)/2: text='%{gmtime\:%H\\\\\:%M\\\\\:%S}'" -r 10 -c:v libx264 -preset ultrafast -an -f mpegts udp://239.0.0.1:50000
这里的问题是,我需要将叠加的时间设置为特定时区(PST)或与我的服务器所在时区偏移 3 小时的时间。
如有任何建议,我们将不胜感激。
答案1
感谢您的建议!虽然我承认我希望找到一个稍微不那么复杂的解决方案(与使用我以前的方法自动偏移一两个小时相比,手动定义开始时间只是一个很小的负担),但使用 Gyan 的提示配合 PTS 和定义的 UTC 时间戳可以让我到达我需要去的地方:
ffmpeg -re -loop 1 -i image.png -vf drawtext="fontsize=96: box=1: [email protected]: boxborderw=5: fontcolor=white: x=(w-text_w)/2: y=(h-text_h)/2: text='%{pts\:gmtime\:1575561900}'" -r 10 -c:v libx264 -preset ultrafast -an -f mpegts udp://239.0.0.1:50000
对于那些可能希望将其用作未来参考的人来说,上面的代码将打印一个从“2019-12-05 04:05:00”(本文的日期和大概时间)开始的叠加时间代码。为了快速找到准确偏移所需的纪元时间,我使用了这地点。