Communitygithub.com

AntlersSam/saas-launch-video-kit

當音訊已放入 HyperFrames 構圖中,需要進行混音處理時使用:淡入/淡出、交叉淡變、音軌增益或音量、音量自動化、閃避、音樂襯底與旁白互斥(旁白雕刻)、音軌效果(EQ、壓縮器、限制器、閘門、飽和、延遲、殘響、合聲、移相器、位元壓碎)、在音軌音量或任何效果參數上繪製自動化包絡,或是使用一個子混音匯流排(`<hf-audio-group>`)同時承載多個音軌的鏈、推桿和自動化時鐘。 請勿用於尋找或生成音訊 — 尋找背景音樂、音效或製作旁白屬於 `/media-use`。請勿用於片段時序或音軌佈局,這屬於 `/hyperframes-core`。

saas-launch-video-kit 是什麼?

這個 skill 專注於 HyperFrames 構圖中的音訊混音階段。它建立在一個核心理念之上:混音並非處理器的堆疊,而是一套關係的集合。為此,它提供了豐富的工具集來表達這些關係,包含透過 `data-fx-chain` 屬性實現的效果鏈(EQ、壓縮器、限制器等)、透過 `data-automation` 實現的音量與效果自動化包絡,以及最重要的「旁白雕刻」功能。旁白雕刻能智慧地從音樂襯底中移除旁白實際佔據的頻段,而非簡單地將整個音樂音量降低,從而在保持音樂完整性的同時確保語音清晰度。 此 skill 支援 Claude Code、HyperFrames 等平台。其核心優勢在於預覽與渲染共享同一個 Web Audio 圖形處理引擎,確保在編輯時聽到的聲音與最終輸出完全一致,無需重複調整參數。所有效果、自動化與雕刻參數都透過 HTML 屬性(`data-fx-chain`、`data-automation`、`data-fx-carve`)直接定義在音訊或影片元素上,或透過 `<hf-audio-group>` 匯流排應用於多個音軌。對於診斷無法直接聆聽的音訊檔案,它提供了一套基於頻譜測量的科學方法,並附帶了豐富的預設與針對性工作(如「降低轟鳴感」、「增加清晰度」),讓使用者能從症狀直接找到解決方案。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AntlersSam/saas-launch-video-kit/tree/HEAD/skills/hyperframes-audio

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

外掛安裝: 在執行設定或更新指令前,若此 skill 位於 HyperFrames 外掛內,請遵循外掛執行規則。獨立安裝則保留以下更新說明。

HyperFrames 音訊

混音是一套關係的集合,而非處理器的堆疊。兩個各自聽起來沒問題的音軌,放在一起可能會變得很刺耳,而解決方案幾乎從來不是「把其中一個調小聲」— 而是找出它們在爭奪什麼,並將那個頻段分配給更需要它的音軌。這裡的每個工具都是為表達這些關係而存在。

效果存在於元素上的 data-fx-chain 屬性中,預覽與渲染執行的是同一個 Web Audio 圖形 — 在即時環境中使用 studio,在離線環境中使用引擎(位於其驅動的瀏覽器內部)。每個效果只有一種實作,因此你在拖動時間軸時聽到的,就是最終會寫入的內容。你永遠不需要調整兩次。

片段時序仍屬於 /hyperframes-core:音訊/影片修剪與來源範圍使用 data-start、data-duration 和 data-media-start,而交叉淡變則讓不同音軌上的片段重疊。此 skill 擁有放置後音軌的淡入/淡出、交叉淡變包絡、音軌增益/音量、音量與效果自動化、閃避/旁白雕刻,以及效果鏈。/media-use 則負責來源管理、生成與預處理。

常數 data-playback-rate(0.1..10)在配對的音訊/影片元素使用相同的時序、來源偏移與速率時,可安全地進行影像與保留音高的聲音渲染。速度變化是一個位於 data-automation 中的 rate 通道(詳見 docs/reference/speed-ramps);它會覆寫常數,並在預覽與渲染中保持音高。HyperFrames 不提供自動波形同步或漂移校正。 如需可複製的剪輯/交叉淡變/重新計時範例,請使用 /hyperframes-core → references/creator-editing-recipes.md。

三個屬性承載了所有內容,它們位於音訊/影片元素本身 — 或者,對於前兩個屬性,位於一個 <hf-audio-group> 匯流排上(請參閱「一個匯流排服務多個音軌」):

屬性承載內容
data-fx-chain效果,按訊號處理順序排列
data-automation此音軌上音量或其效果參數的包絡線
data-fx-carve雕刻本身的設定,以便日後可以重新推導

內建的效果家族包括:增益、EQ(高通、低通、峰值、高低架)、壓縮器、限制器、閘門、飽和、延遲、殘響、合聲、移相器和位元壓碎。

每個效果的確切 JSON 格式,以及通道必須滿足的規則:references/attributes.md。 每個效果及其參數、範圍和單位:references/fx-registry.md。 如何判斷一個你無法聽到的檔案出了什麼問題:references/diagnosis.md。 預設、命名作業與單旋鈕設定檔,以及症狀對應修復表:references/presets.md — 在手動建立效果鏈之前請先閱讀,因為其中一個預設或命名作業通常已經指出了問題。

如何運作

兩個編輯介面負責寫入這些屬性;兩個執行時期透過相同的建構器讀取它們。這個共享的中間層就是預覽能預測渲染結果的原因。

flowchart TB
  voice["語音音軌<br/>媒體檔案"]
  bed["音樂襯底<br/>媒體檔案"]

  subgraph AUTHOR["編輯 — 唯一寫入屬性的地方"]
    panel["工作室<br/>旁白雕刻控制"]
    script["scripts/carve.mjs<br/>偵測配對,預設為動態"]
    analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
    panel --> analysis
    script --> analysis
  end

  voice --> analysis
  bed --> analysis

  subgraph ATTRS["寫入襯底元素的屬性"]
    carveAttr["data-fx-carve<br/>source · strength · dynamic"]
    chainAttr["data-fx-chain<br/>peaking xN + gain, 標記 fromCarve"]
    autoAttr["data-automation<br/>每個雕刻參數一個通道"]
  end

  analysis --> carveAttr
  analysis --> chainAttr
  analysis --> autoAttr

  subgraph SHARED["單一實作,兩者皆讀取"]
    build["audioFxGraph.ts · buildFxChain"]
    sched["audioFxAutomation.ts · scheduleChainAutomation"]
  end

  chainAttr --> build
  autoAttr --> sched

  build --> preview["預覽<br/>即時 AudioContext<br/>attachElementFxChain"]
  sched --> preview
  build --> render["渲染<br/>無頭瀏覽器中的 OfflineAudioContext<br/>applyAudioFxChain"]
  sched --> render

  preview --> heard["拖動時間軸時聽到的內容"]
  render --> wav["處理後的 WAV<br/>+ chainTailSeconds 確保混音讓尾音通過"]
  wav --> mix["引擎 · audioMixer<br/>音量通道在此處烘焙到 PCM 中,而非圖形中"]
  mix --> out["渲染後的混音"]

  edit["播放中編輯屬性"] -.->|MutationObserver| preview

雕刻本身的設定在播放時從不被讀取 — 實際播放的是它產生的效果鏈和通道。data-fx-carve 的存在是為了讓現有雕刻的強度可以被更改,而無需從濾波器中反向猜測。

在一個已雕刻的襯底內部,訊號會先經過凹陷,接著是電平匹配,然後是你自行添加的任何效果 — 這就是為什麼你後續添加的限制器仍然能作為最終的天花板:

flowchart LR
  src["解碼後的襯底"] --> p1["peaking<br/>400 Hz"]
  p1 --> p2["peaking<br/>1 kHz"]
  p2 --> p3["peaking<br/>1.6 kHz"]
  p3 --> g["gain<br/>電平匹配"]
  g --> hand["你的自訂效果<br/>例如限制器"]
  hand --> dest["音軌增益,然後輸出"]

  l1["通道 fx.n1.gain"] -.->|"該頻段語音電平的<br/>包絡線"| p1
  l4["通道 fx.n4.gain"] -.->|"襯底整體<br/>閃避的程度"| g

靜態雕刻則是相同的圖形,但使用固定的數值且沒有任何通道。

首先,判斷問題所在

下表從「聽起來太轟」開始 — 這假設已經有人聽過並提出了這個問題。當你拿到一個檔案並被告知「修好它」,但你沒有這樣的描述也無法親自聆聽時,就必須進行測量。有一個規則主導這一切:

無法診斷單一未知語音的絕對頻譜。 共振峰有 ±10 dB 的變化,基頻範圍在 85–255 Hz 之間,句子結尾會衰減 5–6 dB。這些特性單獨來看都像是缺陷,但實際上都是說話者的特徵。

因此,要進行比較,而且是與同一檔案內的參考點比較:如果有的話就用乾淨的原始版本,否則就用暫停間隙 — 在間隙中能聽到的任何聲音都是額外添加的,而間隙的頻譜代表的是通道本身而非語音。與出版的標準頻譜或合成控制語音進行比較是無效的:兩位說話者之間的差異遠大於大多數缺陷的影響,而本指南評估中出現的兩個錯誤答案正是來自於這種比較方法。

當沒有原始版本也沒有可用的靜音時,靜態的音調缺陷確實是無法確定的。請直接說明這一點,並提供符合條件的讀數,而不是隨意選擇一個並基於它建立效果鏈。

指令、陷阱和可行的操作範例:references/diagnosis.md。在診斷一個沒有人描述過的檔案之前,請先閱讀它。

從症狀開始

一旦你確定了頻段和類型,就試著說出音訊的問題。大多數不良音訊都屬於以下一或兩種情況,而每個情況都有一個內建的解決方案:

聽起來像嘗試使用
底下有哼聲或重擊聲rumble-cut,或 80 Hz 的 highpass
轟鳴、沉重抑制轟鳴感作業 (200 Hz)
模糊、像隔著紙板減少混濁感作業 (250 Hz)
語音難以辨識增加清晰度作業 (3 kHz),或雕刻襯底
刺耳且令人疲勞柔化刺耳感作業 (3.2 kHz)
某些單詞比其他大聲很多對壓縮器使用均勻度,或平衡電平
句子之間有殘響room-gate
語音與音樂互相干擾旁白雕刻 — 不是在任一者上使用 EQ
乾澀、像在虛無中錄製room-tight 或 room-natural
聽起來就是「業餘」voice-clean,它結合了上述四種效果

完整目錄、每個預設包含的內容、頻段詞彙,以及有意不包含的項目(除齒音、降噪、音色匹配):references/presets.md。

先減法再加法,濾波後再調整電平,處理完關係後再調整音量,最後處理特色與天花板。每一步都會改變下一步聽到的內容 — 在高通濾波器之前設定的壓縮器,會將時間花在追蹤低頻的轟鳴聲上。

根據問題而非名稱來選取效果家族

濾波器(highpass、lowpass、peaking、lowshelf、highshelf)決定了一個音軌可以佔據哪些頻率。這是處理兩個音源衝突時的首選工具,因為衝突發生在頻段中:襯底和語音都想要 1–3 kHz,將這個頻段從襯底中移除,對襯底的影響遠小於將整個襯底音量降低對混音的影響。對語音使用高通濾波器是消除低頻噪音的標準方法;低通濾波器則用於刻意讓聲音變暗或模糊。

動態處理(gain、compressor、limiter、gate)決定了一個音軌的音量隨時間變化的方式。壓縮器縮小大聲與小聲之間的差距,讓小聲的部分可以被提升。限制器是一個天花板 — 它不塑造任何東西,只保證任何訊號都不會超過這個界限。閘門會移除低於某個閾值的聲音,這就是你如何消除短語之間環境噪音的方法。gain 是一個單純的電平調整階段,當一個音軌需要讓位時,自動化通道就會使用它。

非線性處理(saturate、bitcrush)改變了波形的形狀,這會增加原本不存在的泛音。當一個音軌需要音色特性或顆粒感而非校正時使用它 — 但要記住它是生成式的:它會讓一個單薄的音源變得更豐富,而不是更乾淨。

時間效果(delay、reverb、chorus、phaser)將一個音軌置於一個空間中或賦予它寬度。這些效果最容易破壞混音,因為殘響尾音或失諧的複製品會佔據語音所需要的相同空間。將它們用在應該位於其他東西_後面_的物件上,並且保持濕聲比例低於單獨聽起來覺得合適的程度。

效果鏈是串聯的:每個效果處理的是前一個效果的輸出。因此,校正性的濾波應放在前面,音色效果在中間,而限制器放在最後,這樣它才能真正起到天花板的作用。

旁白雕刻

它解決的問題。 音樂襯底下的語音會使語音難以聽清。直覺反應是讓整個襯底音量降低,這雖然有效,但也讓音樂失去了所有活力 — 音樂在整個旁白期間都變得軟弱無力。但語音並不需要整個頻譜,它只需要它實際佔據的那幾個頻段。雕刻只會移除這些頻段,讓襯底保留其低頻和高頻,這樣音樂仍然是音樂,同時語音也仍然清晰可辨。

這是一種關係,而非一個效果。 設定存在於_襯底_上 — 也就是被處理的音軌 — 並且它們指定了要聽取的語音來源,就像側鏈壓縮器一樣:你選擇會變安靜的音軌,並選取是什麼讓它變安靜。絕對不要將雕刻放在語音音軌上。 將語音對自身進行雕刻是一個錯誤,而不是一個微妙的混音選擇。

每個語音,而不是其中一個。 sources 是一個列表,因為一個襯底通常會運行在整個序列之下 — 一個旁白、一個採訪回答、第二個主持人。它們會在襯底自身的時鐘上被加總起來,然後再進行測量(mixCarveSources),因此一個分析就能涵蓋所有語音:頻段來自於所有存在的語音,而包絡線在任何語音發生的地方都會上升。那些從未與襯底同時播放的語音則被排除在外;它們無法遮蔽襯底。

對多個片段 ID 進行雕刻是錯誤的。請將片段分組,並對該分組進行雕刻。 這不是一個建議,而是一個不變的法則。逐個命名片段必須完全正確,並且只在下次編輯之前保持正確 — 如果之後新增了第四個旁白片段,它就會在雕刻的感知範圍之外播放,導致襯底無法在其下方正確閃避。改用命名分組則可以在分析時解析成員關係,因此稍後加入分組的片段無需修改 sources 即可被涵蓋:

<!-- 將旁白分組,然後對該分組進行襯底雕刻 -->
<audio id="vo-intro" data-audio-group="voiceover" …></audio>
<audio id="vo-middle" data-audio-group="voiceover" …></audio>
<audio id="vo-outro" data-audio-group="voiceover" …></audio>

<audio id="music" data-fx-carve='{"enabled":true,"sources":["voiceover"],"strength":0.8}' …></audio>

一個 sources 列表如果包含了兩個或多個純片段 ID 而非一個分組,會被 audio_carve_ungrouped_sources 檢查規則捕獲 — 它仍然可以運作,但這個版本會在新增一個片段時默默地失效。

保持雕刻分組為語音分組:不要包含襯底、音效或音樂。 sources 中的分組 ID 在_每次_分析時都會解析為每個_當前的_成員,因此你命名的分組就是之後獲取的分組 — 而不是當初寫入時所測量的那些音軌。有兩種情況會引發問題:

  • 襯底位於其自身的來源分組中。 它被當作一個語音傳遞給自身,並根據其自身內容進行雕刻 — 這就是「永遠不要將一個音軌對其自身進行雕刻」的規則,並在下一次重新分析時生效。
  • 一個 SFX 或音樂片段位於語音分組中。 它會在下次分析時進入側鏈,然後襯底會開始為了躲避一個「咻」聲而閃避,即使最初寫入屬性時的分析從未測量過它。

這兩種情況在雕刻被寫入的那一刻是不可見的:分析只對它檢測到的語音進行加總,並不會往返解析分組成員,所以第一次分析是正確的,只有下一次分析才會出錯。因此,請為每個角色建立自己的分組 — music 給襯底,voiceover 給旁白,sfx 給音效 — 並確保 sources 中命名的分組只包含語音。

carve.mjs 在遇到這兩種情況時,會拒絕寫入分組形式,而是記錄片段 ID,並顯示……

Individual skills in this repo

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

AntlersSam/saas-launch-video-kit

Author or edit a custom HyperFrames composition when no specialized workflow fits, or when BRIEF.md sets flow: companion. Use for longer or multi-scene pieces, brand and sizzle reels, montages, static loops, static title cards, footage remixes, and freeform builds. Use motion-graphics instead for a short unnarrated motion-first unit, including an animated title. Route fresh creation through hyperframes before using this skill.

AntlersSam/saas-launch-video-kit

All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.

AntlersSam/saas-launch-video-kit

Use the HyperFrames CLI development loop: init, add, catalog, capture, lint, check, snapshot, compare, grade-compare, preview, play, present, beats, keyframes, single or batch render, publish, cloud, cloudrun, feedback, lambda, doctor, browser, info, upgrade, skills, compositions, timeline, history, clean, docs, benchmark, telemetry, transcribe, auth, tts, and remove-background. Also use when diagnosing build or render failures. validate, inspect, and layout are deprecated aliases; use check. Covers local, HeyGen-hosted cloud, AWS Lambda, and Google Cloud Run rendering.

AntlersSam/saas-launch-video-kit

The HyperFrames composition contract — build one renderable project. Use for composition structure, the `data-*` timing attributes, `class="clip"`, tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Read before writing composition HTML.

相關技能