소스 정보
- 저장소
- minicoohei/ai-agent-camp
- 최근 소스 활동
- 2026년 4월 15일 06:16
- 감지된 SKILL.md 언어
- 일본어
- 스타
- 346
- 포크
- 12
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/minicoohei/ai-agent-camp --skill narration-qa명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Slack検索・TODO抽出・タスク管理を行うサブエージェント。 複数データソースからタスクを抽出し、優先順位付けを行う。 「Slackを検索」「タスクを抽出」「TODO確認」「メンション確認」等のリクエストで発動。
BigQuery/Snowflake接続、EDA、可視化、Marimoノートブック作成を行うサブエージェント。 データ分析関連の4つのルール(data_analysis, visualization, notebook, marimo_variable_naming)を統合。 「データ分析して」「BigQueryに接続」「EDAを実行」「Marimoで分析」等のリクエストで発動。
Remotionコンポジションを20項目チェックリストで品質レビューする。 「動画レビュー」「motion review」「Remotion品質チェック」等のリクエストで発動。
SOC 직업 분류 기준
SKILL.md 표시 중
| name | narration-qa |
| description | ElevenLabsで生成したナレーション音声の品質を自動検証するスキル。 「ナレーションチェック」「音声確認」「発音チェック」等のリクエストで発動。 |
| triggers | ["ナレーションチェック","音声確認","発音チェック","narration-qa","ナレーション品質検証","TTS検証"] |
ElevenLabsで生成したナレーション音声の品質を自動検証するスキル。 ナレーション生成時は必ずこのスキルのフローに従うこと。
英語をそのまま残すとElevenLabsが誤読する。全英語を日本語表記に変換してから生成する。
| ルール | 例 |
|---|---|
| 定着カタカナがあればそれを使う | GitHub→ギットハブ, Slack→スラック, Gmail→ジーメール, Google Drive→グーグルドライブ |
| カタカナ音写が不自然→日本語に意訳 | TODO→タスク, workflow→ワークフロー |
| ブランド名はカタカナ | Claude Code→クロードコード(中黒なし), LINE→ライン |
| 略語はひらがな読み | AI→えーあい, PMO→ぴーえむおー, PPTX→パワーポイント |
| 固有名詞が誤読される場合→一般語に置換 | Claude Code→AIエージェント, GitHub Actions→自動ワークフロー |
全文ひらがな化はTTSモデルを壊す。 PersonalPMODemo v3の実験で、以下が確認された:
ぴーえむおー → ElevenLabsが「ピアノ」と発音えーあい → 「Eoi」と発音正しいアプローチ: 自然な漢字かな混じり文をベースに、既知の誤読漢字のみをひらがな化する。
ElevenLabs eleven_multilingual_v2 は特定の漢字を誤読する。以下のパターンに該当する漢字のみひらがなに置換する。それ以外の漢字はそのまま残す。
| 誤読パターン | 原因 | 対策 |
|---|---|---|
| 返信→阪神 | 音が近い漢字に化ける | 「へんしん」にひらがな化 |
| 受信→閉める | 漢字誤読 | 「届いた」等の平易な表現に言い換え |
| 議事録→石立 | 漢字誤読 | 「ぎじろく」にひらがな化 |
| 各→夫は | 単漢字の誤読 | 「それぞれの」に言い換え |
| 即座に→危機座に | 漢字誤読 | 「すぐに」に言い換え |
| 承認→チョンキン | 中国語発音混入 | 「しょうにん」にひらがな化 |
| 税理士→推理師 | 中国語発音混入 | 「ぜいりし」にひらがな化 |
| 成果→成功 | 類似音 | 「せいか」にひらがな化 |
| マッキンゼー→松銀瀬 | 固有名詞の崩壊 | 「コンサル」等の一般語に言い換え |
原則: 上記テーブルに該当する漢字のみひらがな化。それ以外は自然な漢字かな混じり文のまま残す。自然な漢字かな混じり文 > 安全のために全ひらがな化(TTSモデルが壊れるため)。
漢字を見つけた
→ 上記の誤読リストに該当する → ひらがな化する
→ リストにないが不安
→ ElevenLabsで1クリップだけテスト生成 → Gemini検証
→ 誤読あり → ひらがな化 or 平易な表現に言い換え → リストに追記
→ 問題なし → 漢字のまま残す
→ リストにない+一般的な漢字 → 漢字のまま残す(過剰ひらがな化しない)
数字は全てひらがなで書く:
7つの → ななつの8種類 → はっしゅるい12,800円 → いちまんにせんはっぴゃくえん95% → きゅうじゅうごパーセント| NG | 理由 | OK |
|---|---|---|
| 英語をそのまま残す | ElevenLabsが誤読 | 全てカタカナ/ひらがな化 |
| 「トゥードゥー」「クロード・コード」 | 日本語として不自然 | 「タスク」「クロードコード」 |
| 同一用語の表記揺れ | 混乱 | 統一表記 |
| 1文が長すぎる | 早口/尺超過 | 7文字/秒を目安に分割 |
原稿テキストに以下がないことを確認:
voice_settings = {
"stability": 0.70, # 0.75以上だと棒読み感
"similarity_boost": 0.80,
"style": 0.10, # 0.15以上だと抑揚過多
"use_speaker_boost": True
}
model_id = "eleven_multilingual_v2"
# 各セグメントの尺を確認
for f in data/narration/s*.mp3; do
dur=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$f")
echo "$f: ${dur}s"
done
ratio = audio_duration / scene_window を計算ffmpeg -af "atempo={ratio}" で速度調整生成後、必ず全セグメントをGemini Flashで書き起こし検証する。省略不可。
from google import genai
import json, os, time
client = genai.Client(api_key=os.environ.get("GEMINI_API_KEY"))
with open("data/narration_script.json") as f:
segments = json.load(f)
results = []
for seg in segments:
sid = seg["id"]
audio_file = client.files.upload(file=f"data/narration/{sid}.mp3")
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents=[
"この日本語音声を正確に書き起こしてください。句読点も含めて。テキストのみ返してください。",
audio_file
]
)
transcription = response.text.strip()
# 原稿と照合
print(f"{sid}:")
print(f" Script: {seg['text']}")
print(f" Heard: {transcription}")
results.append({"id": sid, "script": seg["text"], "heard": transcription})
time.sleep(1)
# 結果をJSONに保存
with open("data/narration_qa_results.json", "w") as f:
json.dump(results, f, ensure_ascii=False, indent=2)
print(f"\nQA results saved to data/narration_qa_results.json")
モデル選択: gemini-3-flash-preview を使用(2.0/2.5 Flash より日本語音声認識精度が大幅に向上)。
| 深刻度 | 条件 | 対処 |
|---|---|---|
| Critical | 意味が完全に変わる(返信→阪神、議事録→石立) | 原稿のひらがな化 → 再生成 → 再検証 |
| Major | 固有名詞が別の単語に化ける(クロードコード→黒度思うこと) | 表現を言い換え → 再生成 |
| Minor | 音は近いが漢字表記が異なる(同期→登記、成果物→性格物) | Gemini STTの限界。人間の耳で許容範囲ならOK |
| Pass | 書き起こしと原稿の意味が一致 | そのまま使用 |
Gemini検証でNGが出た
→ Critical(意味が変わる)
→ 原稿のひらがな化 or 言い換え → 再生成 → 再検証
→ 2回目もNG → 文章構造自体を大幅に書き直す → 再生成 → 再検証
→ 3回目もNG → そのセグメントを削除 or シーンからナレーションを外す
→ Major(固有名詞崩壊)
→ 一般語に置換(例: クロードコード→AIエージェント)→ 再生成 → 再検証
→ Minor(漢字表記が異なるだけ)
→ Gemini STTの限界の可能性あり。実音声を聴いて許容範囲なら Pass とする(自動Passにしない)
→ Pass → そのまま使用
最大3ラウンド。3回でもCriticalが残るなら該当セグメントのナレーションを諦める。
| トラック | volume | 備考 |
|---|---|---|
| ナレーション | 1.5 | メインコンテンツ。BGMより明確に大きく |
| BGM | 0.06 | ナレーションの邪魔をしない。存在感は感じる程度 |
| BGM (ナレーションなし区間) | 0.15 - 0.20 | Opening/Closingなどナレーションがない区間はBGMを上げてOK |
判定: 実音量比でナレーションがBGMの4倍以上であること。
ffmpeg amix は入力をN分割して正規化するため、volume設定が無視される。
必ず amerge + pan を使うこと。
# ナレーション全体をタイミング配置
# (adelay で各セグメントを配置 → amerge で結合)
# 動画 + BGM + ナレーションを一発ミックス (amerge + pan)
ffmpeg -y \
-i out/video.mp4 \
-i data/bgm.mp3 \
-i data/narration_mix.mp3 \
-filter_complex "\
[1:a]volume=0.06,afade=t=out:st={total-4}:d=4[bgm];\
[2:a]volume=1.5[narr];\
[bgm][narr]amerge=inputs=2,pan=stereo|c0=c0+c2|c1=c1+c3[out]" \
-map 0:v -map "[out]" -c:v copy -shortest \
out/video_narrated.mp4
amix vs amerge の違い:
amix=inputs=2: 各入力を ÷2 に正規化 → BGM 0.06×0.5=0.03, ナレーション 1.5×0.5=0.75 → 比率は保つが全体音量が低下amerge + pan: 正規化なし。volume値がそのまま反映される → 意図通りの音量バランス| Seg | Script (先頭30字) | Gemini書き起こし (先頭30字) | 判定 | 対処 |
|-----|-------------------|---------------------------|------|------|
| s00 | えーあい パーソナル... | AIパーソナル... | Pass | — |
| s03 | メッセージからタスクを... | メッセージからタスクを... | Pass | — |
| s06 | 閉めるを確認し... | 届いたメールを確認し... | NG | ひらがな化→再生成 |
ELEVENLABS_API_KEY in .envGEMINI_API_KEY in .envgoogle-generativeai パッケージ(uv add --user --break-system-packages google-generativeai)data/
narration_script.json # ナレーション原稿(タイミング付き)
narration/s00.mp3 # 各セグメントの生成音声
narration/s00_fit.mp3 # 速度調整済み音声
narration_mix.mp3 # ナレーション全体ミックス
audio_final.mp3 # BGM + ナレーション最終ミックス
bgm.mp3 / bgm_extended.mp3 # BGM
narration_qa_results.json # Gemini検証結果ログ