sound-effects について
Sound effectsは、Claude CodeやCodexのワークフローでモーショングラフィックス動画に音を付け、確認するスキルです。映像のキューにライセンス付き音源を割り当て、書き出し音声を測定し、ヘッドホンで確認する時刻を提示します。
主な機能
- 01映像キューを効果音カテゴリに対応
- 02内蔵音源と実行時取得音源を使用
- 03動画の用途に応じたライセンス確認
- 04カットやリビールを音楽の拍に同期
- 05書き出し音声の測定と検証
- 06キュー確認画像と出典クレジットの作成
活用シーン
- 01モーショングラフィックス編集への効果音追加
- 02カットやリビールを音楽の拍に同期
- 03動画公開前の効果音ライセンス確認
- 04書き出しのミックスレベルとキュー時刻の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ barty-bart/ motion-graphics --skill sound-effectsインストール後、Claude Code で/sound-effectsを入力して読み込まれたか確認します。
詳細
効果音
Claude は音を聞くことができません。そのため、このスキルは感覚で音を判断することはありません。すべての手順を計測し、ヘッドフォンで確認できるタイムスタンプを 5 つユーザーに提示します。「いい音です」とは決して言いません。
このアプローチは、Vox のサウンドパス用プロンプト(@Voxyz_ai, https://x.com/Voxyz_ai/status/2109358372873183564, 11 Oct 2026)に基づいています。このクレジットは必ず残してください。
デフォルトキット(最初に使用)
sfx/manifest.json の default_kit:主要カテゴリごとに 1 つ選んだ効果音です。Bart が耳で選びました(12 Oct 2026)。ユーザーが別のものを求めない限り、これを使用してください。
| カテゴリ | 音 | 入手元 |
|---|---|---|
| whoosh | qubodup の「Whoosh」 | 同梱の sfx/kit/whoosh.ogg(CC0) |
| click | adh.dreaming の「Classic Click」 | 同梱の sfx/kit/click.ogg(CC0) |
| pop | ethernel0 の「POP SFX Neutral」 | 同梱の sfx/kit/pop.ogg(CC0) |
| riser | 「Cinematic Riser #3 subtle」 | 同梱の sfx/kit/riser.ogg(CC0) |
| impact | peoplearehappy の「soft_impact3」 | 同梱の sfx/kit/impact.ogg(CC0) |
| tick | Squirrel_404 の「Click / Tick」 | 同梱の sfx/kit/tick.ogg(CC0) |
| typing | Mixkit「Fast laptop keyboard typing」(#1392) | 実行時にダウンロードし、<out>/sound-effects-cache/ に保存(Mixkit ライセンス:コミットしないでください) |
マニフェスト内のその他の項目は代替音です(alt_categories に、相互に代用できるカテゴリが記載されています)。クレジットについては TOP-PICKS.md を参照してください。
ルール
- コードで音楽や効果音を合成しないでください(オシレーターや正弦波のビープ音も不可)。実際に録音されたファイルを使用してください。
- 効果音には、まず同梱ライブラリを使用してください。
sfx/manifest.jsonには、各ファイルのカテゴリ、長さ、入手元、ライセンスが記載されています。同梱ファイルはすべて CC0 です。 - 同梱ライブラリに適した音がない場合は、マニフェストの
runtime項目(Mixkit)を使用してください。ユーザーのプロジェクトにダウンロードし、このスキルのフォルダーには保存しないでください。また、コミットもしないでください。Mixkit の音源は動画での使用は許可されていますが、単体での再配布は許可されていません。 - **音楽:**ユーザーから提供されたトラック、または
MUSIC.mdにあるトラック(雰囲気に合わせたおすすめの無料トラック。実行時にダウンロードし、コミットしないでください)を使用してください。音源とライセンスをSOUND.mdに記載してください。ユーザーがトラックを持っていない場合は、動画に合うものをMUSIC.mdから 2~3 曲提案し、選んでもらってください。 - **ライセンス:**無料かつ安全とみなすのは CC0 と Mixkit Free License のみです。スクリプトは配置するすべての音を確認します。ライセンスを音ごとに列挙する必要はありません。すべて確認できている場合は、音源の提供元による表記が CC0 または Mixkit Free License であること、提供元が条件を変更する場合があるため、ときどき提供元のページを確認することを、ユーザーに一度だけ伝えてください。スクリプトがライセンス不明と報告した場合は、その音の正確な名前、ライセンス、提供元へのリンクを示し、確認または差し替えが済むまでは公開しないよう伝えてください。ライセンス不明の音を、おそらく問題ないと説明してはいけません。
- **音楽のライセンス:**トラックの入手元を尋ね、
--music-source "track, artist, link"と--music-license "..."を渡してください。これらがない場合、実行結果では音楽が LICENCE NOT CONFIRMED と表示されます。その旨を明確に伝えてください。 - **クレジット:**実行するたびに
CREDITS.txtが作成され、実際に使用した音と音楽の一覧が、貼り付けて使える形で記載されます。一度だけおすすめしてください。YouTube、Instagram、TikTok の説明欄に任意で使えます。CC0 ではクレジット表記は不要ですが、プラットフォームが音声に問題を指摘した場合に、入手元を示す証拠になります。 - 中間 WAV ではなく、書き出した MP4 を計測してください。
- 中間 WAV ではなく、書き出した MP4 を計測してください。
0. ライセンスの確認(編集時、書き出し前)
提供元の利用条件は変更されるため、最終書き出しの前に毎回、この動画で実際に使用するものについて、最新の利用条件を確認してください。
- 用途。 すでに明らかな場合(たとえば「自分のYouTube動画」)を除き、動画をどこで公開するかを確認します。YouTube、Instagram、TikTok、その他のソーシャルメディア、オンライン広告、ポッドキャスト、クライアント案件、テレビやラジオの放送、ビデオゲーム、CDやDVD、または他の人が使うテンプレートやツールなどがあります。
--use-case "..."として渡し、SOUND.mdに記録されるようにします。 - 提供元。 この動画で使用する各提供元(
CREDITS.txtに記載された提供元と音楽)について、現在のライセンスページを開き(ウェブ取得。サイトがブロックする場合はユーザーのブラウザーを使用)、次の2点を確認します。利用条件が下表の記載どおりであること、そして用途が許可されていること。Freesound の場合は、実際に使用する各サウンドのページを開き、引き続き Creative Commons 0 と記載されていることを確認します。音楽については、トラックのページを開きます。 - 簡潔に報告します。 提供元ごとに1行で、「本日確認:Mixkit Stock Music Free License、変更なし、YouTubeで使用可能。」のように記載します。提供元の利用条件が変更されている場合、または用途が許可されていない場合は、該当するサウンドやトラックを具体的に示し、その理由を説明してから、書き出し前に差し替えます。ライセンスを確認していない場合や内容が不明確な場合に、問題ないと判断してはいけません。
| 提供元 | ライセンスページ | 許可される用途(2026年10月13日確認) | 許可されない用途 |
|---|---|---|---|
| Freesound、CC0 | サウンド自体のページ | あらゆる用途、クレジット表記不要 | なし(CC-BYではクレジット表記が必要です。CC-BY-NCは商用利用しないでください) |
| Kenney | kenney.nl のパックのページ | あらゆる用途(CC0) | なし |
| Mixkit sound effects | https://mixkit.co/license/#sfxFree | ウェブ、ソーシャルメディア、ポッドキャスト、ゲーム、映画、CD/DVD、テレビ/ラジオ | ファイル単体、またはツールやテンプレート内での再配布。権利管理サービスへの登録 |
| Mixkit music | https://mixkit.co/license/#musicFree | YouTube、ソーシャルメディア、オンライン広告、ポッドキャスト、教育 | CD/DVD、テレビ/ラジオ、ビデオゲーム、リミックス、Content IDへの登録 |
Mixkitはファイルを「ツールやテンプレート内で」再配布することを禁じています。そのため、このスキルではMixkitのサウンドや音楽を保存しません。実行時にユーザーのプロジェクトへダウンロードします。
1. セットアップ
ffmpeg と Python 3.10 以降が必要です。削除できるフォルダーにインストールします。
python3 -m venv .sound-effects
.sound-effects/bin/pip install librosa soundfile numpy scipy matplotlib
2. キューリストの作成
ffprobe で動画の長さとfpsを確認します。サウンドが必要なすべてのタイミングをリストにします。可能であれば、コンポジションのソース(HyperFrames/Remotion のタイムライン、GSAP のラベル、motion-broll の plan.json)から取得します。それ以外の場合は、ffmpeg -i in.mp4 -vf "select='gt(scene,0.3)',showinfo" -f null - でシーンのカットを検出します。
cues.json を [{"t": 2.0, "type": "scene_cut", "desc": "cut to card"}, {"t": 4.2, "type": "typing", "dur": 1.3, "desc": "..."}] として作成します。
キューの種類は、ライブラリのカテゴリ(マニフェスト内の category_map)に対応しています。
| キューの種類 | カテゴリ | 備考 |
|---|---|---|
| movement(スライド、カメラ移動) | whoosh | 2フレーム早く開始します。動きに合う長さを選びます |
| scene_cut | whoosh | 短いwhooshを2フレーム早く再生します(代わりに transition サウンドも使えます) |
| appear | pop | 該当フレームで再生します |
| click | click | 該当フレームで再生します |
| typing | typing | dur に合わせてループ/トリミングし、音量を抑えます |
| build_up | riser | 次のヒットで終わるようにします |
| reveal | impact | SFXの中で最も大きな音量にします |
| success | pop | (代わりに ding サウンドも使えます) |
| error_or_tech | glitch | |
| hover_or_small_ui | tick | 音量をかなり抑えます(代わりに ui-blip や click も使えます) |
| bed | ambience | すべての音の下に敷きます。任意です |
各キューにはサウンドを1つ使います。同じサウンドの繰り返しが機械的に聞こえないよう、同じカテゴリ内でテイクを変えます。
3. ビートグリッドと確認
librosa.beat.beat_track を実行します。librosa が裏拍を検出することがあります。 音楽を120 Hz未満でローパスし、最初の4小節についてビートラインと重ねてプロットし、キックがどこに来るかを比べます。キックがライン上に来ない場合は、オフセットの中央値でグリッド全体をずらし、もう一度プロットします。beatgrid.png をユーザーに提示します。
4. 大きな動きはビートに合わせます
ハードカットや見せ場はビートに合わせます。アニメーションのタイミングを変更できる場合は、変更してください。変更できない場合は、音楽の開始位置をずらします(開始位置を検索し、カットとビートの誤差が最小になるものを選びます)。各カットの誤差をミリ秒単位で報告してください。
5. 効果音を配置してミックスします
優先順位:ナレーション > 効果音 > 音楽。 音楽は効果音の下で約 -12 dB に設定し、ナレーションがある箇所では 8~12 dB 下げます。 統合ラウドネスは約 -16 LUFS、トゥルーピークは -4 dBFS 未満を目標にし、AAC 圧縮後やスマートフォンのスピーカーでクリッピングしないようにします。書き出して測定し、ゲインを調整するかリミッターを追加してから、もう一度書き出して測定します:
ffmpeg -nostats -i after.mp4 -af ebur128=peak=true -f null - 2>&1 | tail -12
ffmpeg -nostats -i after.mp4 -ac 1 -af ebur128=peak=true -f null - 2>&1 | tail -12 # mono check
6. 検証します
各キューについて、書き出した MP4 からキューの直前と直後のフレームを 1 枚ずつ取得し、その前後の波形をプロットします(checks/cue-XX.png)。次に、リスクの高いタイムスタンプを 5 つ選び(ビートとの誤差が最大のもの、タイピングやライザーなどの長い音、見せ場)、ヘッドフォンで確認できるようユーザーに共有します。
オリジナル品質のファイル
同梱されている効果音は、圧縮された OGG Vorbis のプレビュー版です(トリミング、ノーマライズ済み、多くはモノラル)。ほとんどの動画ではこれで十分です。音質が用途に合わない場合(聞き取れるアーティファクトがある、クローズアップの主役となる効果音、最終マスターなど)は、オリジナルを取得してください:
sfx/manifest.jsonでエントリーのsource_urlを確認します。同梱されているすべてのエントリーとdefault_kitの各エントリーに、source_urlがあります。- Freesound(
freesound.org/people/<user>/sounds/<id>/):オリジナルはそのページの Download ボタンからダウンロードできます。無料の Freesound アカウントが必要なため、ユーザーにダウンロードを依頼するか、ユーザーから API キーを提供された場合はそれを使用します。 - Kenney(
kenney.nl/assets/<pack>):そのページからパックの ZIP をダウンロードします。マニフェストにある各 Kenney エントリーのoriginal_fileは、正確なファイル名を示しています(例:kenney_interface-sounds.zip → Audio/click_001.ogg)。ルール:プレフィックスを削除し(kenney-interface-→ interface-sounds、kenney-ui-→ ui-audio、kenney-digital-→ digital-audio、kenney-impact-→ impact-sounds、kenney-sci-→ sci-fi-sounds)、その後に続く部分をAudio/内で大文字・小文字を区別せずに照合します。-は_として扱います(kenney-digital-phaserup1→Audio/phaserUp1.ogg、kenney-impact-impactpunch-heavy-000→Audio/impactPunch_heavy_000.ogg)。Kenney のオリジナルも OGG ですが、加工されていません。 - オリジナルはユーザーのプロジェクト内(例:
sound-effects-cache/originals/)に保存し、このスキルフォルダーには絶対に保存しないでください。また、--swapsを使ってスクリプトにファイルを渡すか、マニフェストのコピーを編集してください。同梱ファイルと同じトリミングと音量を適用します。
さらに効果音を探す
ユーザーが別の効果音や追加の効果音を求めた場合は、以下のソースを検索し、候補を3~5個、それぞれリンク、制作者、ライセンスとともに提案して、ユーザーに選んでもらいます。使用する前に、そのページを開き、現在表示されているライセンスを確認したうえで、ユーザーの用途で使用できることを確かめ(ステップ0)、CREDITS.txtに追加してください。効果音はライセンスで認められた範囲内でのみ使用または再配布してください。音楽については、MUSIC.mdを参照してください。
| ソース | 検索 | ライセンスに関する注意 |
|---|---|---|
| Freesound | https://freesound.org/search/?q=<words>&f=license:"Creative Commons 0" | CC0フィルターを使用してください。CC0は同梱でき、クレジット表記も不要です(ただし、クレジット表記を推奨します)。CC-BYは動画の説明欄にクレジット表記が必要です。CC-BY-NCは同梱せず、商用利用もしないでください。 |
| Kenney | https://kenney.nl/assets/category:Audio | すべてCC0です。自由に使用、同梱できます。 |
| Mixkit | https://mixkit.co/free-sound-effects/<category>/(例:whoosh、typing) | Mixkit SFX Free License:収益化する動画を含め、動画での使用に問題ありませんが、再配布は禁止です。実行時にユーザーのプロジェクト内にのみダウンロードし、コミットまたは同梱しないでください。 |
| Pixabay | https://pixabay.com/sound-effects/search/<words>/ | 動画ではクレジット表記なしで使用できますが、単独での再配布は禁止です。ユーザーがブラウザーでダウンロードし、同梱しないでください。 |
| Sonniss GDC bundles | https://sonniss.com/gameaudiogdc/ | 動画ではロイヤリティーフリーで使用できます。素材そのものの再配布やAIのトレーニングは禁止です。ローカルでのみ使用してください。 |
| YouTube Audio Library | YouTube Studio → Audio Library | YouTube動画にのみ使用できます。Studio内でのみ利用可能です。同梱しないでください。 |
このリポジトリのsfx/フォルダーに追加できるのはCC0の効果音のみです。各効果音について、マニフェストにエントリー(file、category、duration、source_url、licence、attribution)を追加し、LICENSES.mdにも行を追加してください。
スクリプト
scripts/sound_pass.pyはステップ3~6をエンドツーエンドで実行します:
.sound-effects/bin/python scripts/sound_pass.py --video silent.mp4 --cues cues.json \
--music track.mp3 --manifest sfx/manifest.json --out out/
確認後に--use-case "..."と--music-source/--music-licenseを追加します。after.mp4、report.html、SOUND.md(ライセンス確認、ログ、キュー→ファイルの表、LUFSとピーク値、5つのタイムスタンプ)、CREDITS.txt、beatgrid.png、checks/を出力します。ログを確認し、目標値を超えているものを修正してください。アニメーションのタイミングを変更した場合は、先に再レンダリングしてください。
7. レポートで差し替え
sound_pass.pyはreport.htmlも書き出します。各キューについて、タイムスタンプ、カテゴリ、使用した効果音(再生ボタン付き)、ソースページ、ライセンス、クレジットに加え、同じカテゴリの代替候補(それぞれ再生ボタン付き)と「モデルに選ばせる」オプションを一覧表示します。ユーザーに開いてもらってください。ユーザーが選択してDownload swaps.jsonをクリックしたら、--swaps swaps.jsonを指定して再実行します。"auto"は、代替候補から別の効果音を選ぶことを意味します。実行間でキューのインデックスを維持してください。
ユーザーへの報告
ライセンス確認の結果(すべて確認済みか、確認できていない効果音がある場合は名前ごと)、用途とその用途で使用可能かどうか、音楽のソースとライセンス(または未確認であること)、必要であればCREDITS.txtがあること、ビートグリッドの結果(ずらしたかどうかと、ずらした場合はその量)、ビートに合わせたカットの誤差、最終的なLUFSとトゥルーピーク(ステレオとモノラル)、および5つのタイムスタンプを伝えてください。音が良いとは伝えないでください。