VOICEVOXから字幕ファイル(SRTファイル)を出力する機能はない。ないのでPythonとffmpegで作りましょうという話。作ったらffmpegで動画に字幕を入れるところまでやる。
内容はffmpegのコマンドを実行しているだけなので、他のプログラミング言語でもいい。
こういう話は検索すると見つけることができるが、自分なりのやりかたをまとめた。
動機
最近ずんだもんの動画を見てて
『自分のバイク動画にも音声と字幕を入れたい。四国めたんの声を使いたい。音声はVOICEVOXで作れるみたいだけど、字幕をコマンド一発で楽に作れないかなー』
という気持ち。ずんだもんの動画を見ていると、そういう気持ちになるよね。
ざっくり流れ
- VOICEVOXの機能でセリフのTEXTファイルを出力する。
- VOICEVOXの機能で音声ファイル(WAV)を出力する。
- 音声ファイルから音声の長さを調べる。
- TEXTファイルのセリフと音声の長さを組み合わせて字幕ファイル(SRT)を出力する。
- 字幕が0秒からの連続になっているので、字幕の開始時間を調整する。
- 字幕を動画に焼き付けて音声を入れる。
このような感じ。
詳細
1,2. TEXTとWAVの出力
1と2の工程。これはVOICEVOXの機能で出力する。
セリフは頑張って手で入力する。

音声を出力する。ファイル名の先頭に、番号を振ってくれるのありがたい。

TEXTファイルを出力する。『,』で区切られているので、その右側を使う。

3,4. TEXTファイルと音声の長さを組み合わせてSRTファイルを出力
3と4の工程。とりあえずそれができるPythonスクリプトを用意する。
内容をざっくり説明すると
『TEXTと音声の長さをリストで持つ。それらを組み合わせてSRTのフォーマットで出力する』
以上。
使い方
python vv_txt_wav_to_srt.py sample.txt wav_directory sample.srt
sample.txtはVOICEVOXから出力したTEXTファイル。wav_directoryはVOICEVOXから出力したWAVファイルがあるディレクトリ。sample.srtは出力するSRTファイル名。
出力されたSRTファイルの字幕は0秒からの連続になっている。
音声の長さから、字幕の時間が記入される。

0秒からの連続ではそのまま使うことが出来ないので、字幕の開始時間を調整する。
5. 字幕の開始時間を調整
5の工程。動画を見て字幕を入れるタイミングを調べて、字幕の開始時間を入力したyamlを用意する。
time_adjustments: [
{
line: 1,
start_time: "00:00:01,000"
},
{
line: 8,
start_time: 00:00:36
},
{
line: 11,
start_time: 00:01:28
},
# 省略...
{
line: 41,
start_time: 00:11:30
},
]
lineはsrtの番号を指している。start_timeは字幕の開始時間を指している。開始時間の書き方は2通り。
これを仮にsetting.yamlと保存する。
字幕の開始時間を調整してsrtを再出力
python vv_txt_wav_to_srt.py sample.txt wav_directory sample.srt -s setting.yaml
-s setting.yamlを追加して再出力する。
字幕1が00:00:01から開始に調整される。

字幕11も00:01:28から開始に調整される。

これでVOICEVOXからSRTファイルの出力ができた。
6. SRTファイルの字幕を動画に焼き付ける
6の工程。ffmpegを使う。
#!/bin/bash
# 引数チェック
if [ $# -ne 2 ]; then
echo "使い方: $0 <入力MP4ファイル> <字幕SRTファイル>"
exit 1
fi
input_mp4="$1"
subtitle_srt="$2"
output_mp4="output_${input_mp4}"
# FFmpegコマンド実行
ffmpeg -i "$input_mp4" -vf "subtitles=${subtitle_srt}:force_style='FontName=ヒラギノ角ゴ,FontSize=20'" -c:a copy "$output_mp4"
echo "変換完了: $output_mp4"
FontNameとFontSizeは好きなように調整してほしい。このbashスクリプトを仮にvideo_srt.shと保存して、chmod +x video_srt.sh して実行可能ファイルにする。
./video_srt.sh sample.mp4 output_sample.mp4
これで字幕が焼き付けられた動画が、output_sample.mp4というファイル名で出力される。
音声の入力は?
VOICEVOXで出力したWAVを、動画ソフトで入力していく。SRTファイルを見ながら手でやるのだ。
iMovieでコツコツ…⋯。

あとは動画を出力してYouTubeにアップロードするだけ。お疲れ様でした。
字幕と音声を入れた動画
補足
環境はMacで、ffmpegがインストールされていることが前提。試してないけどWindowsでも大丈夫と思う。
まとめ
房総半島の道の駅、激混みでとても栄えていた。