如何使用FFMPEG应用2个过滤器drawtext和drawbox

如何使用FFMPEG应用2个过滤器drawtext和drawbox,ffmpeg,Ffmpeg,我在组合过滤器时遇到问题。我试着从相机上拍摄视频,在上面加一个定时器,同时在中间加一个盒子。我可以使用-vf drawtext命令输入时间代码(本地时间和pts),没有问题: ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 \ -vf "drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: \ text='%{lo

我在组合过滤器时遇到问题。我试着从相机上拍摄视频,在上面加一个定时器,同时在中间加一个盒子。我可以使用-vf drawtext命令输入时间代码(本地时间和pts),没有问题:

ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 \
-vf "drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: \
text='%{localtime} %{pts\:hms}':  fontcolor=white: fontsize=24: box=1: \
boxcolor=black@0.8: boxborderw=5: x=0: y=0" -vcodec libx264 \
-preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4
然后我用drawbox绘制了一个小盒子:

ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 \
-filter_complex " drawbox=x=iw/2:y=0:w=10:h=ih:color=red@0.1": \
-vcodec libx264 -preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4
我假设我可以将它们与filter\u complex开关结合起来,并使用分号将它们分开,如下所示

ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 -filter_complex "drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='%{localtime} %{pts\:hms}':  fontcolor=white: fontsize=24: box=1: boxcolor=black@0.8;drawbox=x=iw/2:y=0:w=10:h=ih:color=red@0.1": -vcodec libx264 -preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4
ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 -filter_complex " \
split [main][tmp];\
[main] drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: \
text='%{localtime} %{pts\:hms}':  fontcolor=white: fontsize=24: box=1: boxcolor=black@0.8 [tmp];\
[main] drawbox=x=iw/2:y=0:w=10:h=ih:color=red@0.1 [tmp2]; [tmp][tmp2] overlay": \
-vcodec libx264 -preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4
但在第二个过滤器上找不到输入流:

输入#0,video4linux2,v4l2,来自“/dev/video0”:

持续时间:不适用,起始时间:10651.720690,比特率:不适用

流#0:0:视频:mjpeg,yuvj422p(pc,bt470bg/未知/未知),1280x720,-5 kb/s,30 fps,30 tbr,1000k tbn,1000k tbc

在已分析的筛选器\u绘图框\u 1上找不到未标记的输入键盘0的匹配流

我尝试将其定向到[0],如下所示:

ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 -filter_complex " \
drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: \
text='%{localtime} %{pts\:hms}':  fontcolor=white: fontsize=24: box=1: \
boxcolor=black@0.8;[0] drawbox=x=iw/2:y=0:w=10:h=ih:color=red@0.1": \
-vcodec libx264 -preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4
但是它没有把盒子放在输出上

所以我试着像这样分割溪流

ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 -filter_complex "drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='%{localtime} %{pts\:hms}':  fontcolor=white: fontsize=24: box=1: boxcolor=black@0.8;drawbox=x=iw/2:y=0:w=10:h=ih:color=red@0.1": -vcodec libx264 -preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4
ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 -filter_complex " \
split [main][tmp];\
[main] drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: \
text='%{localtime} %{pts\:hms}':  fontcolor=white: fontsize=24: box=1: boxcolor=black@0.8 [tmp];\
[main] drawbox=x=iw/2:y=0:w=10:h=ih:color=red@0.1 [tmp2]; [tmp][tmp2] overlay": \
-vcodec libx264 -preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4
但是我的构建没有符合它的覆盖过滤器。在这一点上,我决定停下来问问,我是否让事情变得更难了。最终的结果是我只想要一个计时器和一个在视频上画的盒子。有没有更好的方法或格式技巧来做到这一点


谢谢

您可以通过逗号分隔一个接一个地应用它们

ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 -filter_complex " \
drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: \
text='%{localtime} %{pts\:hms}':  fontcolor=white: fontsize=24: box=1: \
boxcolor=black@0.8, drawbox=x=iw/2:y=0:w=10:h=ih:color=red@0.1": \
-vcodec libx264 -preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4

您可以通过逗号分隔一个接一个地应用它们

ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 -filter_complex " \
drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: \
text='%{localtime} %{pts\:hms}':  fontcolor=white: fontsize=24: box=1: \
boxcolor=black@0.8, drawbox=x=iw/2:y=0:w=10:h=ih:color=red@0.1": \
-vcodec libx264 -preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4

谢谢,这很有效,但我的印象是分号应该起作用,而不是逗号。我做到了。这就是它指出使用分号的多个过滤器的地方。它说,“相同线性链中的过滤器用逗号分隔,不同的线性链过滤器用分号分隔。”。drawtext和drawbox不是在不同的链中。谢谢,这很有效,但我觉得分号应该起作用,而不是逗号。我做到了。这就是它指出使用分号的多个过滤器的地方。它说,“相同线性链中的过滤器用逗号分隔,不同的线性链过滤器用分号分隔。”。drawtext和drawbox不在不同的链中。