¿Cómo mostrar el borde de color rojo en el borde del video cortado en círculo en ffmpeg?

¿Cómo mostrar el borde de color rojo en el borde del video cortado en círculo en ffmpeg?

Corto el video en forma de círculo y lo superpongo en la imagen, todo funciona bien, pero cómo mostrar el borde rojo en el borde del video circular.

ffmpeg -loop 1 -i pic1.jpg -i semple.mp4 -filter_complex \
"[1]trim=end_frame=1,geq='st(3,pow(X-(W/2),2)+pow(Y-(H/2),2));if(lte(ld(3),pow(min(W/2,H/2),2)),255,0)':128:128,loop=-1:1,setpts=N/FRAME_RATE/TB[mask];[1][mask]alphamerge[cutout];[cutout]scale=400:400[cir];[0][cir]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2:shortest=1[out]" -map [out] -map 1:a -preset ultrafast -filter_complex_threads 1 -c:a copy -y output.mp4

por favor que alguien ayude.

Respuesta1

Después de fusionar la máscara de corte, use geq para dibujar un borde rojo de 10 píxeles.

Usar

ffmpeg -loop 1 -i pic1.jpg -i semple.mp4 -filter_complex \ "[1]trim=end_frame=1,geq='st(3,pow(X-(W/2),2)+pow(Y-(H/2),2));if(lte(ld(3),pow(min(W/2,H/2),2)),255,0)':128:128,loop=-1:1,setpts=N/FRAME_RATE/TB[mask];[1][mask]alphamerge,format=yuva444p,geq='st(3,sqrt(pow(X-(SW*W/2),2)+pow(Y-(SH*H/2),2)));if(between(min(SW*W/2,SH*H/2)-ld(3),0,10),67,p(X,Y))':'st(3,sqrt(pow(X-(SW*W/2),2)+pow(Y-(SH*H/2),2)));if(between(min(SW*W/2,SH*H/2)-ld(3),0,10),90,p(X,Y))':'st(3,sqrt(pow(X-(SW*W/2),2)+pow(Y-(SH*H/2),2)));if(between(min(SW*W/2,SH*H/2)-ld(3),0,10),240,p(X,Y))':a='st(3,sqrt(pow(X-(SW*W/2),2)+pow(Y-(SH*H/2),2)));if(between(min(SW*W/2,SH*H/2)-ld(3),0,10),128,p(X,Y))',scale=400:400[cir];[0][cir]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2:shortest=1[out]" -map [out] -map 1:a -preset ultrafast -filter_complex_threads 1 -c:a copy -y output.mp4

información relacionada