我正在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'
)使用此注释可以正常工作。在s 前面
添加1-4 s 表明错误或效果没有变化。\
%
我的ffmpeg
版本:ffmpeg version 3.2.12-1~deb9u1
在 debian 机器上。
它已与 drawtext 库一起编译,并且存在于ffmpeg -filters
.
好的,我在FFmpeg 过滤器文档中找到了解决方案。
虽然它说
This feature is deprecated.
,这对我来说很好。这是我的决赛-vf
:请注意,无论如何,这四个
\\\\
是必须逃脱的:
。为了逃离空间,一个\
就足够了。结果将如下所示:第一个选项,
text='%{localtime\\:T}'
工作正常。OP 在错误的地方引用了他的引语,他有'text=...'
. 您会注意到,在随后的示例中,他在正确的位置使用了单引号。