mcpField
F
ffmpeg-karaoke-animated-text

ffmpeg-karaoke-animated-text

github.com/josiahsiegel创意与媒体59103 次安装19 周前更新
代码仓库

关于 ffmpeg-karaoke-animated-text

为视频创作者提供使用 FFmpeg 制作卡拉 OK 字幕和动态文字叠加的指导,涵盖 ASS 与 drawtext 的选择、命令示例及时间单位。

主要功能

  1. 01ASS 卡拉 OK 字幕效果
  2. 02drawtext 动态文字叠加
  3. 03说明 ASS 与 drawtext 的适用场景
  4. 04区分厘秒、毫秒与秒
  5. 05提供 FFmpeg 命令与工作流程

适用场景

  1. 01制作带逐词高亮的歌词字幕
  2. 02添加滚动演职员表或字幕条
  3. 03制作打字机文字、标题或倒计时

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill ffmpeg-karaoke-animated-text

安装后在 Claude Code 中输入/ffmpeg-karaoke-animated-text确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
drawtext-animation-recipes.md
karaoke-ass-patterns.md
scrolling-credits-and-expressions.md

详细介绍

关键指南

Windows 文件路径要求

必须:在 Windows 上始终使用反斜杠表示文件路径

在 Windows 上使用 Edit 或 Write 工具时,必须在文件路径中使用反斜杠(\),而不是正斜杠(/)。


FFmpeg 卡拉 OK 与动画文字

此技能适用于卡拉 OK 字幕、动态字体排印、滚动字幕、动画下三分之一字幕、打字机文字、计时器和动态文字叠加。回答务必实用:明确该使用 ASS 还是 drawtext,提供可直接复制粘贴的命令或 ASS 代码片段,并指出时间单位。

快速参考

效果模式
ASS 卡拉 OK使用 ASS 格式和 \k、\kf 或 \ko 时间标签
烧录卡拉 OKffmpeg -i input.mp4 -vf "ass=karaoke.ass" -c:v libx264 -crf 18 -c:a copy output.mp4
滚动字幕-vf "drawtext=textfile=credits.txt:y=h-80*t"
打字机效果使用 enable='gte(t,...)' 错开多个 drawtext 图层
文字淡入-vf "drawtext=text='Title':alpha='min(1,t/2)'"
弹跳文字-vf "drawtext=text='Bounce':y='h/2+50*sin(t*5)'"
移动文字-vf "drawtext=text='Move':x='w-mod(t*100,w+tw)'"
旋转使用 ASS(\frz、\frx、\fry);drawtext 不支持原生文字旋转

何时使用此技能

适用于动画文字和卡拉 OK:

  • 带卡拉 OK 高亮效果的音乐视频歌词
  • 电影风格滚动字幕
  • 动画标题和下三分之一字幕
  • 打字机文字显现效果
  • 动态字体排印和单词弹出效果
  • 倒计时器、秒表、帧计数器、时间码叠加
  • 多行文字和由文本文件驱动的叠加内容

工具选择:ASS 还是 drawtext

需求最佳工具原因
单词/音节卡拉 OK 高亮ASS原生支持 \k、\kf、\ko
带描边/辉光/旋转效果的字幕样式ASS字幕样式和变换标签丰富
简单文字叠加drawtext快速、直接的 FFmpeg 滤镜
时间码、帧号、元数据文字drawtext内置变量展开
滚动字幕/新闻跑马灯drawtext位置表达式简单明了
逐词动态字幕ASS 或多个 drawtext 图层ASS 更易处理旋转/缩放;drawtext 适合直接使用公式控制运动

关键:ASS 时间单位参考

**ASS 使用两种不同的时间单位系统。这是常见的错误来源。**卡拉 OK 标签使用厘秒;ASS 动画标签使用毫秒;FFmpeg drawtext 表达式使用秒。

卡拉 OK 标签 = 厘秒(1/100 秒)
标签单位示例时长
\k厘秒{\k50}0.5 秒
\kf厘秒{\kf100}1.0 秒
\ko厘秒{\ko25}0.25 秒

换算:秒数 * 100 = 厘秒。

动画标签 = 毫秒(1/1000 秒)
标签单位示例时长
\t(t1,t2,...)毫秒\t(0,500,...)0-500 毫秒动画
\fad(in,out)毫秒\fad(200,300)淡入 200 毫秒,淡出 300 毫秒
\move(x1,y1,x2,y2,t1,t2)毫秒\move(0,0,100,100,0,1000)移动 1 秒

换算:秒数 * 1000 = 毫秒。

FFmpeg drawtext = 秒
表达式单位示例
t秒t=2.5 表示 2.5 秒
enable='between(t,0,3)'秒在 0-3 秒内可见
alpha='min(1,t/2)'秒在 2 秒内淡入
常见错误
; WRONG - mixing units:
Dialogue: 0,0:00:00.00,0:00:02.00,Style,,0,0,0,,{\k100\t(0,100,...)}Word
; {\k100} = 1 second, but \t(0,100,...) = 0.1 seconds

; CORRECT - matched duration:
Dialogue: 0,0:00:00.00,0:00:02.00,Style,,0,0,0,,{\k100\t(0,1000,...)}Word

完整的时间单位参考请参见 ffmpeg-animation-timing-reference。


卡拉 OK 核心模式

[Script Info]
ScriptType: v4.00+
PlayResX: 1920
PlayResY: 1080

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Karaoke,Arial,72,&H00FFFFFF,&H000000FF,&H00000000,&H80000000,1,0,0,0,100,100,0,0,1,3,2,2,10,10,50,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:05.00,Karaoke,,0,0,0,,{\k50}Twinkle {\k50}twinkle {\k50}little {\k50}star

烧录到视频中:

ffmpeg -i input.mp4 \
  -vf "ass=karaoke.ass" \
  -c:v libx264 -crf 18 -c:a copy \
  output_karaoke.mp4

有关高级样式、霓虹/渐变卡拉 OK、逐字符时间控制和动画卡拉 OK 变换,请参见 references/karaoke-ass-patterns.md。

drawtext 核心模式

# Fade in title over 2 seconds
ffmpeg -i input.mp4 \
  -vf "drawtext=text='Title':fontsize=100:fontcolor=white:x=(w-tw)/2:y=(h-th)/2:alpha='min(1,t/2)'" \
  output.mp4

# Vertical bounce
ffmpeg -i input.mp4 \
  -vf "drawtext=text='BOUNCE':fontsize=80:fontcolor=yellow:x=(w-tw)/2:y='(h-th)/2+50*sin(t*5)'" \
  bounce.mp4

# Scroll credits upward at 80px/sec
ffmpeg -i input.mp4 \
  -vf "drawtext=textfile=credits.txt:fontsize=48:fontcolor=white:x=(w-tw)/2:y=h-80*t" \
  -c:v libx264 -crf 18 output.mp4

有关弹簧/弹性/摇摆公式、打字机效果、字幕条、倒计时、秒表、元数据叠加和多行文本,请参阅 references/drawtext-animation-recipes.md。

工作流

  1. 使用工具选择表选择 ASS 或 drawtext。
  2. 在编写标签或表达式前确认时间单位。
  3. 必要时探测输入(ffprobe),以确认时长、帧率和分辨率。
  4. 烧录文本时显式设置输出编码(-c:v libx264 -crf 18;仅在兼容时复制音频)。
  5. 先进行短时测试渲染(-ss、-t),再渲染完整音乐视频或演职员名单。
  6. 检查可读性:卡拉 OK 应在约 30ms 内跟上歌词;字幕需要足够的显示时间;滚动演职员名单的移动速度应足够慢,以便阅读。

参考索引

  • references/karaoke-ass-patterns.md - ASS 卡拉 OK 基础、\k / \kf / \ko、BPM 计时、标签选择、霓虹/渐变样式、逐字卡拉 OK、ASS 颜色格式、动态卡拉 OK 效果。
  • references/drawtext-animation-recipes.md - 弹簧弹跳、弹性过冲、缓动近似、摇摆/摆动、脉冲、擦除、打字机、淡入淡出、移动文本、动态字体、字幕条、倒计时、秒表、动态变量、多行文本。
  • references/scrolling-credits-and-expressions.md - 音乐/教育/演职员名单的计时、纵向演职员名单、横向字幕条、ASS 旋转变通方案、drawtext 变量和表达式手册。

相关技能

  • ffmpeg-animation-timing-reference - 时间单位、字幕时长、缓动、同步容差
  • ffmpeg-captions-subtitles - 字幕基础、提取、烧录、样式设置
  • ffmpeg-kinetic-captions - 逐词弹出/弹跳/放大字幕效果
  • viral-video-animated-captions - 社交视频字幕模板
  • ffmpeg-shapes-graphics - 方框、背景、图形叠加
  • ffmpeg-transitions-effects - xfade 和视频转场

评论

支持 Markdown