PR
5 分で読めます

VOICEVOXから字幕ファイルを作成する

記事内に広告が含まれています

VOICEVOXから字幕ファイル(SRTファイル)を出力する機能はない。ないのでPythonとffmpegで作りましょうという話。作ったらffmpegで動画に字幕を入れるところまでやる。

内容はffmpegのコマンドを実行しているだけなので、他のプログラミング言語でもいい。

こういう話は検索すると見つけることができるが、自分なりのやりかたをまとめた。

動機

最近ずんだもんの動画を見てて

『自分のバイク動画にも音声と字幕を入れたい。四国めたんの声を使いたい。音声はVOICEVOXで作れるみたいだけど、字幕をコマンド一発で楽に作れないかなー』

という気持ち。ずんだもんの動画を見ていると、そういう気持ちになるよね。

ざっくり流れ

  1. VOICEVOXの機能でセリフのTEXTファイルを出力する。

  2. VOICEVOXの機能で音声ファイル(WAV)を出力する。

  3. 音声ファイルから音声の長さを調べる。

  4. TEXTファイルのセリフと音声の長さを組み合わせて字幕ファイル(SRT)を出力する。

  5. 字幕が0秒からの連続になっているので、字幕の開始時間を調整する。

  6. 字幕を動画に焼き付けて音声を入れる。

このような感じ。

詳細

1,2. TEXTとWAVの出力

1と2の工程。これはVOICEVOXの機能で出力する。

セリフは頑張って手で入力する。

mszkmoto blog image

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

mszkmoto blog image

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

mszkmoto blog image

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秒からの連続になっている。

音声の長さから、字幕の時間が記入される。

mszkmoto blog image

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から開始に調整される。

mszkmoto blog image

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

mszkmoto blog image

これで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でコツコツ…⋯。

mszkmoto blog image

あとは動画を出力してYouTubeにアップロードするだけ。お疲れ様でした。

字幕と音声を入れた動画

Play

補足

環境はMacで、ffmpegがインストールされていることが前提。試してないけどWindowsでも大丈夫と思う。

まとめ

房総半島の道の駅、激混みでとても栄えていた。

筆者が使っているもの

関連記事

次へ

前へ

同じカテゴリー記事の最新