Communitygithub.com

Pavan-makwana/My-Agentic-Skills

精准的音频语音起始检测与逐字渐进式排版同步引擎,可切片音频波形、测量 RMS 能量包络,并将快速语音节奏映射到毫秒级时间戳,适用于病毒式短视频。

My-Agentic-Skills 是什么?

该技能解决歌词视频制作中整行文字显示滞后于歌手演唱节奏的常见问题。通过音频 RMS 能量包络分析与音节权重分布,为每个单词生成毫秒级精确的时间戳,并利用 CSS 渐进式高亮动画实现逐字同步显示。其 Python 脚本从 WAV/MP3 文件中提取语音特征,根据单词长度分配活跃发音时长,最终输出结构化的时间戳 JSON。CSS 部分则通过 `opacity` 过渡控制单词从半透明(未唱到)到纯色(已唱到)的平滑切换。该技能适用于所有支持自定义 CSS 和 JavaScript 的 Web 平台或视频编辑器,尤其适合 Reels、TikTok 等需要高节奏韵律感的短视频场景。

兼容平台~Claude Code~Codex CLI~Cursor✓Antigravity
npx skills add https://github.com/Pavan-makwana/My-Agentic-Skills/tree/HEAD/skills/lyric-word-sync-engine

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

歌词逐字同步引擎

解决常见歌词视频问题——整行显示在歌手快速演唱(如快节奏段落或断句)时滞后于演唱者,通过将每个单词与声学起始点精确同步实现逐字显示。

flowchart TD
    A[音频文件 MP3/WAV] --> B[声学包络分析 RMS]
    B --> C[语音识别 / 语音检查点]
    C --> D[单词音节权重分配]
    D --> E[亚秒级单词时间戳 JSON]
    E --> F[渐进式单词显示 HTML/CSS]

问题与解决方案

  • 问题:当歌手加速(例如快速副歌或断句)时,静态整行显示会停留过久或出现在歌手已经唱完之后。
  • 解决方案:
    1. 每行被分词为独立单词:["Kanmani", "anbodu", "kaadhalan"]。
    2. 根据音节权重和局部 RMS 能量上升分布活跃发音时长。
    3. 所有单词在布局中同时渲染,确保字体大小和换行不会突然跳跃。
    4. 未演唱的单词以微弱幽灵色(opacity: 0.12)渲染。
    5. 当歌手说出每个单词时,该单词过渡为纯深红色(opacity: 1, color: #8c1226)。

时间戳提取脚本

import wave, numpy as np

def compute_word_timings(audio, words, t_start, t_end, sr=16000):
    dur = t_end - t_start
    active_dur = max(0.4, dur * 0.88)
    weights = [max(2, len(w)) for w in words]
    total_w = sum(weights)
    
    word_events = []
    cur_t = t_start
    for i, w in enumerate(words):
        w_dur = (weights[i] / total_w) * active_dur
        word_events.append({
            'word': w,
            't_rel': round(cur_t, 3)
        })
        cur_t += w_dur
    return word_events

CSS 渐进式单词高亮

.native .word {
  display: inline-block;
  opacity: 0.12;
  transition: opacity .12s ease-out;
  padding: 0 .25cqw;
}
.native .word.revealed {
  opacity: 1;
}

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相关技能