it-swarm.com.de

FFmpeg: Konvertieren von vertikalen Videos mit schwarzen Seiten in 16: 9-Video mit unscharfen Hintergrundseiten

Vertical video with blurred background sides

Wie mache ich das mit FFmpeg?  

Beispiel ohne FFmpeg:
Adobe After Effects
Sony Vegas Pro

17
Andrey

I löste!

ffmpeg -i input.mp4 -lavfi '[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16' -vb 800K output.webm

Eingabe: https://www.youtube.com/watch?v=17uHCHfgs60
Ausgabe: http://www.youtube.com/watch?v=CgZsDLfzrTs

31
Andrey

Sie können versuchen, das Video einem Unschärfebild wie diesem zu überlagern.

ffmpeg -i input_video -loop 1 -i input_image -t 10 -filter_complex "
[0:v]scale=-1:720[scaled_video];
[1:v]scale=1280:720,boxblur=50[blur_image];
[blur_image][scaled_video]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[outv]" -c:v libx264 -aspect 1280/720 -map [outv] -map 0:a -c:a copy output_video

Das Eingabebild wird mit -loop 1 durch die Dauer des Ausgabevideos geleitet. Und -t 10 begrenzt die Videoausgabedauer auf 10 Sekunden. In diesem Beispiel habe ich 1280: 720 als Videoausgabeauflösung verwendet und die Eingänge entsprechend diesem Verhältnis skaliert. 0:v bezieht sich auf das Eingangsvideo und wird auf eine Höhe von 720 skaliert, wobei die Breite entsprechend angepasst wird.

Hier habe ich boxblur filter verwendet, wobei es mehrere andere wie sab, smartblur und unsharp gibt. map ruft die angegebenen verarbeiteten Eingabeströme ab und ordnet sie dem Ausgabestrom entsprechend zu.

Hoffe das wird dir helfen!

2
Chamath

Ich konnte keine der bisherigen Lösungen mit ffmpeg 3.4.2 unter Windows verwenden.

Dies hat jedoch funktioniert:

ffmpeg -i <input_file> -filter_complex "[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16" <output_file>

Vergessen Sie nicht, <input_file> und <output_file> durch die entsprechenden Dateinamen zu ersetzen.

1
Richard

Die akzeptierte Antwort hier dauert ewig, da sie so viele unnötige Berechnungen durchführt. Wir müssen die Pixel nicht verwischen, von denen wir definitiv wissen, dass sie sich nicht im Ansichtsfenster des Ausgabevideos befinden.

Eine bessere Lösung wäre es, zuerst den Teil des Videos zu beschneiden, der in der Ausgabe sichtbar ist. Wir skalieren diesen Teil dann, um das Ansichtsfenster zu "füllen". Zum Schluss legen wir das Originalvideo darüber.

Below example assumes that input video has greater
aspect ratio than output video.
                    ┌─────────────┐
┌─────────────┐     │             │
│ Input video │     │   Output    │
│             │     │   video     │
└─────────────┘     │             │
                    │             │
                    └─────────────┘

Um dies zu erreichen, verwenden wir filter graph . Unser Filter wird unten in Punktnotation gefallen:

                [original]
 input --> split -------------------------------> overlay --> output
        │                                          ^
        │[copy]                           [blurred]│
        └──────> crop ──> scale ──> gblur ─────────┘

Angenommen, die Auflösung für das Eingangsvideo ist 1280 x 720, sieht der Befehl wie folgt aus:

ffmpeg -i input.mp4 -vf 'split [original][copy]; [copy] crop=ih*9/16:ih:iw/2-ow/2:0, scale=1280:2282, gblur=sigma=20[blurred]; [blurred][original]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2' output.mp4
1
Abhinav Chauhan