moviepy==1.0.2
正常画中画
#画中画
from moviepy.editor import VideoFileClip, CompositeVideoClip
from moviepy.video.fx.resize import resize
main_clip = VideoFileClip("1222.mp4") # 主要视频
pip_clip = VideoFileClip("122.mp4") # 画中画视频
pip_clip = resize(pip_clip, width=300)
pip_clip = pip_clip.set_position(("right", "bottom")).set_duration(main_clip.duration)
final_clip = CompositeVideoClip([main_clip, pip_clip])
final_clip.write_videofile("output_video.mp4", codec="libx264", fps=24)
圆形画中画
# 画中画圆形视频🆗
from moviepy.editor import VideoFileClip, CompositeVideoClip, ImageClip
import numpy as np
from moviepy.video.fx.resize import resize
# 创建圆形遮罩的函数
def create_circular_mask(width, height):
"""
创建圆形遮罩,返回一个圆形区域为白色,背景为透明的遮罩图像
"""
mask = np.zeros((height, width), dtype=np.uint8)
center = (width // 2, height // 2)
radius = min(center)
# 填充圆形区域为白色(显示部分)
y, x = np.ogrid[:height, :width]
mask_area = (x - center[0]) ** 2 + (y - center[1]) ** 2 <= radius ** 2
mask[mask_area] = 255
return mask
# 裁剪视频并合成画中画的函数
def create_pip_video(pip_video_path, background_video_path, pip_position=(0, 0), pip_size=None, output_path="output_video_with_circular_pip.mp4"):
"""
裁剪 pip_video 为圆形并将其合成到背景视频上,形成画中画效果
:param pip_video_path: 要裁剪的画中画视频文件路径
:param background_video_path: 背景视频文件路径
:param pip_position: 画中画视频的位置,元组 (x, y)
:param pip_size: 画中画视频的目标大小,元组 (width, height),可选
:param output_path: 输出视频文件路径
"""
# 加载 pip 视频文件
pip_video = VideoFileClip(pip_video_path)
# 如果指定了 pip_size,则调整 pip_video 的大小
if pip_size:
pip_video = resize(pip_video,newsize=pip_size)
# 获取调整后的视频大小
width, height = pip_video.size
# 创建圆形遮罩
mask = create_circular_mask(width, height)
mask_3d = np.stack([mask] * 3, axis=-1) # 将二维mask转换为三维
# 将视频裁剪为圆形并设置透明背景
mask_clip = ImageClip(mask_3d).set_duration(pip_video.duration).set_fps(pip_video.fps).to_mask()
# 为视频设置遮罩
pip_video_with_mask = pip_video.set_mask(mask_clip)
background_video = VideoFileClip(background_video_path)
final_video = CompositeVideoClip([background_video, pip_video_with_mask.set_position(pip_position)])
final_video.write_videofile(output_path, codec="libx264", fps=background_video.fps)
# 调用函数,传入视频路径和参数
create_pip_video(
"122.mp4",
"1222.mp4",
pip_position=(450, 950),
pip_size=(250, 300), # 调整画中画视频的大小
output_path="output_video_with_circular_pip.mp4"
)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!