发布于 2015-06-14 10:18:12
我解决了!
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
发布于 2019-11-05 03:51:56
我为任何类型的视频做了一个通用的解决方案。适用于垂直和水平视频。它调整视频大小为1080 p(您可以使用它和720 p),并且用模糊的视频填充所有的空白空间。
ffmpeg -i input.mp4 -lavfi "[0:v]scale=1920*2:1080*2,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[0:v]scale=-1:1080[ov];[bg][ov]overlay=(W-w)/2:(H-h)/2,crop=w=1920:h=1080" output.mp4
结果1:
Result2:
发布于 2019-02-10 08:48:10
这里接受的答案要花费很长时间才能执行,因为它正在做许多不必要的计算。我们不需要模糊的像素,我们肯定知道,这将失去视野输出视频。
因此,一个更好的解决方案是首先裁剪视频中可以在输出中看到的部分。然后,我们缩放这个部分,以“填充”视图。最后,我们将原始视频叠加在上面。
Below example assumes that input video has greater
aspect ratio than output video.
┌─────────────┐
┌─────────────┐ │ │
│ Input video │ │ Output │
│ │ │ video │
└─────────────┘ │ │
│ │
└─────────────┘
我们将使用滤波图来实现这一目标。我们的过滤器将喜欢下面的点符号:
[original]
input --> split -------------------------------> overlay --> output
│ ^
│[copy] [blurred]│
└──────> crop ──> scale ──> gblur ─────────┘
假设输入视频的分辨率为1280x720,则命令如下所示:
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
https://stackoverflow.com/questions/30789367
复制