FFmpeg:如何将带有黑色边的垂直视频转换为背景模糊的视频 16:9

FFmpeg: How to convert vertical video with black sides, to video 16:9, with blurred background sides

如何使用 FFmpeg 制作这个?

没有 FFmpeg 的例子:
Adobe After Effects
Sony Vegas Pro

您可以尝试将视频叠加在像这样的模糊图像上。

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

输入图像将在输出视频的持续时间内循环 -loop 1-t 10 会将输出视频持续时间限制为 10 秒。在此示例中,我使用 1280:720 作为输出视频分辨率并缩放输入以匹配此比率。 0:v 参考输入视频,它会被缩放到 720 的高度,宽度也会相应地调整。

这里我使用了 boxblur 过滤器,其中还有其他几个过滤器,如 sabsmartblurunsharpmap 将获取指定的已处理输入流并相应地将其映射到输出流。

希望对您有所帮助!

我解决了!

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

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

我无法在 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>

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

这里接受的答案需要永远执行,因为它做了太多不必要的计算。我们不需要模糊输出视频中肯定会超出视口的像素。

因此,更好的解决方案是首先裁剪输出中可见的视频部分。然后我们将这部分缩放到 "fill" 视口。最后,我们将原始视频叠加在上面。

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

我们将使用filter graph来实现这一点。我们的过滤器将像下面的点符号一样:

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

假设输入视频的分辨率为 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

我为任何类型的视频做了一个通用的解决方案。适用于垂直和水平视频。它正在将视频大小调整为 1080p(您可以使用它和 720p)并用模糊视频填充所有空白 space。

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

结果一:

结果2: