So verwischen Sie Videos bedingt mit FFMPG

So verwischen Sie Videos bedingt mit FFMPG

Ich möchte das Video bedingt unscharf machen. Beispielsweise soll bei einem 30-Sekunden-Video der Unschärfebereich von 2–10 Sekunden anders sein als bei 12–20 Sekunden.

Aber ich kann es bisher nur 1 Mal verwischen. Im Folgenden finden Sie den Befehl, mit dem ich versucht habe, das Ziel zu erreichen. MitArithematische Ausdrücke

ffmpeg -y -i with_out_sound.mp4 filter_complex [0:v]boxblur=10:enable='between(t,2,10)'[bg],[0:v]crop=206:169:3 2:121[fg],[bg][fg]overlay=32:121:enable='between(t,2,10)'[tmp];[0:v]boxblur=10: enable='between(t,12,20)'[bg],[0:v]crop=206:169:42:100[fg],[bg][fg]overlay=42:100 :enable='between(t,12,20)'[tmp2];[tmp][tmp2]concat[tmp3] -map [tmp3] with_out_sou ndd.mp4

aber mit dem obigen Befehl zuerst das komplette Video verwischen (2-10) und dann das komplette Video noch einmal mit Verwischen (12-20) verketten, sodass ich ein 60-Sekunden-Video statt eines 30-Sekunden-Videos bekomme.

ffmpeg -y -i with_out_sound.mp4 -filter_complex [0:v]boxblur=10:enable='between(t,2,10)'[bg];[bg]crop=206:169:32:121[fg];[bg][fg]overlay=32:121:enable='between(t,2,10)'[tmp],[tmp]b oxblur=10:enable='between(t,12,20)'[tbg],[tmp]crop=206:169:42:100[tfg],[tbg][tfg]overlay=42:100:enable='between(t,12,20)'[tmp2] -map "[tmp2]" with_out_soundd.mp4

In diesem Fall erhalte ich jedoch die Fehlermeldung „Stream-Spezifizierer ‚tmp‘ in der Filtergraph-Beschreibung stimmt mit keinem Stream überein.“

Ich verwende die neueste Version von ffmpeg unter Windows.

Antwort1

Verwenden

ffmpeg -y -i with_out_sound.mp4 -filter_complex \
"[0:v]boxblur=10:enable='if(between(t,2,10)+between(t,12,20),1,0)'[bg];
 [0:v]crop=206:169:32:121[fg1];[0:v]crop=206:169:42:100[fg2];
 [bg][fg1]overlay=32:121:enable='between(t,2,10)'[tmp];
 [tmp][fg2]overlay=42:100:enable='between(t,12,20)'[tmp2]"
-map [tmp2] with_blur.mp4

Du kannsthinzufügenmehrere Bedingungen, um die Unschärfe in einer Filterausführung durchzuführen, und dann zwei Overlays verwenden. Die Verkettung wird vermieden. Wenn Sie die Verkettung verwenden möchten, sollten Sie die beiden Streams trimmen, aber das ist einfacher.

Die verwendete Bedingung ist die if(x,y,z), die ausgewertet wird xund zurückgibt y, wenn sie wahr ist, andernfalls z.

verwandte Informationen