如何用ffmpeg在视频上绘制n个矩形

时间:2017-10-29 10:27:54

标签: loops ffmpeg draw

我正在尝试创建一个用于测试framrate html5播放器的视频 此视频需要包含前10帧每帧的矩形 我需要它是动态的。

现在我有以下命令:

ffmpeg -loop 1 -i black.png -c:v libx264 -t 15 -r 30 -vcodec h264 -pix_fmt yuv420p \
       -vf "[in]drawtext=fontfile=/usr/share/fonts/open-sans/OpenSans-Regular.ttf : text=%{n}:x=(w-tw): y=h-(lh): fontcolor=white: box=1: boxcolor=0x00000099, \
            drawbox=x='mod(t\,10)*32':w=16:h=16:color=white@1[out]" \
       -y out123.mp4

再次尝试为图像中的每个帧绘制一个矩形,如下所示: X = 16 * 0,X = 16 * 1,X = 16 * 2 ...

这里唯一的捣蛋是x param,它不动 任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

drawbox中的表达式不能指时间。改为覆盖方框:

ffmpeg -loop 1 -i black.png -filter_complex \
   "drawtext=fontfile=/usr/share/fonts/open-sans/OpenSans-Regular.ttf:text=%{n}:x=(w-tw):y=h-(lh):fontcolor=white:box=1:boxcolor=0x00000099[txt]; \
    color=white:s=16x16:r=30:d=0.35[box]; \
    [txt]box]overlay=x='16*n':y=0:enable='lt(n,10)'" \
  -c:v libx264 -t 15 -r 30 -vcodec h264 -pix_fmt yuv420p -y out123.mp4

这将覆盖x = 0,16,32,48 ..的框,前10帧然后消失。

请注意,输入图像被解释为25 fps,因此通过设置-r 30,每5个输入帧将复制一帧。在-framerate 30之前添加-i black.png并删除-r 30以避免这种情况。