Markdownで台本を書くだけで、やる夫・やらない夫が掛け合いする解説動画(MP4)を自動生成するツール。
- Markdown台本 → 動画: シンプルなMarkdown形式で台本を書くだけ
- Marpスライド対応: プレゼンスライドを背景に表示
- VOICEVOX音声合成: 無料の音声合成エンジンで自然な読み上げ
- AAキャラクター: 2chの人気キャラクター(やる夫・やらない夫)を表情豊かに表示
- 感情表現: セリフごとに感情タグで表情を切り替え
Claude Codeを使用する場合、「〇〇について解説動画を作って」のようにテーマを伝えるだけで、スライド・台本作成からレンダリングまで一括で依頼できます。
詳細は CLAUDE.md を参照してください。
Note: 動作保証はしません。生成結果は適宜確認・修正してください。
- Node.js 18以上
- Chromium (Marp CLIのPNG生成に必要)
- VOICEVOX (音声合成エンジン)
- ffmpeg (動画レンダリングに必要)
# Chromium依存ライブラリ
sudo apt-get update && sudo apt-get install -y \
libnspr4 libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 \
libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 \
libxrandr2 libgbm1 libasound2t64
# Chromium (Marp CLIのPNG生成に必要)
sudo apt install chromium-browser
# ffmpeg (Remotionのレンダリングに必要)
sudo apt install ffmpegVOICEVOX公式サイトからダウンロード。
# 起動
cd ${VOICEBOX_DIR}/VOICEVOX/vv-engine
./run # http://localhost:50021 でAPIが利用可能git clone https://github.com/3kz2501/AA.md2vid.git
cd AA.md2vid
npm installVOICEVOXを起動してください。デフォルトで http://localhost:50021 でAPIが利用可能になります。
input/manuscripts/ に台本ファイル(Markdown)を作成します。
---
title: やる夫で学ぶ〇〇
bgm: bgm/example_bgm.mp3
slides: slides/example.md
characters:
- name: やる夫
voiceId: 3
direction: left
- name: やらない夫
voiceId: 13
direction: right
pronunciations:
"API": "エーピーアイ"
"JSON": "ジェイソン"
---
@slide 1
[やる夫] 最初のセリフだお。
[やらない夫:explain] 説明するセリフだ。
@slide 2
[やる夫:surprised] 驚きのセリフだお!
[やらない夫:thinking] 考えながら話すセリフだな。テンプレートは input/manuscripts/_template.md を参照してください。
input/slides/ にMarp形式のスライドを作成します。
---
marp: true
theme: default
paginate: true
style: |
section {
font-size: 24px;
}
---
# スライド1: タイトル
- ポイント1
- ポイント2
---
# スライド2: 詳細
詳細な説明...Marp CLIでスライドをPNG画像に変換します。
Note: Marp CLIは絶対パスが必要です。
npx @marp-team/marp-cli --no-stdin "$(pwd)/input/slides/example.md" --images png -o "$(pwd)/input/slides/example/slide.png"出力: input/slides/example/slide.001.png, slide.002.png, ...
- 出力されたPNG のスライド番号を台本の中で関連する会話の手前に
@slide1のように記載すると画面中央にスライドが表示されます。
# プリプロセス(台本パース + 音声生成)
npm run preprocess -- --manuscript exampleプリプロセスの処理内容:
- 指定した台本(
input/manuscripts/example.md)をパース - VOICEVOXで各セリフの音声ファイルを生成(
public/voices/) - スクリプトデータを出力(
src/data/script.ts)
Note: 台本が1つだけの場合は
--manuscript省略可。_で始まるファイル(テンプレート等)は自動選択から除外されます。
重要: プリプロセスは プレビュー(studio)・レンダリング(render)の両方で必須 です。台本を変更した場合も再度プリプロセスが必要です。
# プレビュー(Remotion Studio)
npm run studio
# → ブラウザで http://localhost:3000 が開く
# 動画レンダリング
npm run render
# → out/video.mp4 に出力studio / render はどちらも preprocess で生成されたデータを使用します。 別の台本に切り替えたい場合は、先に preprocess を実行してください。
# GPU エンコード + 並列処理
npx remotion render Video out/video.mp4 --hardware-acceleration=if-possible --concurrency=8
# 出力ファイル名を指定
npx remotion render Video out/my_video.mp4npm run build
buildはparse-mlt → preprocess → renderを順に実行します。台本が複数ある場合は最初に見つかったものが使われます。
---
title: 動画タイトル
bgm: bgm/bgm_file.mp3 # BGMファイル(public/配下)
slides: slides/slide_file.md # スライドファイル
characters:
- name: やる夫
voiceId: 3 # VOICEVOX話者ID
direction: left # 画面配置(left/right)
- name: やらない夫
voiceId: 13
direction: right
pronunciations: # 読み替え辞書
"難読語": "読み方"
---[キャラ名] 通常のセリフ
[キャラ名:感情] 感情指定付きセリフ@slide 1
[やる夫] このセリフはスライド1の上で表示されるお。
@slide 2
[やらない夫] ここからスライド2だ。| タグ | 説明 |
|---|---|
normal |
通常(デフォルト) |
happy |
喜び |
sad |
悲しみ |
cry |
泣き |
angry |
怒り |
surprised |
驚き |
troubled |
困惑 |
shy |
照れ |
grit |
歯を食いしばる |
dead |
死んだ目 |
wink |
ウインク |
| タグ | 説明 |
|---|---|
normal |
通常(デフォルト) |
explain |
説明 |
happy |
喜び |
happy2 |
喜び2 |
sad |
悲しみ |
despair |
絶望 |
angry |
怒り |
thinking |
考え中 |
question |
疑問 |
pointing |
指差し |
waving |
手を振る |
arms_crossed |
腕組み |
casual |
カジュアル |
AA.md2vid/
├── input/
│ ├── manuscripts/ # 台本(Markdown)
│ ├── slides/ # スライド(Marp MD + 生成PNG)
│ └── images/ # 画像素材
├── public/
│ ├── fonts/ # フォント(aahub_light等)
│ ├── bgm/ # BGMファイル
│ └── voices/ # 生成音声(自動生成)
├── characters/ # キャラクターAAデータ
│ ├── yaruo.json # やる夫(パーツ合成方式)
│ └── yaranai.json # やらない夫(全身差し替え方式)
├── src/
│ ├── components/ # Remotionコンポーネント
│ ├── aa/ # AA合成ロジック
│ └── data/ # パース結果(自動生成)
├── scripts/ # ビルドスクリプト
├── config.yaml # 設定ファイル
└── out/ # 出力動画
主要な設定項目:
voicevox:
endpoint: "http://localhost:50021"
defaults:
speedScale: 1.0
video:
width: 1920
height: 1080
fps: 30
bgm:
volume: 0.15詳細は config.yaml を参照してください。
| キャラ | 推奨話者 | ID |
|---|---|---|
| やる夫 | ずんだもん(ノーマル) | 3 |
| やらない夫 | 玄野武宏(ノーマル) | 11 |
他の話者は VOICEVOX起動後 http://localhost:50021/speakers で確認できます。
本ツールのソースコードは MIT License で公開しています。
ただし、本ツールを使用して動画を作成・公開する際は、以下の各ツール・素材の利用規約を遵守してください。
VOICEVOXで生成した音声を利用する際は、以下を遵守してください:
- クレジット表記が必須: 動画内または概要欄に「VOICEVOX:キャラ名」を記載
- 各キャラクターの利用規約に従う: キャラクターごとに規約が異なります
| 話者 | ID | 商用利用 | クレジット | 備考 |
|---|---|---|---|---|
| ずんだもん | 3 | 可 | VOICEVOX:ずんだもん | 利用規約 |
| 玄野武宏 | 11 | 可 | VOICEVOX:玄野武宏(CV:ガロ) | 利用規約 |
- 個人・3人以下の企業: 無料で商用利用可
- 4人以上の企業: 有料ライセンスが必要
| ライブラリ | ライセンス | 備考 |
|---|---|---|
| Marp | MIT | スライド生成 |
| aahub_light | - | AA表示用フォント |
| Noto Sans JP | OFL | 字幕用フォント |
動画の概要欄に以下のように記載することを推奨します:
音声: VOICEVOX:ずんだもん、VOICEVOX:玄野武宏(CV:ガロ)
動画生成: Remotion
