我正在使用ffmpeg
和tee
来mplayer
通过 SSH 进行简单的视频直播和录像。现在,我想将当前(服务器)时间嵌入到流中。格式并不重要,理想情况下是YYYY-MM-DD HH:MM:SS
.
我找到了这如何建议以下命令:
ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 \
-vf "drawtext=fontfile=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf: \
text='%{localtime\:%T}': [email protected]: x=7: y=700" -vcodec libx264 \
-preset veryfast -f mp4 -pix_fmt yuv420p -y output.mp4
但使用-vf
这部分会导致我出现以下错误:
[NULL @ 0x55e4ef96b2a0] Unable to find a suitable output format for 'text=%{localtime:%T}:'
text=%{localtime:%T}:: Invalid argument
我也尝试过这命令(Q中的第三个代码块),只是为了测试它,但它也失败了:
[Parsed_drawtext_0 @ 0x55fb2862a940] Both text and text file provided. Please provide only one
[AVFilterGraph @ 0x55fb28629fc0] Error initializing filter 'drawtext' with args 'text=%{pts:hms:1553359336.166336638}'
最后我还发现这问题,并尝试了它,稍微修改了一下(这显示了我的完整命令,我只调整了-vf
过去两个示例中的选项):
ffmpeg -r 20 -s 640x480 -f video4linux2 -i /dev/video0 -vf "drawtext=fontsize=90:fontcolor=white: fontfile=/usr/share/fonts/TTF/DejaVuSans.ttf: text='%{localtime\:%X}'" -f avi -
这给我带来了以下错误:
[NULL @ 0x55ae61d051a0] Unable to find a suitable output format for 'fontfile=/usr/share/fonts/TTF/DejaVuSans.ttf:'
fontfile=/usr/share/fonts/TTF/DejaVuSans.ttf:: Invalid argument
修改我发现的内容这里有点:
-vf drawtext="fontfile='/usr/share/fonts/cantarell/Cantarell-Light.otf':fontsize=14:fontcolor=white:shadowcolor=black:shadowx=2:shadowy=1:text='%H-%M-%S':x=8:y=8"
向我展示:
[Parsed_drawtext_0 @ 0x55e36db2aa40] Stray % near 'H-%M-%S'
请注意,使用此评论只是文本(例如text='test'
)工作正常..
添加1-4 \
s 前面的 s%
表示错误或效果没有变化。
我的ffmpeg
版本:ffmpeg version 3.2.12-1~deb9u1
在 Debian 机器上。
它已与drawtext 库一起编译并存在于ffmpeg -filters
.
答案1
好的,我已经在其中找到了解决方案FFmpeg 过滤器文档。
10.52.2 文本扩展
如果扩展设置为 strftime,则过滤器会识别提供的文本中的 strftime() 序列并相应地扩展它们。检查 strftime() 的文档。此功能已弃用。
虽然它说This feature is deprecated.
,但这对我来说效果很好。这是我的最终结果-vf
:
-vf drawtext="expansion=strftime:fontfile='/usr/share/fonts/cantarell/Cantarell-Light.otf':fontsize=14:fontcolor=white:shadowcolor=black:shadowx=2:shadowy=1:text='%Y-%m-%d\ %H\\\\:%M\\\\:%S':x=8:y=8"
请注意,无论如何,这四个人\\\\
都是逃跑所必需的:
。要逃离这个空间,一个\
就足够了。结果将如下所示:
答案2
第一个选项text='%{localtime\\:T}'
效果很好。 OP 的引言放错了地方,他…… 'text=...'
。您会注意到,在后续示例中,他在正确的位置添加了单引号。