ffmpeg 从点到点画一条线

ffmpeg 从点到点画一条线

我需要在 ffmpeg 中从点到点画一条线。我drawline在 ffmpeg 中没有看到过滤器,所以我假设drawbox需要使用(参见下面的命令)。我该如何调整它来绘制一条从10,10到 的对角线500,500

我使用勾股定理来计算这条线需要多宽,但这就是我所能得到的:

ffmpeg -i input.mp4 -vf drawbox=x=10:y=10:w=692:h=1:color=red output.mp4

谢谢

答案1

在这种特定情况下,由于该线位于 45%,我们可以使用下面给出的方法。

ffmpeg -i in.mp4 -filter_complex 
      "color=red:s=490x490,geq=lum='p(X,Y))':a='if(eq(X,Y),255,0)'[c];
       [0][c]overlay=10:10:shortest=1"
out.mp4

GEQ 滤波器允许使用表达式来操纵单个像素。如果一条线是 45 度,则意味着所有点都在该线上X = YX = -Y。后一种情况在这里无关紧要。

因此,首先创建一个空白画布。其大小是绘制整条线所需的覆盖范围(W = 500-10;H = 500-10)。然后 GEQ 将所有像素设置为X = Y不透明,但将所有其他像素设置为透明。(由于过滤器设计的一个怪癖,lum 表达式是必需的;它所做的只是保留三个平面的现有值 - 亮度和两个色度)。

然后这个输出与偏移量 (10,10) 重叠。需要最短的偏移量,因为 color/geq 输入永远不会终止。


对于任意角度的线的一般情况,您可以绘制一条直线(即,保持单行的 alpha 为 255)'if(eq(Y,100),255,0)',然后使用旋转过滤器将其调整到正确的角度。(旋转填充应为fillcolor=anycolor@0)。然后叠加。

相关内容