カ字
カ点動画はビートに合わせ、解説動画は文字に合わせる。アニメーションコードを書くAIは音を聞けないため、視聴者が今何を見るべきかを推測するしかありません。
カ字はその順序を逆転させます:まず音声があり、次に映像があり、映像は常に音声に追従します。各文字が何秒目に発声されるかを先に計算し、動作がどのフレームに配置されるかを表から参照します。
この説明はあなた(AI)向けです。各ステップの詳細は docs/ にあり、必要なステップだけを読んでください。一度にすべてを読む必要はありません。
以下の tools/、starter/、docs/ はすべてこのスキル自身のディレクトリ内(このファイルと同じ階層)にあります。使用時は完全なパスに置き換えてください。
6つのステップ、4つの一時停止
| ステップ | 何をするか | 成果物 | 詳細 |
|---|---|---|---|
| 1 原稿作成 | 話し言葉で書き、各文に1つのキーワードを設定。ナレーション版と字幕版は分けて作成 | script.txt | docs/01_原稿作成.md |
| ⏸ 一時停止1 | 原稿をユーザーに確認してもらい、承認を得る | ||
| 2 ナレーション収録 | 各文を複数回生成し、別のAIが聞き返して採点、最良のものを残す | vo/lines/ | docs/02_ナレーション収録.md |
| ⏸ 一時停止2 | ユーザーにナレーション全体を試聴してもらう | ||
| 3 タイムライン生成 | アライメントモデルを使用して、各文字の開始時間と終了時間を割り当てる | timeline.json | docs/03_タイムライン生成.md |
| 4 映像制作 | 動詞を描画;アクションはキーワードの最初の文字の3フレーム前に配置 | コード+レンダリング | docs/04_映像制作.md |
| ⏸ 一時停止3 | まず20~30秒のサンプルをユーザーに確認してもらう | out/sample.mp4 | |
| 5 音響 | BGMはナレーションに譲る;効果音はアニメーションのキューから読み取る | ミックスされた音声トラック | docs/05_音響.md |
| 6 チェックと公開 | フレーム単位でカ字率、黒フレーム、フラッシュフレーム、ラウドネスを測定;タイトル、サムネイル、概要を準備 | out/final.mp4 とチェックレポート | docs/06_チェックと公開.md |
| ⏸ 一時停止4 | 完成品とチェックレポートをユーザーに引き渡す |
ユーザーが明確に「一時停止不要、そのまま完了して」と指示した場合は一時停止をスキップできますが、ステップ6のチェックは必ず実行し、結果を最終的な応答に含めてください。
ユーザーが既に録音済みのナレーションを持っている場合は、ステップ2をスキップし、ステップ3(timeline.py --whole)から開始します。
開始前の準備
python tools/doctor.pyを実行し、不足しているものを確認します。ナレーション収録とタイムライン生成は現在、Apple Silicon搭載のMacでのみテスト済みです;他のプラットフォームの場合は、ツールが提供する代替手段に従い、その旨をユーザーに伝えてください。- ユーザーに確認(まだ言われていない場合のみ):何について、誰に向けて、どのくらいの長さ、横長か縦長か、自分の音声サンプル(10秒程度のクリアな録音と文字起こし)があるか。
- プロジェクトディレクトリを作成します。構造は以下を参照。すべての中間ファイルは保持し、各バージョンのサンプルは個別に保存し、上書きしないでください。
プロジェクト/
script.txt 原稿(フォーマットは docs/01 を参照)
vo/ ナレーション:lines/ に各文の wav、takes/ に全テイク
timeline.json 各文、各文字の開始/終了時間
film/ 映像プロジェクト(デフォルトは starter/ の Remotion テンプレートを使用)
audio/ BGM、効果音、ミックス
out/ サンプル、完成品、チェックレポート
各ステップの最重要ルール
原稿作成(詳細は docs/01)
- 話し言葉で書く。句読点の間は22文字以内とし、長短の文を織り交ぜる。耳は一度しか聞けない。
- 各文には1つのキーワードのみを指定:
*キーワード*。映像はこのキーワードに合わせる。1つの字幕にキーワードは最大1つまで。 - 発音と字幕が異なる場合は
{発音=>字幕}と記述します。例:{F F M peg=>FFmpeg}。 - 文は完全な形で書く:主語、目的語、助数詞は省略しない;動詞は2文字以上を基本とし、単文字と複数文字を交互に使用;キーワードに単文字は使用しない。句読点は意味に基づいて配置(docs/01の句読点表を参照)。
- 読み間違えやすい多音字は原稿作成時に置き換えます(docs/02に代替表あり)。
- 作成後、
python tools/lint_script.py script.txtを実行します。これは、一文が長すぎる、字幕が長すぎる、一文に複数のキーワードがあるなどをチェックし、おおよその尺も推定します。
ナレーション収録
python tools/voice.py script.txt vo --ref 音声サンプル.wav:各文を4回生成し、音声認識でテキストに戻して原稿と比較、読み間違いを捨て、最良のものを残します。- 多音字や、別の意味に聞こえるものは認識結果に現れます;一致しない文は書き直すか発音を変え、無理に残さないでください。
- 全体的に少し速くしたい場合は
tools/tempo.py(速度変更、ピッチ不変)を使用し、再生成しないでください。 python tools/pace.py vo_fast vo_paced:ポーズを整えます。文頭・文末の無音、文内の句読点部分の無音を測定し、不足部分を補い、長すぎる部分をカットします。無音部分のみを操作し、音声部分は変更しません。tools/polyphone.pyは、読み間違える可能性のある多音字を抽出し、試聴用の音声を合成します;誤検出や見逃しもあるため、最終的には人間が確認します。
タイムライン生成
python tools/timeline.py script.txt vo_paced timeline.json --wav vo_paced/narration.wav --speech-gapを実行し、各文と各文字の開始/終了時間、およびキーワードリストを取得します。--speech-gapは、原稿のポーズを聞こえる無音と一致させます。- 映像内のナレーションに関連するすべてのタイミングは、このテーブルから参照します。文字数で推定してはいけません。文字数で推定すると、10文後には3秒以上の誤差が生じる可能性があります。
映像制作
- まず画風を決定します。迷った場合は、コードアニメーション画風図鑑 https://github.com/syydaniel/awesome-code-animation を参照し、画風を選んでからツールを選びます。特別な理由がない限り
starter/(Remotion)を使用します。 - 動詞を描画し、名詞を描画しないこと。「体積が大きくなる」を描画する場合、描画するのは「大きくなる」という動作であり、氷の挿絵ではありません。よく使われる動詞の描き方は docs/04 の表を参照。
- 時間定数(60fps時):アクションが完了するフレームは、キーワードの最初の文字の開始の3フレーム前に配置(
hit());許容範囲は6フレーム前から1フレーム後まで。新しく出現するものは、その最初のフレームをキーワードの少なくとも12フレーム前に配置します。 - キーワードの瞬間は、映像が明らかに多く動くようにします:1秒前よりも多く動くこと。常に動き続けている、または文の先頭で一度だけ動くだけでは、カ字できません。
- 1画面に新しく追加する情報は4ブロックまで;ナレーションで既に述べられた全文は画面に表示せず、キーワードのみを表示します。
- 作品全体を貫くもの(小さなキャラクター、色、形状)を見つけます;カメラはパン/ズームし、重要なポイントに追従します;2つの画面間は、可能な限り画面内の要素でつなぎます。
- 字幕:各字幕は16文字以内、句読点は削除;文字は実際に発声されたタイミングに合わせて薄くから濃く変化し、キーワードは色が変わります。
- 各パートができたら、短いセクションをレンダリングし、
tools/kazi_check.pyで測定してから次に進みます。
音響
- BGMはナレーションの12~18 LU下に配置;文字単位のタイムラインを使用してサイドチェーン:文の開始0.2秒前にBGMを下げ、文の間の無音が1.2秒を超えた場合のみBGMを戻します。
- 作品全体で2~4回、最も重要な文のためにBGMを完全に停止します。
- 効果音は映像のキュー(cue)からエクスポートし、4つのレイヤーに分類:ヒット、トランジション、アンビエント、フォーリー。音の質感は映像に合わせます。
- 完成品のラウドネスは -14 LUFS、トゥルーピークは -1 dBTP 以下、48 kHz。
チェック
python tools/kazi_check.py out/final.mp4 --timeline timeline.json:カ字率、ランダムベースライン、黒フレーム、フラッシュフレーム、長時間停止、ラウドネス、オーディオトラック、尺。- 不合格の場合は修正し、再測定します。すべて合格してからユーザーに連絡し、レポートの数字をそのままユーザーに伝えます。測定していないものについて「完了しました」とは言わないでください。
- ユーザーが4KやHDRを要求する場合、チェック合格後に:
tools/master.shで4Kマスターをレンダリング、tools/hdr/hdr_encode.shでドルビービジョン8.4とHLGを出力。色味を変更した場合は、新しい背景色と発光色をhdr_mask.pyに伝えます(docs/06_チェックと公開.md 参照)。
ツール一覧
| ツール | 用途 |
|---|---|
tools/doctor.py | 環境チェック、不足しているものとインストール方法を表示 |
tools/lint_script.py | 原稿をチェック |
tools/voice.py | 音声クローン、文ごとに収録、複数テイクから最良を選択 |
tools/tempo.py | 全体の速度変更、ピッチ不変 |
tools/pace.py | ポーズを整える:文頭・文末・文内句読点の無音を調整 |
tools/polyphone.py | 読み間違えやすい多音字を抽出し、試聴用音声を合成 |
tools/timeline.py | 文字単位のアライメント、timeline.json を生成;--whole は既存の録音全体用 |
tools/kazi_check.py | カ字率や各種問題を測定 |
tools/caption_check.py | 字幕の出現・消失・文字単位のハイライトとナレーションの同期を測定 |
tools/mix.py | ナレーション、BGM、効果音をミックス、文字単位のサイドチェーン、ラウドネス統一 |
tools/thin_cues.py | 効果音のキューが多すぎる場合、優先度でフィルタリング |
tools/master.sh | セグメントレンダリングによる4Kマスター作成、中断再開可能 |
tools/hdr/ | SDRマスターからHDRへの変換:ドルビービジョン8.4(HLGベースレイヤー)とHLG |
starter/ | Remotionテンプレート:time.ts で時間を参照、anim.ts でカーブとスプリング、字幕コンポーネント |
納品時にユーザーへ伝えること
- 完成品のパス、尺、解像度。
- カ字率、ランダムベースライン、ランダム比;同期できなかったキーワードとその理由。
- チェックで見つかった問題とその対処結果;未解決のものはその旨を直接伝える。