В этом конкретном случае, поскольку линия составляет 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 = Y
или X = -Y
. Последний случай здесь не имеет значения.
Итак, сначала создается пустой холст. Его размер - это охват, необходимый для рисования всей линии (W = 500-10; H = 500-10). Затем GEQ устанавливает все пиксели с X = Y
непрозрачными, а все остальные - прозрачными. (Выражение lum необходимо из-за причуды дизайна фильтра; все, что он делает, это сохраняет существующее значение трех плоскостей - luma & two chroma).
Затем на этот выход накладывается смещение (10,10). Самый короткий нужен, потому что ввод color/geq никогда не заканчивается.
Для общего случая линии произвольной степени вы должны нарисовать прямую линию, т.е. оставить альфа 255 для одной строки, то есть 'if(eq(Y,100),255,0)'
, а затем использовать фильтр поворота для получить правильный угол. ( Заполнение поворота должно быть fillcolor=anycolor@0
). Затем наложите это.