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の機能で出力する。

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

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

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でも大丈夫と思う。

まとめ

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

タイトルとURLをコピーしました