moviepy 设置字幕

default_style = {
        'font': 'SimHei',  # 中文字体
        'fontsize': 30,
        'color': 'white',
        'stroke_color': 'black',
        'stroke_width': 1,
        'bg_color': 'rgba(0,0,0,0.5)',  # 半透明背景
        'position': ('center', 'bottom-50'),  # 定位在底部上方50像素
        'method': 'caption'  # 自动换行模式
    }

以下是 default_style 各参数的详细技术解析及使用场景说明:


1. 'font': 'SimHei'

作用:指定字体名称

  • 系统必须安装该字体
  • Windows 的 SimHei 对应「黑体」
  • 验证方式:用 fc-list (Linux/Mac) 或 charmap.exe (Windows) 确认字体存在
  • 常见问题:中文字体缺失会导致文字显示为方框或完全不可见

2. 'fontsize': 30

作用:字号像素值

  • 绝对值而非比例(如视频分辨率 1920x1080,30px 约 1.5% 高度)
  • 场景建议
    • 16:9 视频:底部字幕建议 30-40px
    • 移动端竖屏:可增大至 50px

3. 'color': 'white'

作用:文字主色

  • 支持格式:颜色名称 ('red') / HEX ('#FF0000') / RGB ('rgb(255,0,0)')
  • 可视化调试技巧:在调试时使用高对比色(如亮黄 '#FFFF00'

4. 'stroke_color': 'black''stroke_width': 1

作用:文字描边

  • 技术原理
    • stroke_color 定义描边颜色
    • stroke_width 指定外扩像素数(内核通过图像膨胀算法实现)
  • 优化建议:白字黑描边是经典配置,抗复杂背景效果最佳

5. ** 'bg_color': 'rgba(0,0,0,0.5)'**

作用:文本框背景

  • RGBA格式:第四个参数为透明度(0-1)
  • 布局机制:文本自动计算边界框,背景会包含完整换行后的整体区域
  • 实用技巧:降低透明到 0.2-0.3 可避免遮挡视频主体

6. ** 'position': ('center', 'bottom-50')**

作用:字幕定位

  • 坐标系:以视频左上角为原点,横向X轴,纵向Y轴
  • 模式说明
    • 绝对定位('left', 100) 表示水平左对齐,垂直100像素处
    • 相对定位
      • 关键字:'center', 'left', 'right', 'top', 'bottom'
      • 偏移语法:'bottom-50' = 距底部向上偏移50px
  • 渲染层级:需要确保 CompositeVideoClip 中字幕层在视频上层

7. ** 'method': 'caption'**

作用:文字布局引擎

  • 可选值
    • 'caption':自动换行,适合段落文本(依赖于 size 参数)
    • 'label':单行显示,文本超出后会直接溢出画面
  • 自动换行原理:基于文本宽度和 size 参数的宽度约束(代码中使用 size=video.size 即视频全尺寸)

▶ 参数配合技巧

  1. 安全定位公式

    垂直安全位置 = "bottom-{}".format(int(video.h * 0.1))  # 距底部10%高度
    
  2. 抗锯齿优化

    TextClip(..., kerning=-0.5)  # 增加字间距改善小字号可读性
    
  3. 动态字号适配

    fontsize = int(video.h * 0.04)  # 根据视频高度自适应
    
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐