動画の音声
日付: 2026-10-22 · 種類: skill · 状態: 有効
概要: 動画の音声は、イベントのリスト(画面に現れたり消えたりぶつかったりする要素ごとに1つ)とコマンド som.py から生成されます。このコマンドは各エフェクトのピークを正しいフレームに合わせ、音楽をナレーションの下に収め、ミックスとレポートを出力します。音声はレンダリングを待つ必要はありません。アニメーションのタイミングが決まれば、すぐに処理できます。ミックスの数値は 06-metodo/regras.md が一元的に管理します。このスキルはそのメソッド、コマンド、主要テーブルを提供します。
使用するタイミング
- モーション、UI、チュートリアル、広告、音楽のみの動画で、同期エフェクトが必要なすべてのケース。
- ナレーション動画:ドライなボーカルを前面に、音楽を下に、エフェクトは控えめに。
- 人物や場所が「無音」に感じられる動画:シーン音(アンビエンスとフォーリー)。references/som-de-cena.md を参照。
- 音楽の加工:ビートとドロップの計測(
batida.py)またはボーカル分離(separar.py)。
メソッド
- 見えるアクションごとに1つの音、そして音はアクションを説明する。 カードが入る → ポップ、ボタン → クリック、画面切り替え → ウィッシュ、スタンプ → 打撃音、数字が回る → ロール。密度はアクション基準であり、単語基準ではありません。ナレーション下では最大2つのエフェクトが同時に鳴る程度に抑えます。
- 画像が動機づける音だけを入れる。 静止しているカットにウィッシュ、シーンに時計がないのに時計の音、上昇しないものにライザーは、音と映像を乖離させます。ミックスする前に映像を見て、何がいつ、どの素材で動くかをメモします。
- ピークはイベントのフレームに合わせる。 クリック、ポップ、スタンプ、インパクト:要素が接触するフレームにピーク。ウィッシュ:ジェスチャーの中間(開始から約0.2秒後。デフォルトマップがすでに調整済み)。ライザー:ドロップまたはカットで乾いた終わり。
- トーンはハイライト、トランジション、サプライズのみ。 インパクト、スタンプ、ロゴにコードヒット;大きなトランジションに短いパッド;明かしにベル。クリック、ポップ、キーには決して使わない(「小さな音楽」になり、耳障り)。
--tom(例:Am)は曲の調性が既知の場合のみ使用。 - 音楽は場面ごとに、敷き詰めない。 ソフトな開始、ドロップ前の減速、ブレス、バスドラムでのクライマックス。ナレーションがある場合、音楽はボーカルよりかなり下に抑え、ブレスや無音部分で上げます。
- ドロップ前のブレス。 ドロップ直前の最後のビートで、楽器を約0.3~0.5秒間ドライに落とします(
--drop Tで実現)。キーワードまたは最大の映像変化をドロップの最初のフレームに置きます。ドロップは目視ではなくbatida.pyで計測します。 - レイヤーはピーク時のみ。 ドロップ、ロゴ、クロージングで2~3の音を同時に。それ以外ではアクションごとに1音。同じ音が繰り返される場合は高さを変えます(マップがカテゴリ内のバリエーションを巡回)。
- ドライなボーカル。 ナレーションにはリバーブもエコーもなし。
- 分離したレイヤーで聴く。
som.pyはescuta/voz.wav、musica.wav、efeitos.wav、tonais.wavを出力します。同期の確認はミックスではなくエフェクトステムで行います。
主要数値
所有者: 06-metodo/regras.md。そちらに別の数値があれば、そちらが優先されます。Mesa はこれらの値を自動適用します。
| 対象 | 値 |
|---|---|
| ボーカルまたは音楽を含むマスター | −14 LUFS 統合、トゥルーピーク ≤ −1 dBTP(リミッター4倍) |
| ナレーション下の音楽 | 発話時 約15 dB下(レポートが計測、許容範囲12~18) |
| 実曲を使用したボーカルなしミックス | トラックを −19 LUFS にレベル調整後エフェクト;エフェクト ×2.2;リミッター;マスター −14 |
| シーン音のみの作品 | −25 LUFS 統合(上限 −24)、短期 ≤ −20、瞬間 ≤ −16、ピーク ≤ −3。決して −14 にノーマライズしない |
| ボーカル付きシーン音 | シーン音ステムはボーカルより ≥ 15 LU 下 |
| エフェクトライブラリ | 短いもの −20 LUFS 瞬間ピーク、アンビエント −24、ピーク ≤ −3 dBTP;配置 at = イベント − ピーク_ms/1000 |
| 同期 | エフェクトステムで中央値 ≤ 25 ms |
| ビート | beat_this、File2Beats(checkpoint_path="final0");ビートから最大2フレーム以内でカット |
ステップバイステップ
すべてのコマンドはスタジオのルートディレクトリから実行します。
- ライブラリは準備済みか?
05-biblioteca/som/sfx/catalogo.jsonが存在しない場合:uv run scripts/som/sintetizar_sfx.py。録音済みサウンド:uv run scripts/som/nivelar.py <パックのパス>(詳細は 05-biblioteca/som/README.md)。 - イベント。 アニメーションエンジンから
eventos.jsonをプロジェクトのaudio/フォルダにエクスポートします。形式、許可されるタイプ、After Effects / HyperFrames / Remotion からのエクスポート方法:references/eventos.md。 - ビートのある音楽?
uv run scripts/som/batida.py musica.mp3 --fps 30で BPM、強拍、推定ドロップを取得。このグリッドに合わせてカットをアニメーションします。 - 音楽のボーカルまたはインストが必要?
uv run scripts/som/separar.py musica.mp3(ボーカル+インスト)または--modo 6(6ステム)。 - ミックス:
出力:uv run scripts/som/som.py --eventos 04-projetos/<video>/audio/eventos.json \ --voz 04-projetos/<video>/audio/voz.wav --musica 04-projetos/<video>/audio/musica.wav \ --video 04-projetos/<video>/render/previa.mp4 --drop 12.4mix.wav、escuta/*.wav、relatorio-som.json、previa-som.mp4(画像はコピー、音声のみ変更)。 - レポートを読み、警告がなくなるまで修正。 「イベントに音なし」=マップが認識しないタイプ:既知のタイプに変更するか、イベントに
"som": "categoria"を追加するか、--mapaを記述(後述)。LUFS、ピーク、「ナレーション下の音楽レベル」が目標範囲外の場合もレポートに表示されます。 - シーン音は?
uv run scripts/som/verificar_som_de_cena.py <シーン音のみのミックス>または... escuta/efeitos.wav --voz escuta/voz.wav。不合格の場合は納品できません。 - 聴く。 音声付きプレビューはスタジオ所有者の承認を受けます。最終動画では、同じコマンドを
--video render/final.mp4で実行:リマックス処理のみで再レンダリングは不要です。
プロジェクト固有の音(--mapa)
MAPA = {タイプ: 関数(M, e)} を含む .py ファイルを作成し、指定したタイプのみデフォルトマップを上書きします。
# 04-projetos/<video>/audio/mapa.py
MAPA = {
"logo": lambda M, e: (M.poe("logo", e["t"], -11), M.poe("impacto", e["t"], -16), M.golpe(e["t"], -20)),
"moeda": lambda M, e: M.poe("sucesso/sucesso-2", e["t"], -14, st=3), # st = 半音上
}
マップで使用可能な Mesa の関数:M.poe(音, t, ゲイン_dB, pan, alinha="pico"|"ini"|"fim", st=半音, fim=長さ, fade=s, sala=True)、M.tonal(t, lufs)、M.golpe(t, lufs)、M.textura(t0, t1, lufs)、M.riser(t_pico)。音 はカテゴリ("whoosh":バリエーションを巡回)、ライブラリのファイル("whoosh/whoosh-2")、またはパスを受け付けます。
コマンド
| スクリプト | 目的 |
|---|---|
uv run scripts/som/som.py --eventos E.json [--voz V] [--musica M] [--video P.mp4] [--tom Am] [--drop T] [--mapa mapa.py] | フルミックス、レポート、音声付き動画 |
uv run scripts/som/sintetizar_sfx.py [--amostra prova.wav] | 初期合成ライブラリを生成 |
uv run scripts/som/nivelar.py PASTA [--categoria X] [--cama] [--destino D] | パックを標準化しカタログを更新 |
uv run scripts/som/verificar_som_de_cena.py MIX.wav [--voz VOZ.wav] | シーン音が大きすぎる場合に不合格(終了コード1) |
uv run scripts/som/batida.py MUSICA [--fps 30] [--json grade.json] [--video render.mp4] | ビート、強拍、BPM、ドロップ(beat_this) |
| `uv run scripts/som/separar.py MUSICA [--modo voz | 6] [--saida PASTA]` |
som.py のその他のオプション:--voz-entra、--musica-entra、--musica-de(セクションのアライメント)、--dur、--impacto T0 T1(音楽をボーカルレベルまで上げる)、--lufs、--pico、--fx -10(エフェクトのLUFSをボーカル基準で)、--saida。
batida.py と separar.py はAIを使用するため、追加パッケージが必要:uv sync --extra cpu(または NVIDIA GPU搭載時は --extra gpu)。モデルは初回使用時に自動ダウンロードされます(beat_this ≈80 MB;各分離モデル ≈300~700 MB、保存先 ~/.cache/estudio-ia/)。追加パッケージがない場合、インストール手順を表示して停止します。
よくあるエラー
| 症状 | 原因 | 対処 |
|---|---|---|
| シーン動画でエフェクトが「大きすぎる」 | シーン音が −14 にノーマライズされている | som.py はボーカルも音楽もない場合、自動的に −25 を目標にします。verificar_som_de_cena.py で確認 |
| ボーカルなし動画でエフェクトが音楽に埋もれる | マスタリング済みトラック(−8〜−11 LUFS) | Mesa がトラックを −19 にレベル調整しエフェクトを ×2.2 倍にします。それでも埋もれる場合はイベントの vol を大きく |
| ウィッシュのタイミングが「遅い」 | イベントがジェスチャーの終わりにマークされている | ジェスチャーの始まりにマーク。マップがピークを0.2秒後に設定 |
| 同じ音の繰り返しがロボットのように聞こえる | カテゴリにバリエーションが1つしかない | そのカテゴリにさらに音をレベル調整するか、--mapa で異なる st を使用 |
| レポート:「カテゴリが交換されました」 | ライブラリにそのカテゴリがない | sintetizar_sfx.py を実行するか、そのカテゴリを含むパックをレベル調整 |