Wie wird in ffmpeg ein roter Farbrand am Rand eines kreisförmigen Videoausschnitts angezeigt?

Wie wird in ffmpeg ein roter Farbrand am Rand eines kreisförmigen Videoausschnitts angezeigt?

Ich schneide das Video kreisförmig und lege es auf das Bild. Alles funktioniert gut, aber wie zeigt man einen roten Rand am Rand des Kreisvideos an?

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

bitte kann mir jemand helfen.

Antwort1

Nachdem die Cout-Out-Maske zusammengeführt wurde, verwenden Sie geq, um einen roten Rand von 10 Pixeln zu zeichnen.

Verwenden

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

verwandte Informationen