Comment faire cela en utilisant FFmpeg?
Exemple sans FFmpeg:
Adobe After Effects
Sony Vegas Pro
J'ai résolu!
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
Entrée: https://www.youtube.com/watch?v=17uHCHfgs60
Résultat: http://www.youtube.com/watch?v=CgZsDLfzrTs
Vous pouvez essayer de superposer la vidéo sur une image floue comme ceci.
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
L'image d'entrée sera bouclée pendant la durée de la vidéo de sortie par -loop 1
. Et -t 10
limitera la durée de la sortie vidéo à 10 secondes. Dans cet exemple, j'ai utilisé 1280: 720 comme résolution vidéo de sortie et mis à l'échelle les entrées pour correspondre à ce rapport. 0:v
fait référence à la vidéo d'entrée et sera mise à l'échelle jusqu'à une hauteur de 720 où la largeur sera ajustée en conséquence.
Ici, j'ai utilisé boxblur
filter où il y en a plusieurs autres comme sab
, smartblur
et unsharp
. map
obtiendra les flux d'entrée traités spécifiés et les mappera en conséquence sur le flux de sortie.
J'espère que ceci vous aidera!
Je ne pouvais obtenir aucune des solutions précédentes fournies pour utiliser ffmpeg 3.4.2 sous Windows.
Cependant cela a fonctionné:
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>
N'oubliez pas de remplacer <input_file>
et <output_file>
par les noms de fichiers appropriés.
La réponse acceptée ici prend une éternité à exécuter car elle nécessite beaucoup de calculs inutiles. Nous n'avons pas besoin de flouter les pixels, car nous savons assurément que la vidéo en sortie ne sera pas visible.
Une meilleure solution serait donc d’abord de rogner la partie de la vidéo qui sera visible dans la sortie. Nous redimensionnons ensuite cette partie pour "remplir" la fenêtre. Enfin, nous superposons la vidéo originale.
Below example assumes that input video has greater
aspect ratio than output video.
┌─────────────┐
┌─────────────┐ │ │
│ Input video │ │ Output │
│ │ │ video │
└─────────────┘ │ │
│ │
└─────────────┘
Nous allons utiliser filtre graphique pour y parvenir. Notre filtre sera comme ci-dessous en notation par points:
[original]
input --> split -------------------------------> overlay --> output
│ ^
│[copy] [blurred]│
└──────> crop ──> scale ──> gblur ─────────┘
En supposant que la résolution de l'entrée vidéo soit de 1280 x 720, la commande se présente comme suit:
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