gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:51:40 26 4
gpt4 key购买 nike

我在组合过滤器时遇到问题。我正在尝试从相机拍摄视频,在其上应用计时器并在中心覆盖一个框。我可以使用 -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

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

Input #0, video4linux2,v4l2, from '/dev/video0':

Duration: N/A, start: 10651.720690, bitrate: N/A

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

Cannot find a matching stream for unlabeled input pad 0 on filter 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: \
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

但是我的构建没有符合它的覆盖过滤器。在这一点上,我决定停下来问问我是否让这比应该的更难。最终结果是我只想要一个计时器和一个在视频上绘制的框。是否有更好的方法或格式化技巧来执行此操作?

谢谢

最佳答案

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

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 - 如何使用 FFMPEG 应用 2 个过滤器 drawtext 和 drawbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45000183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com