mcpField
E
embed-subtitles

embed-subtitles

github.com/aviz85创意与媒体5072 次安装16 周前更新
代码仓库

关于 embed-subtitles

Embed Subtitles 是一个通过 FFmpeg 将 SRT 字幕烧录进视频的命令行脚本,适合需要调整字幕外观或处理 RTL 字幕的视频制作流程。它可设置位置、字体样式,并在识别到 RTL 内容时应用方向标记修正。

主要功能

  1. 01将 SRT 字幕烧录到视频
  2. 02调整字体、颜色、描边和阴影
  3. 03设置字幕位置与边距
  4. 04检测 RTL 字幕并应用方向标记
  5. 05提取视频帧以检查效果

适用场景

  1. 01为视频添加固定字幕
  2. 02调整字幕样式和屏幕位置
  3. 03处理阿拉伯语或希伯来语字幕
  4. 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-size20字体大小,单位为像素
--font-nameArial字体名称
--positionbottom字幕位置:top、center、bottom
--margin25距边缘的边距,单位为像素
--colorwhite文本颜色
--outline2描边粗细
--shadow1阴影深度
--credit片尾显示的署名文本
--credit-positiontop署名位置:top、bottom
--credit-duration2.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