如何用Manim复现指定YouTube视频的片头曲线滑动动画?
Manim实现曲线滑动片头效果的方案
核心思路
目标效果的核心是一条动态曲线沿预设路径平滑滑动,同时伴随曲线自身形态的细微变化。我们可以通过Manim的参数化函数(ParametricFunction)结合路径动画(MoveAlongPath)来实现,无需完全复刻原视频的复杂细节,抓准“滑动+曲线形变”的核心即可。
完整可运行代码
from manim import * class CurveSlideIntro(Scene): def construct(self): # 设置深色背景,贴近原视频风格 self.camera.background_color = "#0a0a0a" # 定义滑动的路径(横向椭圆弧,可按需调整) slide_path = Ellipse(width=12, height=2).shift(UP*0.5) slide_path.set_opacity(0) # 隐藏路径本身 # 动态曲线生成函数:t为曲线参数,time为动画进度 def dynamic_curve(t, time): # 带时间偏移的正弦波动 wave = np.sin(8 * t + 4 * time) * 0.3 # 随时间变化的纵向偏移 y_offset = np.sin(time) * 0.2 return np.array([ t * 3 - 1.5, # 横向范围控制 wave + y_offset, 0 ]) # 初始化曲线 curve = ParametricFunction( lambda t: dynamic_curve(t, 0), t_range=[0, 1], color=BLUE, stroke_width=4 ) # 组合滑动动画与曲线形变 self.play( MoveAlongPath(curve, slide_path), UpdateFromAlphaFunc( curve, lambda m, alpha: m.become(ParametricFunction( lambda t: dynamic_curve(t, alpha), t_range=[0, 1], color=interpolate_color(BLUE, PURPLE, alpha), # 颜色渐变 stroke_width=4 )) ), run_time=6 # 动画时长,可按需调整 ) self.wait(0.5)
代码关键部分解释
- 滑动路径:
slide_path定义曲线移动的轨迹,这里用椭圆弧模拟横向滑动,你可以换成直线、贝塞尔曲线等任意路径,通过调整width/height或改用Line/CubicBezier修改轨迹。 - 动态曲线:
dynamic_curve通过参数t生成基础曲线形态,time参数控制随时间的波动偏移和纵向移动,实现曲线自身的形变效果。 - 动画组合:
MoveAlongPath负责曲线的整体滑动,UpdateFromAlphaFunc同步更新曲线的形态和颜色,两者结合实现“滑动+形变”的核心效果。 - 风格适配:深色背景、渐变曲线颜色贴近原视频视觉风格,可修改
stroke_width、颜色值调整细节。
扩展优化建议
- 若要实现多曲线效果,可复制多条曲线,设置不同初始偏移和颜色,同步播放动画。
- 修改
dynamic_curve中的正弦参数(如8*t的系数)可调整曲线波动频率,0.3控制波动幅度。 - 如需曲线滑动时变长/变短,可在
UpdateFromAlphaFunc中动态调整t_range的范围。
内容的提问来源于stack exchange,提问作者callum
相关产品推荐
相关产品推荐

