And*_*rey 38

我解决了!

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
Run Code Online (Sandbox Code Playgroud)

输入:https
://www.youtube.com/watch ?v = 17uHCHfgs60输出:http://www.youtube.com/watch?v = CgZsDLfzrTs

  • 您必须启用 GPL 才能使用“boxblur”过滤器。[此](/sf/ask/2155255721/#comment97756806_54618683)解决方案是60%速度更快,并且不包含在 GPL 许可证中。 (3认同)

Leo*_*lov 9

我对任何类型的视频都做出了普遍的决定。适用于垂直和水平视频。它正在将视频大小调整为 1080p(您可以使用它和 720p)并用模糊的视频填充所有空白空间。

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
Run Code Online (Sandbox Code Playgroud)

结果 1

结果 2

  • 将我的垂直视频转换为 16:9 根本不起作用。结果为 1920x1080,但垂直拉伸。 (2认同)

Ric*_*ard 7

我无法在 Windows 上使用 ffmpeg 3.4.2 获得以前提供的任何解决方案。

但是这确实有效:

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>
Run Code Online (Sandbox Code Playgroud)

不要忘记用适当的文件名替换<input_file><output_file>


Abh*_*han 5

此处接受的答案需要永久执行,因为它正在执行大量不必要的计算。我们不需要模糊我们明确知道将在输出视频的视口之外的像素。

因此,更好的解决方案是首先裁剪视频中在输出中可见的部分。然后,我们缩放此部分以“填充”视口。最后,我们将原始视频叠加在其顶部。

Below example assumes that input video has greater
aspect ratio than output video.
                    ???????????????
???????????????     ?             ?
? Input video ?     ?   Output    ?
?             ?     ?   video     ?
???????????????     ?             ?
                    ?             ?
                    ???????????????
Run Code Online (Sandbox Code Playgroud)

我们将使用过滤器图实现此目的。我们的过滤器将在下面用点符号表示:

                [original]
 input --> split -------------------------------> overlay --> output
        ?                                          ^
        ?[copy]                           [blurred]?
        ???????> crop ??> scale ??> gblur ??????????
Run Code Online (Sandbox Code Playgroud)

假设输入视频的分辨率为1280 x 720,该命令如下所示:

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
Run Code Online (Sandbox Code Playgroud)

  • 你好!在我的情况下,您的解决方案快了 80%……但输出没有 16:9 的分辨率。我设法更改了裁剪和缩放属性以满足分辨率要求`ffmpeg -i input.mp4 -vf 'split[original][copy];[copy]scale=ih*16/9:-1,crop=h= iw*9/16,gblur=sigma=20[blurred];[blurred][original]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2' output.mp4` 有了这个变化,它是 60%比接受的答案更快。 (3认同)
  • 不,我的输入是垂直视频,我想要 1280x720 或 16:9 输出视频。我认为这就是所问的。 (2认同)