Neste caso específico, como a linha está em 45%, podemos usar o método abaixo.
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
Os filtros GEQ permitem manipular pixels individuais usando expressões. Se uma linha estiver em 45 graus, isso significa que todos os pontos estão na linha X = Y
ou X = -Y
. O último caso é irrelevante aqui.
Então, primeiro uma tela em branco é criada. Seu tamanho é a cobertura necessária para desenhar a linha inteira (W = 500-10; H = 500-10). Em seguida, o GEQ define todos os pixels com X = Y
como opacos, mas todos os outros como transparentes. (A expressão lum é necessária devido a um capricho do design do filtro; tudo o que ele faz é reter o valor existente dos três planos - luma e dois croma).
Então esta saída é sobreposta com um deslocamento de (10,10). O mais curto é necessário porque a entrada de cor / geq nunca termina.
Para o caso geral de uma linha em um grau arbitrário, desenhe uma linha reta, ou seja, mantenha alfa de 255 para uma única linha, ou seja, 'if(eq(Y,100),255,0)'
e use o filtro giratório para obtê-lo no ângulo correto. (O preenchimento rotacionado deve ser fillcolor=anycolor@0
). Em seguida, sobreponha isso.