MoviePy 2.1.1无法实现视频模糊背景效果的问题求助
MoviePy 2.1.1无法实现视频模糊背景效果的问题求助
刚学MoviePy碰到版本更新的坑太正常了,我来帮你把问题理清楚,然后给你正确的解决方案~
首先先拆解你的核心需求:把960x540的横版视频做成竖版输出,中间保留原比例的清晰视频,周围用原视频的模糊版填充整个屏幕。
你当前代码的几个核心问题
- 用错了模糊工具:
HeadBlur完全不是用来做全屏模糊的!它的作用是跟踪视频中某个移动的点(比如人脸),只模糊那个特定区域,所以你用它来做全屏模糊肯定没效果,这是最关键的错误。 - 视频拉伸变形:你把原视频直接拉成
(960,1920),原视频是16:9的比例,拉成9:16会严重变形,背景看起来会非常奇怪。 - 坐标函数没必要:
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
相关产品推荐
相关产品推荐

