Communitygithub.com

Pavan-makwana/My-Agentic-Skills

精確的音頻語音起始偵測與逐字漸進式排印同步引擎。可切割音頻波形、測量 RMS 能量包絡,並將快速語音節奏映射至毫秒時間戳,適用於爆紅短影音。

My-Agentic-Skills 是什麼?

這項技能解決了歌詞影片中常見的問題:當歌手快速演唱(例如快節奏的段落或斷句)時,整行歌詞同時顯示會讓視覺跟不上聲音,導致節奏錯位。Lyric Word Sync Engine 透過對音頻進行聲學包絡分析(RMS),結合語音識別,為每個單詞精確計算其起始時間戳,並按照音節權重和局部 RMS 能量上升分布每個單詞的顯示時機。它支援 MP3/WAV 音頻輸入,生成 JSON 格式的時間戳數據,並提供標準的 CSS 漸進式單詞顯示樣式(未播出的單詞以低透明度顯示,播出的單詞變為醒目顏色),讓開發者能輕鬆嵌入到各種影片或動畫專案。此技能相容於 Claude Code、Cursor 等主流 AI 代理平台,並提供 Python 腳本進行時間戳提取。

相容平台~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]

問題與解決方案

  • 問題:當歌手加速演唱(例如快速的 charanam 或斷句)時,靜態的整行顯示會停留在畫面上過久,或在歌手唱完後才出現。
  • 解決方案:
    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.

相關技能