关于 embed-subtitles
Embed Subtitles 是一个通过 FFmpeg 将 SRT 字幕烧录进视频的命令行脚本,适合需要调整字幕外观或处理 RTL 字幕的视频制作流程。它可设置位置、字体样式,并在识别到 RTL 内容时应用方向标记修正。
主要功能
- 01将 SRT 字幕烧录到视频
- 02调整字体、颜色、描边和阴影
- 03设置字幕位置与边距
- 04检测 RTL 字幕并应用方向标记
- 05提取视频帧以检查效果
适用场景
- 01为视频添加固定字幕
- 02调整字幕样式和屏幕位置
- 03处理阿拉伯语或希伯来语字幕
- 04渲染前检查字幕位置
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ aviz85/ claude-skills-library --skill embed-subtitles安装后在 Claude Code 中输入/embed-subtitles确认已加载。
详细介绍
嵌入字幕
使用 FFmpeg 将 SRT 字幕烧录到视频文件中。
前置条件
没有 SRT 文件? 先使用 transcribe 技能从音频/视频生成字幕。
需要翻译? 转录后,读取 SRT,保留时间戳并翻译每个条目,然后写入新的 SRT 文件。无需 API。
快速开始
cd ~/.claude/skills/embed-subtitles/scripts
# Burn SRT into video
npx ts-node embed-subtitles.ts -i video.mp4 -s subtitles.srt -o output.mp4
# Custom styling
npx ts-node embed-subtitles.ts -i video.mp4 -s subtitles.srt -o output.mp4 \
--font-size 24 --position bottom --margin 40
# Add credit text overlay at end
npx ts-node embed-subtitles.ts -i video.mp4 -s subtitles.srt -o output.mp4 \
--credit "Your Name" --credit-position top
选项
| 选项 | 短选项 | 默认值 | 描述 |
|---|---|---|---|
--input | -i | (必填) | 输入视频文件 |
--subtitles | -s | (必填) | SRT 字幕文件 |
--output | -o | (必填) | 输出视频文件 |
--font-size | 20 | 字体大小,单位为像素 | |
--font-name | Arial | 字体名称 | |
--position | bottom | 字幕位置:top、center、bottom | |
--margin | 25 | 距边缘的边距,单位为像素 | |
--color | white | 文本颜色 | |
--outline | 2 | 描边粗细 | |
--shadow | 1 | 阴影深度 | |
--credit | 片尾显示的署名文本 | ||
--credit-position | top | 署名位置:top、bottom | |
--credit-duration | 2.5 | 署名显示时长,单位为秒 | |
--extract-frame | 提取指定秒数处的帧以供验证 |
位置值
top- 靠近视频顶部(适合显示署名,可避开底部烧录的文字)center- 视频中部bottom- 靠近视频底部(传统字幕位置)
依赖项
- FFmpeg(必须已安装且位于 PATH 中)
RTL 自动检测与修复(重要)
嵌入任何 SRT 文件之前,Claude 必须检查内容是否为 RTL。
检测
读取 SRT 文件,并检查大多数文本行是否包含希伯来语/阿拉伯语/波斯语字符:
- 希伯来语范围:
\u0590-\u05FF - 阿拉伯语范围:
\u0600-\u06FF - 波斯语附加范围:
\u0750-\u077F
如果检测到 RTL 内容,请在传递给 FFmpeg 之前应用修复。
RTL 修复
使用 Unicode 方向标记包裹每个文本行(不包括序号和时间戳):
python3 -c "
import re
with open('SRT_FILE_PATH', 'r', encoding='utf-8') as f:
content = f.read()
lines = content.split('\n')
result = []
for line in lines:
stripped = line.strip()
if stripped and not re.match(r'^\d+$', stripped) and not re.match(r'\d{2}:\d{2}:\d{2}', stripped):
line = '\u202B' + line + '\u202C'
result.append(line)
with open('SRT_FILE_PATH', 'w', encoding='utf-8') as f:
f.write('\n'.join(result))
"
- U+202B(RLE - 从右向左嵌入):强制段落方向为 RTL
- U+202C(PDF - 弹出方向格式):结束嵌入
此修复可解决: 行首英文单词、句点/逗号位于错误一侧、混合双向文本。
何时应用
Claude 应智能分析 SRT 内容:
- 如果大多数文本是希伯来语/阿拉伯语/波斯语 → 应用 RTL 修复
- 如果内容混合但以 RTL 为主 → 应用 RTL 修复
- 如果是 LTR(英语、西班牙语等)→ 跳过
- 用户无需提供标志——自动检测
备注
- 对于阿拉伯语署名,请使用英文文本,因为 FFmpeg drawtext 对 RTL 的支持有限
- 使用
--extract-frame在最终渲染前验证字幕位置
评论
支持 Markdown