2017-07-09 68 views
0

我有组合滤波器问题的DrawText和drawbox 2个过滤器。我试图把视频从摄像机,它采用一个计时器,并在该中心覆盖一个盒子。我可以把时间码(本地时间和PTS)使用的DrawText室颤命令没有问题:如何申请使用FFMPEG

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: \ 
[email protected]: 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:[email protected]": \ 
-vcodec libx264 -preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4 

我认为我可以与filter_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: [email protected];drawbox=x=iw/2:y=0:w=10:h=ih:[email protected]": -vcodec libx264 -preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4 

分号隔开他们,但它未能找到第二滤波器的输入流:

输入#0,video4linux2,用v412,从 '的/ dev/video0的':

时间:N/A,启动:10651.720690,比特率:N/A

流#0:0:视频:MJPEG,yuvj422p(PC,bt470bg /未知/未知),1280×720,-5 kb/s的,每秒30帧,30 TBR,1000K TBN,1000K TBC

无法找到在过滤器上的未标记的输入垫0的匹配流Parsed_drawbox_1

我试图像这样将它指向[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: \ 
[email protected];[0] drawbox=x=iw/2:y=0:w=10:h=ih:[email protected]": \ 
-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: [email protected] [tmp];\ 
[main] drawbox=x=iw/2:y=0:w=10:h=ih:[email protected] [tmp2]; [tmp][tmp2] overlay": \ 
-vcodec libx264 -preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4 

但我的体型没有与它符合的覆盖过滤器。此时,我决定停下来,问我是否比应该做得更难。最终的结果是我只想在视频上画一个计时器和一个盒子。有没有更好的方法或格式化技巧来做到这一点?

谢谢

回答

1

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

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: \ 
[email protected], drawbox=x=iw/2:y=0:w=10:h=ih:[email protected]": \ 
-vcodec libx264 -preset ultrafast -f mp4 -pix_fmt yuv420p -y output.mp4 
+0

谢谢你的工作,但我的印象是分号应该这样做,而不是逗号。 – user6972

+0

查看https://ffmpeg.org/ffmpeg-filters.html#Filtering-Introduction – Mulvya

+0

我做过。这就是它指出使用分号使用多个过滤器的地方。 – user6972