You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MoviePy 2.1.1无法实现视频模糊背景效果的问题求助

MoviePy 2.1.1无法实现视频模糊背景效果的问题求助

刚学MoviePy碰到版本更新的坑太正常了,我来帮你把问题理清楚,然后给你正确的解决方案~

首先先拆解你的核心需求:把960x540的横版视频做成竖版输出,中间保留原比例的清晰视频,周围用原视频的模糊版填充整个屏幕。

你当前代码的几个核心问题

  1. 用错了模糊工具:HeadBlur完全不是用来做全屏模糊的!它的作用是跟踪视频中某个移动的点(比如人脸),只模糊那个特定区域,所以你用它来做全屏模糊肯定没效果,这是最关键的错误。
  2. 视频拉伸变形:你把原视频直接拉成(960,1920),原视频是16:9的比例,拉成9:16会严重变形,背景看起来会非常奇怪。
  3. 坐标函数没必要:x1和y1是给HeadBlur提供跟踪点坐标的,既然工具用错了,这两个函数自然也起不到作用。

正确的实现代码(MoviePy 2.1.1适配)

我们用GaussianBlur来做全屏模糊,同时保持原视频的比例,正确合成背景和清晰视频:

from moviepy import VideoFileClip, CompositeVideoClip, vfx

# 加载你的原视频
video = VideoFileClip("input.mp4")
# 定义输出的竖版分辨率,这里用你代码里的960x1920,也可以改成1080x1920主流竖版尺寸
OUTPUT_SIZE = (960, 1920)

# 1. 生成模糊背景:先把原视频拉伸铺满整个输出画布,再做高斯模糊
# radius值越大模糊程度越高,可根据需求调整
background_clip = video.resize(new_size=OUTPUT_SIZE)
blurred_background = background_clip.with_effects([vfx.GaussianBlur(radius=20)])

# 2. 处理中间的清晰原视频:保持原比例,直接居中放在模糊背景上
original_centered = video.with_position("center")

# 3. 合成两层视频:模糊背景在底层,清晰视频在顶层
composite_clip = CompositeVideoClip([blurred_background, original_centered])

# 输出视频,参数和你原来的配置一致
composite_clip.write_videofile(
    "output.mp4",
    codec="libx264",
    audio_codec="aac",
    fps=video.fps
)

可选优化:背景不拉伸(裁剪式模糊背景)

如果你不想让背景拉伸变形,希望背景是原视频的模糊版(保持16:9比例后裁剪成竖版),可以把背景生成的代码改成这样:

# 保持原视频比例放大到输出高度,再裁剪成输出尺寸,最后模糊
background_clip = video.resize(height=OUTPUT_SIZE[1]).crop(
    x_center=video.w/2, 
    y_center=video.h/2, 
    width=OUTPUT_SIZE[0], 
    height=OUTPUT_SIZE[1]
)
blurred_background = background_clip.with_effects([vfx.GaussianBlur(radius=20)])

版本适配说明

MoviePy 2.x之后确实调整了模糊相关的API:

  • 旧版的Blur被替换成了GaussianBlur(用于全屏/区域静态模糊)
  • HeadBlur是新增的动态跟踪模糊工具,专门用于模糊视频中移动的目标,别再和全屏模糊搞混啦~

备注:内容来源于stack exchange,提问作者Nico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:35:29