如何使用FFMPEG

时间:2017-07-09 19:26:16

标签: ffmpeg

我在组合过滤器方面遇到了问题。我正在尝试从相机拍摄视频,在其上应用计时器,并在中心覆盖一个盒子。我可以使用-vf drawtext命令设置时间码(本地时间和点)没有问题:

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_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

但它无法在第二个过滤器上找到输入流:

  

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

     

持续时间:N / A,开始:10651.720690,比特率:N / A

     

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

     

在过滤器Parsed_drawbox_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 " \
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

但是我的版本没有符合它的叠加过滤器。在这一点上,我决定停下来问我是否要比现在更努力。最终的结果是我只想要一个计时器和一个在视频上绘制的方框。有没有更好的方法或格式化技巧来做到这一点?

由于

1 个答案:

答案 0 :(得分:3)

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

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