我需要在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
谢谢
在这种特定情况下,由于线位于 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 = Y或X = -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)。然后叠加。
| 归档时间: |
|
| 查看次数: |
3195 次 |
| 最近记录: |