Communitygithub.com

EditAtlas/sound-design

為完成影片設計音效,使用 EditAtlas 圖書館中的真實音效(2,278 個有描述的音效,公開可從 GitHub 下載並附有 SHA-256 校驗)。找出畫面中的關鍵時刻,以影格表檢視它們,根據描述和測量數字挑選音效,將每個音效精確放置於對應影格並依據其角色設定音量,保留或替換影片本身的音樂和人聲,輸出新的 MP4 以及獨立的 SFX WAV,並以數字檢驗結果(同步、節奏、空洞、音量等)。

sound-design 是什麼?

EditAtlas/sound-design 是一個 AI 代理技能,專為完成的影片添加真實音效,模擬專業音效編輯師的工作流程。它使用 EditAtlas 圖書館中的 2,278 個真實音效檔案(公開可下載,附有 SHA-256 校驗),透過分析影片的像素變化來識別剪輯、動作和停止等關鍵時刻。開發者可以基於音效的描述和測量數據(如持續時間、攻擊時間、中心頻率)來選擇音效,並使用 'sounds.py' 和 'check.py' 等指令碼進行精確放置和音量調整。該技能支援 Claude Code、Cursor 和 Codex 等 AI 編碼代理平台,可獨立於原始音軌工作或與之混合,並提供詳細的數字校驗報表以確保同步、節奏和音量品質。其特色在於無法「聆聽」音效,而是完全依賴測量數據和視覺化工具(如波形和頻譜圖)來做出決策。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/EditAtlas/skills/tree/HEAD/skills/sound-design

在你喜歡的 AI 中提問

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

說明文件

音效設計:為完成影片添加真實音效

目標:讓影片聽起來像是由擁有良好音效庫的剪輯師所剪輯。每個音效都是來自 EditAtlas 的真實檔案,放置在您已檢視過的影格上,並以可量化說明的音量級別呈現。

整個過程中,有兩件事始終成立,請據此規劃:

  • 您無法聆聽。 您根據音效的描述和測量數據(sounds.py info)來選擇,使用 check.py 檢查放置位置和音量,並提供一個簡短的時刻清單供人員聆聽。切勿說某個音效「聽起來不錯」;請說明測量了什麼以及哪些部分仍需要耳朵判斷。
  • 您不得憑空創造。 僅針對人員提供給您的影片進行工作。如果沒有影片,請索取。如果某個時刻需要的音效不存在於圖書館中,請將其留為靜音並在報告中說明。

所有指令碼均位於 scripts/ 目錄下(需要 Python 3.9+、numpy、用於影格表的 Pillow、以及需在 PATH 中的 FFmpeg 與 ffprobe)。請在您自己的工作目錄(work/、result/)中執行它們,並傳入技能資料夾的路徑;切勿在人員的專案或此技能資料夾中寫入內容。

python SKILL/scripts/moments.py FILM.mp4 --out work/moments             # moments.json, sheet.png, overview.png
python SKILL/scripts/moments.py FILM.mp4 --at 10.4 --out work/at        # 在一個時間點前後每隔 0.1 秒的影格
python SKILL/scripts/sounds.py search "玻璃碰撞" --max-dur 2            # 從公開索引中獲取 ID
python SKILL/scripts/sounds.py info sfx-ID sfx-ID                       # 下載一次,SHA-256,測量數據
python SKILL/scripts/sounds.py sheet sfx-ID sfx-ID --out work/c.png     # 候選音效的波形+頻譜圖
python SKILL/scripts/mix.py work/cues.json --out result/FILM_sfx.mp4    # MP4 + _track.wav + _resolved.json
python SKILL/scripts/check.py result/FILM_sfx_resolved.json --moments work/moments/moments.json --listen-out result/listen.wav

音效來自 https://raw.githubusercontent.com/EditAtlas/sfx/main/ 並快取在 ~/.cache/editatlas-sfx 中(可透過 EDITATLAS_SFX_CACHE 變更路徑)。如果您有 EditAtlas/sfx 的本地克隆,請傳遞 --mirror PATH(在 sounds.py 的子命令之前),這樣就不需要下載。

1. 檢視影片及其聲音

執行 moments.py。它會報告現有的音訊(has_audio、LUFS、靜音所佔比例),並根據像素差異找出三種時刻:cut(場景切換)、move(動作開始或達到峰值)、land(動作停止:物體穩定下來)。然後使用 Read 工具開啟 overview.png 和 sheet.png:這些數據可能會遺漏柔和的動畫(例如,在靜止的臉孔上放大的徽章不會產生 cut),並會過度報告攝影機晃動。在關鍵處,使用 --at T 繪製某個時間點周圍的影格,找出物體出現、停止或轉變的精確影格。

決定影片原始音訊的處理方式:

您在數據中聽到的和看到的內容提示表設定
無音訊,或 silent_share 接近 1"keep_audio": false:音效支撐整部影片;將音量調整至約 -16 LUFS
僅有音樂"keep_audio": true:音效約低於音樂 3 LU;儘可能在節拍上放置重音
有人在說話(字幕、臉孔、領夾麥克風)"keep_audio": true, "under_voice": true:約低於人聲 8 LU;使用更少、更輕的音效
已混合在音軌中的合成嗶嗶聲詢問:替換它們需要分軌音源;在其上疊加真實音效會造成雙重效果

如果不確定是否保留影片的音訊,請詢問人員。

2. 根據您的觀察編寫事件列表

每個值得添加音效的時刻一行:時間、發生什麼事、何種音效。像剪輯師一樣思考:

  • 出現的東西(徽章、晶片、按鈕、標題卡):短促的爆裂聲、滴答聲或柔和的叮噹聲,anchor: start。
  • 移動穿越或轉場:一個呼嘯聲,其最響點落在到達時刻,anchor: peak。
  • 有重量的東西停下(標誌、產品、郵戳):在其停止的影格上使用撞擊聲或重擊聲,anchor: peak。
  • 螢幕上的真實物體(玻璃杯、冰塊、紙張、鑰匙、飲料):使用匹配的 Foley 音效,而非 UI 音效。
  • 成功/錯誤狀態:肯定的叮噹聲,否定的短促蜂鳴聲或警報聲。每部影片使用同一系列的介面音效。
  • 逐漸累積的過程:一個上升音效,其結尾落在回報時刻,anchor: end。

並非每個動作都需要音效。節奏和品味的量化規則寫在 references/taste.md 中;在撰寫首次提示表之前先閱讀它。

3. 選擇音效:閱讀、測量、比較

  1. 搜尋。如果 EditAtlas MCP 已連接,search_sfx 的排序效果更好(它也能理解越南語);否則使用 sounds.py search。標題故意避免使用其原始檔案中的詞彙(例如「相機快門」被稱為「鏡頭光圈滴答聲」),因此請根據聲音的本質進行搜尋,並嘗試同義詞和類別篩選器。
  2. 對 2-4 個候選音效執行 sounds.py info。閱讀:audible_s(實際可聽到的長度;檔案可能更長)、attack_s(0.0x = 瞬間爆發,0.3+ = 漸強)、peak_t_s、centroid_hz(低於 ~1500 為低沉,高於 ~6000 為明亮)、mono_loss_db(低於 -6 表示在手機上聲道會抵消;mix.py 隨後會播放較大聲的聲道)。
  3. 當兩個候選音效的數據相同時,使用 sounds.py sheet:尖銳的垂直線是點擊聲,模糊的痕跡是呼嘯聲,底部的能量代表重量。
  4. 根據移動的物體和它接觸的對象來選擇,然後根據長度:0.3 秒的晶片爆裂聲不能是 1.8 秒的卡通爆裂聲。使用 max_len 來截斷較長的檔案,並加上淡出效果。
  5. 同一種類型的重複時刻(例如三個晶片)應使用同一系列的不同版本(如 Tiny Plop 05、06、Empty Plop 06),而不是三次使用同一個檔案。

圖書館在某些方面還不夠豐富(測量日期 2026-11-07):沒有液體傾倒或嘶嘶聲、沒有環境聲、沒有郵戳聲、水滴和重擊聲也很少。請選擇最接近的真實音效,並在報告中說明缺口,而不是強行使用不合適的聲音。

4. 編寫提示表並進行渲染

{
  "video": "work/film.mp4",
  "keep_audio": false,
  "under_voice": false,
  "cues": [
    {"t": 0.30, "id": "sfx-988dafbd36", "role": "whoosh", "label": "標題落下"},
    {"t": 0.62, "id": "sfx-mi630472",  "role": "foley", "anchor": "start", "max_len": 0.9, "gain_db": -2, "label": "冰塊入杯"},
    {"t": 8.30, "id": "sfx-fs339114",  "role": "hit", "label": "瓶子著陸"},
    {"t": 0.00, "id": "sfx-c7d271e90f", "role": "ambience", "bed": true}
  ]
}
  • t 是時刻的影格時間(秒)。role 設定音量和預設錨點(參見 references/taste.md)。
  • anchor:start 將可聽到的起始點放在 t,peak 將最響點放在 t,end 將可聽到的結束點放在 t。
  • 每個提示的屬性:gain_db(相對於角色音量)、max_len、fade_in、fade_out、offset_in、pan(-1 到 1)。
  • "bed": true:在整部影片下方放置一個長而穩定的環境音,音量為 -54 dBFS(幾乎聽不到)。僅適用於音效獨立的影片;切勿放在人聲或音樂之下。如果影片很長,它會自行交叉淡入淡出。

執行 mix.py。它會列印每個音效的放置時間和峰值音量,並在時刻過早導致音效必須從檔案內部開始播放時發出提示。

5. 檢查、修正、再檢查

每次渲染後都執行 check.py;退出碼為 1 表示它標記了問題。它會讀取 mix.py 寫在 _resolved.json 旁邊的 WAV 音軌,因此當您複製結果時,請將這些檔案放在一起。它會根據自身波形在渲染音軌中找到每個音效,因此 sync 是真實的:任何偏離超過一個影格的時間點都是提示表中的錯誤。它還會測量每 10 秒的動作數、最長的空白間隔、強烈的撞擊聲、重複次數、數位靜音、主音量與真實峰值、單聲道折疊效果,以及有多少強烈的畫面時刻得到了音效。

對於每個標記的問題,要麼修正它(在空白處添加音效、更換重複的音效、移動提示點),要麼判斷它是正確的並在報告中說明原因(「7.8 秒的空白是說話段落,人聲可以覆蓋它」)。關於緩慢起音的備註是提示:如果該時刻是音效的峰值,則將該提示切換為 anchor: peak。進行兩到三輪的調整是正常的。

6. 交付

提供給人員:

  1. FILM_sfx.mp4 和 FILM_sfx_track.wav(僅音效,完整長度,可放在他們自己的剪輯下方)。
  2. 一個簡短的表格:時間、時刻、音效名稱和 ID、選擇該音效的原因。
  3. check.py 的數據(節奏、最長空白、LUFS、真實峰值)以及每個剩餘標記的含義。
  4. 聆聽清單(listen.wav 將這些時刻合併成一個檔案):「請用耳機和在手機上各聽一次」。
  5. 缺口:未被添加音效的時刻以及圖書館缺少的音效。

使用人員的語言撰寫報告。切勿聲稱您聆聽過。

可選:真實音效引擎

Clipwing 的 real-sfx 技能(MIT 授權指令碼,作者 Alexander Korbanov)使用更強大的引擎完成相同工作:類型化提示清單、合成層移除、節拍網格、9 軸評論。它可以將整個 EditAtlas 圖書館作為其主要音效包使用。請參閱 references/real-sfx.md 了解適配器和已驗證的內容。

相關技能