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

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

video - FFmpeg:如何将带有黑色边的垂直视频转换为16:9的视频,背景模糊,Vertical video with blurred background sides,第2张

如何使用FFmpeg进行此操作?

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

最佳答案:

5 个答案:

答案 0 :(得分:34)

我解决了!

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

答案 1 :(得分:3)

这里接受的答案需要永久执行,因为它正在执行大量不必要的计算。我们不需要模糊我们肯定知道会在输出视频的视口之外的像素。

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

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

答案 2 :(得分:2)

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

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将获取指定的已处理输入流并相应地映射到输出流。

希望这会对你有帮助!

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我对任何类型的视频都做出了通用决定。适用于垂直和水平视频。它将视频的大小调整为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

Result 1

Result 2

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
U19学习网站 » video - FFmpeg:如何将带有黑色边的垂直视频转换为16:9的视频,背景模糊