Script2Video 取扱説明書

台本と収録音声から、音声・字幕・タイムラインを作り、画像・動画の素材と縦書きの吹き出し・ト書きを合成して、完成動画 output.mp4 を書き出すコマンドラインツールです。この説明書は v0.2.21(2026-11-08 時点)に合わせています。v0.2.1 で、台詞を最下段の横書きの字幕で出す字幕モード(字幕モード)を追加しました。v0.2.20 で、台本の #paragraph に style= を書いて、シーンごとに字幕と吹き出しを切り替えられるようにしました。v0.2.21 で、台詞行の style= で合成役の台詞だけスタイルを変えられるようにしました。

1. 概要と作業の流れ

すべてのコマンドは script2video <コマンド> <台本.txt> の形で使い、台本のあるフォルダ(以下「台本フォルダ」)を基準に読み書きします。1 本の動画は、次の順に作ります。

1
台本を書く
台詞・シーン・カット・ト書き
2
number
台詞・シーン・カット・ト書きに番号を付ける
3
収録する
台詞ごとの wav を voices/ に(合成役は不要)
4
build
音声・字幕・タイムラインを作る
5
prompts
素材を作るためのプロンプト
6
素材を置く
画像・動画を tracks/ に
7
bubbles
吹き出し・ト書きを画面で調整(任意)
8
render
output.mp4 を書き出す
script2video number  第1話.txt
script2video build   第1話.txt [--voice-dir 収録/] [--config 設定.toml] [--no-cache]
script2video prompts 第1話.txt [--config 設定.toml]
script2video bubbles 第1話.txt [--config 設定.toml] [--port N] [--no-open]
script2video render  第1話.txt [--config 設定.toml]
台本や収録を直したら

build をやり直してから、prompts・bubbles・render に進みます。timeline.json には台本と音声の SHA-256 が記録されていて、後のコマンドが食い違いを検査します。

2. インストールと前提

インストール(配布パッケージ)

Rust は不要です。宇摩コードワークスのサイトから Script2Video_v0.2.21.zip をダウンロードし、PATH の通ったフォルダに展開します。ffmpeg は同梱していないので、展開した install-ffmpeg.ps1 を PowerShell で実行して入れます。script2video --help で動作を確認します。

インストール(ソースからビルド)

# リポジトリの直下で実行。~/.cargo/bin/script2video.exe に入ります(PATH に ~/.cargo/bin が必要)
cargo install --path crates/s2v-cli --locked
script2video --help

コードを更新したら、同じコマンドをもう一度実行して入れ直します(同じ版でも入れ直すなら --force)。

前提

もの必要なコマンド内容
ffmpeg・ffprobe 6.0 以上bubbles・renderPATH に置くか、[render] ffmpeg・ffprobe で場所を指定します。git の日付版(2023 年以降)も使えます。版が古いと失敗し、版を読み取れないときは警告して続けます。
縦書きのフォントbubbles・render既定は C:\Windows\Fonts\YuGothM.ttc(游ゴシック Medium)。縦書き用の機能(vrt2 か vert)と縦書きの寸法(vhea・vmtx)が必要です。
ブラウザbubbles既定のブラウザ(Chrome で確認済み)。Windows では自動で開きます。

3. 台本フォルダの構成

台本フォルダ/
├─ 第1話.txt              台本
├─ 第1話.bak .ids .html   number の出力(バックアップ・番号の記録・閲覧用の台本)
├─ voices/                収録(S01_L001.wav …)。build は読むだけ
├─ full_dialogue.wav      build: 台詞・BGM・SE を合成した音声
├─ timeline/
│   ├─ timeline.json      build: 後のコマンドが読む正本(v3)
│   ├─ subtitles.srt      build: 字幕
│   └─ timeline.fcpxml    build: 動画編集ソフト(Filmora)向け
├─ tracks/                build: dialogue.wav / bgm.wav / se.wav
│                         あなたが置く: 画像・動画の素材(S01.png、S01_C02.mp4 …)
├─ prompts/               prompts: S01.md … と index.md
├─ bubbles.json           bubbles: 手動で置いた吹き出し・ト書き(.bak も)
├─ output.mp4             render: 完成動画
├─ output.stale.mp4       build が改名した前回の output.mp4
├─ work/                  中間ファイル(消してよい)
└─ Process.log            処理の記録・警告・エラー

4. 台本の書き方

詳しい規則は 台本仕様.md を参照してください。ここでは主な書き方をまとめます。

@scene 居間
朝の居間。明るく静かな雰囲気。
@pause
sentence 500
cast 300
paragraph 1000
@cast
田中:田中,pan=-25,distance=1.2
30代の男性。短髪で、紺のカーディガンを着ている。

佐藤:佐藤,pan=25,distance=1.2
20代の女性。肩までの黒髪。白いシャツ。

@script
#paragraph 朝の居間
#visual (image) 朝の光が差し込む居間。
#note 翌朝、居間。
田中:おはよう。今日は早いね。
佐藤:おはよう。コーヒー、淹れたよ。
#cut
#visual (video loop) カーテンが風に揺れる。
田中(volume=-0.2):ありがとう。いい香りだ。

セクション

セクション内容
@scene 名称場面。次の行に雰囲気の説明。音響の room_size=・reverb_wet=(0.0〜1.0)を書けます。
@pause無音の長さ(ミリ秒)。sentence 文の間、cast 話者の交替、paragraph シーンの間。
@assetbgm_dir = 絶対パス、se_dir = 絶対パス。
@cast役名:話者名,pan=度,distance=m,height=m,volume=倍率。定義行の次の行から空行までが、その役の外見(プロンプトに使います)。エンジン名を書くと音声合成の役(合成役)になります(役名:話者名:style,voicevox,k=v…。エンジンは voicevox・aivis・xtts)。同じ役を書き直すと、合成の設定(合成するか・エンジン・声・style など)は以後の台詞に適用されます。音響パラメータ(pan など)は @scene ごとで、同じ @scene の中で最後の定義がその @scene の全台詞に使われます。
@script台詞とコマンド。

台詞

[S01-L003] 役名(臨時パラメータ):台詞

コマンド

コマンド意味
#paragraph[S02] 名称シーンの区切り。番号は number が書き込みます。名称は省略できます。
#cut[C02]シーンの中で素材を切り替えます(シーンの頭は暗黙の C01)。
#visual (印) 本文直前のカットの情景。印は image・video・loop(例 (video loop))。
#note[N01] 本文ト書き。動画では枠の中に縦書きで表示します。
#pause ミリ秒無音。台本の最後に書くと、その長さだけ音声の末尾の無音になります。
#bgm_start ファイル.wav / #bgm_stopBGM の開始と停止。
#se ファイル.wav at=L003+200 gain=-3効果音。at=・end=で台詞に合わせて置けます。
# コメント# の後に空白があればコメントです。

カット・情景・ト書き

5. number(番号付け)

script2video number 第1話.txt

台詞・シーン・カット・ト書きに番号を書き込みます([S01-L003]・#paragraph[S02]・#cut[C02]・#note[N01])。既存の番号は変えず、欠番も詰めません。台本名の .bak(書き換え前)・.ids(番号の記録)・.html(閲覧用)も出力します。

6. build(音声・字幕・タイムライン)

script2video build 第1話.txt
script2video build 第1話.txt --voice-dir 収録/     # 収録を別の場所に置いたとき

収録ファイル

合成役の台詞

音量と定位

出力

ファイル内容
full_dialogue.wav台詞・BGM・SE の合成(24bit)
tracks/dialogue.wav bgm.wav se.wav動画編集ソフト用の別トラック(32bit 浮動小数)
timeline/timeline.json後のコマンドが読む正本(v3)
timeline/subtitles.srt字幕
timeline/timeline.fcpxmlFilmora 向け(3 トラック)
build は output.mp4 を作りません

前回の output.mp4 があれば、出力を始める時点で output.stale.mp4 に改名します(古い動画を新しいものと取り違えないため)。動画は render で作り直してください。

7. prompts(素材のプロンプトを作る)

script2video prompts 第1話.txt

timeline.json から、画像・動画を生成するためのプロンプトをカットごとに作り、prompts/ に書きます。

8. 素材の置き方

台本フォルダの tracks/ に、カットごとに 1 つ置きます。名前はカット ID から決まります。

カット ID素材のファイル名の例
S01-C01(シーンの頭)tracks/S01.png
S01-C02tracks/S01_C02.mp4
S03-C01tracks/S03.jpg

9. bubbles(吹き出し・ト書きの配置を画面で調整する)

script2video bubbles 第1話.txt
script2video bubbles 第1話.txt --port 8765 --no-open

自動配置された吹き出し・ト書きを、ブラウザの画面で動かしたり、大きさ・尻尾・表示の時刻を直したりして、bubbles.json に保存します。render はこの配置を使います。調整しない項目は、毎回自動で配置されます。

画面の構成

上状態(未保存の変更・保存の結果・警告)、「保存」「終了」のボタン
左: 一覧シーン → カット → 台詞・ト書き。「手動」「切詰」の印。クリックでその項目の開始のコマへ
中央: プレビュー動画と同じ縦横比。カットの素材を背景に、吹き出し・ト書きを render と同じ見た目で重ねる
右: 数値の欄x・y・幅・高さ・尻尾 dx/dy・開始のずれ(ms)・終了のずれ(ms)、「自動に戻す」
下: コマのスライダーと再生/停止再生中は full_dialogue.wav を鳴らし、動画の素材は消音で音声に合わせる

操作

したいこと操作
項目を選ぶ左の一覧をクリック(その項目の開始のコマへ移ります)、またはプレビューの枠をクリック(重なっているときは前面のもの)
動かす本体をドラッグ。または矢印キーで 1px、Shift+矢印で 10px(数値の欄に入力中のときは、矢印キーは欄の操作になります)
大きさを変える四隅のつまみをドラッグ
尻尾の向きを変える尻尾の先のつまみをドラッグ
数値で指定する右の欄に入力し、Enter を押すか欄から離れると確定
表示の時刻をずらす「開始のずれ」「終了のずれ」(ミリ秒。±60000 まで)
自動の配置に戻す「自動に戻す」
保存する「保存」か Ctrl+S
文字が入らない大きさにはできません

小さすぎる大きさにすると、直前に確定した値に戻り、「確定できません: …文字が枠に収まりません」と理由が出ます。自動の項目は、手動の項目を避けて置き直されます。元に戻す・やり直しの機能はこの版にはありません。

保存と終了

bubbles の起動中は、素材を差し替えられません

tracks/ の素材と full_dialogue.wav は、起動中ずっと上書き・削除・改名できないように開いています。差し替えるときは bubbles を終えてから行います。また、起動中は同じ台本フォルダで build や render を動かせません(ロック)。

「セッションが切れました」と出たら

bubbles を起動し直したときなどに出ます。そのページでは操作できないので、bubbles を起動し直して、新しく表示された URL を開いてください。URL の token は起動のたびに変わる使い捨ての合言葉です。

10. render(動画を書き出す)

script2video render 第1話.txt

build の出力・tracks/ の素材・bubbles.json(あれば)から、吹き出し・ト書き・音声を合成して output.mp4(H.264 + AAC、既定 1920×1080・30fps)を書き出します。中間ファイルは work/render/ に作ります(消してよい)。

台本だけを直したとき

build の後に台本だけが変わっていると、警告(終了コード 1)を出して続けます。収録を変えた(full_dialogue.wav が timeline.json と食い違う)ときは失敗するので、build をやり直してください。

11. 設定(config.toml)

--config 設定.toml を省くと、同梱の config.toml を使います。全項目は同梱のファイルを参照してください。よく使うものは次のとおりです。

[render]

キー既定意味
width / height1920 / 1080解像度(偶数)
fps30フレームレート
fitcontain素材の収め方(contain は余白あり、cover は切り取り)
default_imageなし素材が無いカットの代わりの画像
font_pathC:\Windows\Fonts\YuGothM.ttc縦書きに使うフォント
ffmpeg / ffprobePATH からffmpeg・ffprobe の場所
jobs1カットを同時に作る ffmpeg の数
stylebubble台詞の見せ方(bubble: 縦書きの吹き出し / subtitle: 最下段の横書きの字幕)

字幕モード(style = "subtitle")

config.toml の [render] で style = "subtitle" にすると、台本の最初の style= より前のシーン(と最初の #paragraph より前の台詞)の台詞を、render は画面の最下段に横書きの字幕で出します(この設定は最初の style= が現れるまでの既定で、台本の #paragraph の style= が優先し、以後の style= のないシーンは直前のシーンを引き継ぎます。コマンドラインのオプションはありません)。style = "bubble"(既定・省略時)の動作は従来と同じです。

台本の #paragraph の行の最後に style=bubble / style=subtitle を書くと、シーンごとに切り替えられます(例: #paragraph[S02] 港の朝 style=subtitle)。

キー既定意味
subtitle_text_color#FFFFFF字幕の文字色
subtitle_outline_color#000000文字の縁取りの色
subtitle_outline_width3.0文字の縁取りの太さ(0 で縁取りなし)
subtitle_band_fill#000000帯の塗り
subtitle_band_opacity0帯の塗りの不透明度(0〜1)
subtitle_band_stroke#FFFFFF帯の枠線の色
subtitle_band_stroke_width0.0帯の枠線の太さ(0 で枠なし)
subtitle_padding20帯の内側の余白(本文を 1 文字以上確保できる大きさ)
subtitle_margin_bottom40画面の下端から帯までの余白
subtitle_show_speakertrue発言者名のラベルを出すか(false で出さない。ラベルの分の高さも取らない)
speaker_text_color#FFFFFF発言者名の文字色
speaker_fill#333333発言者名の囲いの塗り
speaker_stroke#FFFFFF発言者名の囲いの枠線の色
speaker_stroke_width2.0発言者名の囲いの枠線の太さ
speaker_padding10発言者名の囲いの内側の余白
台詞が四行以上のとき

台詞が四行以上になるとき、または同時に出る字幕の積み上げが画面に収まらないときは、render は output.mp4 を作らず(前回の output.mp4 も変えず)、該当する台詞をすべて Process.log に警告として書き、終了コード 1 で終わります。「台詞が四行以上」の警告には、台詞の ID・役名・行数・本文が入ります。

直し方: 台本の台詞を短く分け、number と build をやり直してから render をやり直します。build をやり直さないと、render は台本が build の後に変わったという警告を出し、古いタイムラインのまま進みます。

[prompts]

キー既定意味
style空プロンプトの先頭に付ける画風
suffix縦横比 16:9。画像の中に文字・吹き出しを入れない。プロンプトの末尾に付ける注意書き

[audio] / [normalize] / [mix]

キー既定意味
[normalize] target_lufs-17.3台詞の目標ラウドネス。番組の収録用に、基準距離の台詞のピークが -1 dBFS 前後になる値です(-40〜-10)。
[mix] master_ceiling_db-1.0マスターのソフトリミッタの上限(-6〜0)。
[audio] reference_dist1.0音量の基準になるマイクまでの距離(m)。distance がこれより遠い役は小さくなります。
[audio] mic_directivity0.5マイクの指向性(0〜1)。0.5 は単一指向性(カーディオイド)、0 は無指向です。大きいほど左右の音量差が出ます。
[audio] mic_angle30.0左右のマイクを外側へ向ける角度(度)。大きくすると左右差が増えますが、中央の音が薄くなる(中抜け)ことがあります。

[voicevox] / [aivis] / [xtts] / [http]

合成役を使うときだけ必要です(すべて省略可)。エンジンの接続先は url、未起動時に自動起動する実行ファイルは exe_path(引数は args、待機秒数は startup_timeout_s)で指定します。[http] の connect_timeout_s(既定 10)・request_timeout_s(既定 180)はエンジンへの通信のタイムアウトです。

12. 終了コードとログ

コード意味
0正常に終わりました
1警告があります(出力はできています)。Process.log を確かめてください。ただし字幕モードの render が台詞の四行以上などで止まったときも 1 で、そのときは output.mp4 を作っていません
2失敗しました(出力していないか、前回の出力を残しています)

処理の記録・警告・エラーは、台本フォルダの Process.log に書きます。build・prompts・bubbles・render は、実行のたびに == build 2026-10-16 12:34:56(UTC) == のような区切り(日付と時刻。時刻は UTC)を付けて追記します。ログは上書きされないので、大きくなったら手で消してください。

合成役を使った build では、使ったエンジンの接続先と実行ファイルのパス(exe_path を省略したときは、自動検出したパス)、エンジンの探索・起動・接続確認・停止の記録も Process.log に残ります。エンジンの記録に警告があると、終了コードは 1 になります。

13. 困ったとき

症状・表示原因と対処
音声が小さい・番組のピークが -1 dB にならないfull_dialogue.wav のピークを確かめます。全体を上げるときは [normalize] target_lufs を上げます(既定 -17.3。上げ過ぎるとソフトリミッタが働きます)。声ごとの差は @cast の volume で直します(§6「音量と定位」)。
pan が効かない・左右の差が小さいマイク間隔 0.2 m のモデルなので、±25° では左右差が 2〜3 dB です。pan を広げる(±60° など)か、[audio] mic_directivity を上げます。
合成役の台詞が不足になるProcess.log でエンジンの記録を確かめます。「実行ファイルは見つかりません」なら、エンジンをインストールするか、exe_path を指定します。話者名が見つからないときは、エンジンにその話者がありません(VOICEVOX・AivisSpeech の話者名を確かめます)。
「別の script2video が実行中」同じ台本フォルダで他のコマンド(bubbles の起動中を含む)が動いています。終わるのを待つか、bubbles を終了してください。
「timeline.json がありません。先に build を実行してください」build をまだ実行していません。
「full_dialogue.wav が timeline.json と別の build のものです」収録や音声が変わっています。build をやり直してください。
「素材が足りません」tracks/ に素材を置くか、[render] default_image を指定します。prompts/index.md の「素材」の列で不足が分かります。
同じカットに素材が 2 つある・種類が違うどちらかを消すか、台本の #visual の印(image/video)を直します。
HDR・BT.2020 の動画でエラーBT.709(SDR)の動画に変換してから置きます。
「ffmpeg が見つかりません」「古すぎます」ffmpeg・ffprobe 6.0 以上を入れて PATH に置くか、[render] ffmpeg・ffprobe で場所を指定します。
フォントを読めない・縦書きの機能が無い[render] font_path に、縦書きに対応したフォント(vrt2 か vert、vhea・vmtx を持つもの)を指定します。
bubbles で「セッションが切れました」bubbles を起動し直し、新しい URL を開きます。
bubbles で素材が「素材なし」になる他のプログラムが素材を書き込みのために開いています。そのプログラムを閉じて、bubbles を起動し直します。
output.mp4 が output.stale.mp4 になったbuild をやり直したためです(古い動画)。render で作り直してください。

14. 現在の制限と未確認の事項

この版の制限

  • bubbles に元に戻す・やり直しの機能はありません。
  • bubbles のブラウザの自動起動は Windows だけです。
  • bubbles は同じ PC の他のプログラムからは守れません(他のウェブページ・他のローカルのサービスからの操作は防ぎます)。
  • WebP の素材、BT.709 以外の色の動画は使えません。

まだ人の目で確かめていないこと

  • sample の台本で number → build → prompts → 素材 → bubbles → render を通し、画面の配置と output.mp4 が一致することの、最終の目視確認(受け入れ条件)。
  • 30 分級の性能試験(cargo test -p s2v-cli --release --test render_perf -- --ignored --nocapture)。
  • bubbles のドラッグの途中のキャンセル(ウィンドウの外へ出るなど)。

開発者向けの設計は docs/superpowers/specs/、台本の詳しい規則は 台本仕様.md、コマンドの詳細は README.md を参照してください。