python 视频处理库moviepy 设置字幕
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
即视频全尺寸)
▶ 参数配合技巧
-
安全定位公式:
垂直安全位置 = "bottom-{}".format(int(video.h * 0.1)) # 距底部10%高度
-
抗锯齿优化:
TextClip(..., kerning=-0.5) # 增加字间距改善小字号可读性
-
动态字号适配:
fontsize = int(video.h * 0.04) # 根据视频高度自适应