我在组合过滤器时遇到问题。我正在尝试从相机拍摄视频,在其上应用计时器并在中心覆盖一个框。我可以使用 -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
Run Code Online (Sandbox Code Playgroud)
然后我有一个使用 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
Run Code Online (Sandbox Code Playgroud)
我假设我可以将它们与 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
Run Code Online (Sandbox Code Playgroud)
但它无法在第二个过滤器上找到输入流:
输入 #0, video4linux2,v4l2, from '/dev/video0':
持续时间:N/A,开始:10651.720690,比特率:N/A
流 #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
Run Code Online (Sandbox Code Playgroud)
但它无法将盒子放在输出上。
所以我试着像这样分割流
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
Run Code Online (Sandbox Code Playgroud)
但是我的构建没有符合它的覆盖过滤器。在这一点上,我决定停下来问问我是否让这件事变得比应该的更难。最终结果是我只想要一个计时器和一个在视频上绘制的框。有没有更好的方法或格式化技巧来做到这一点?
谢谢
您可以一个接一个地应用它们,用逗号分隔。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4442 次 |
| 最近记录: |