ffmpeg从点到点画一条线

use*_*677 1 video ffmpeg

我需要在ffmpeg中从点到点画一条线。我drawline在 ffmpeg 中没有看到过滤器,所以我认为drawbox需要使用(见下面的命令)。我怎么能适应它来绘制一条对角线,比如说,10,10500,500

我已经使用勾股定理来计算线需要有多“宽”,但这是我得到的:

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

谢谢

Gya*_*yan 5

在这种特定情况下,由于线位于 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
Run Code Online (Sandbox Code Playgroud)

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

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

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


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