概要
音声ファイル(.wav)に対して、文字起こしした結果をテキストファイル(.txt)に出力する。
vosk のサンプルコードである vosk-api リポジトリの Python コードが目的を果たすのに十分だったので、その動作方法記載です。
準備
動作確認
- Python 3.12.6
- macOS 14.4
モデルをダウンロードする
https://alphacephei.com/vosk/models からモデルをダウンロードする。
vosk-model-ja-0.22 をダウンロードし、任意のディレクトリに展開する。ほかのモデルを使う場合は、後述の -m オプションを調整する。
スクリプト用意
git clone git@github.com:alphacep/vosk-api.git
cd vosk-api
cd python
pip install vosk
# 動作確認時 vosk==0.3.44 だった
使い方
実行例
テスト用の英語音声ファイル example/test.wav がリポジトリに含まれている。
音声ファイル example/test.wav の字幕ファイル test.srt を出力する。
# モデルの指定がない場合は英語のモデルを自動でダウンロードして英語で文字起こしする。
python vosk/transcriber/cli.py -i example/test.wav -t srt -o test.srt
# 日本語で文字起こしする場合は `-m` オプションでモデルを指定する。展開後のディレクトリを相対パスで指定した。
python vosk/transcriber/cli.py -m vosk-model-ja-0.22 -i test.wav -t srt -o test.srt
# `-t` オプションを指定しなければ出力はテキストファイルになる。
python vosk/transcriber/cli.py -m vosk-model-ja-0.22 -i test.wav -o test.txt
結果
英語で文字起こしした srt ファイルの結果は以下です。きちんと時間ごとに字幕が別れていることを確認できます。短く単純な音声のため文字起こしに間違いもなさそうです。
1
00:00:00,840 --> 00:00:02,610
one zero zero zero one
2
00:00:03,930 --> 00:00:04,980
nah no to i know
3
00:00:06,240 --> 00:00:07,980
zero one eight zero three
音声ファイル(2025/1/13確認): https://github.com/alphacep/vosk-api/blob/master/python/example/test.wav
日本語での結果
日本語のテスト音声ファイルはないため、日本語は試した範囲の結果の感想を記載します。
日本語の YouTuber の雑談会話(1名、1時間、BGMあり)に対して利用してみたところ、元の音声を知っていれば理解できるぐらいの精度はありました。
自分の元々の期待は単語が2,3割ぐらい分かって検索可能になれば十分ぐらいに思っていましたが、単語5割/文章5割ぐらいは分かるので期待以上という感触でした。とくにBGMがあってこの精度なのは驚きました。
精度への期待は色々あると思うので、まずは試していただくのがいいと思います。
別途実行時間について計測したところ、10分の動画で2分程度でした。
オプションについて
usage: cli.py [-h] [--model MODEL] [--server SERVER] [--list-models] [--list-languages] [--model-name MODEL_NAME] [--lang LANG] [--input INPUT] [--output OUTPUT] [--output-type OUTPUT_TYPE] [--tasks TASKS]
[--log-level LOG_LEVEL]
Transcribe audio file and save result in selected format
options:
-h, --help show this help message and exit
--model MODEL, -m MODEL
model path
--server SERVER, -s SERVER
use server for recognition. For example ws://localhost:2700
--list-models list available models
--list-languages list available languages
--model-name MODEL_NAME, -n MODEL_NAME
select model by name
--lang LANG, -l LANG select model by language
--input INPUT, -i INPUT
audiofile
--output OUTPUT, -o OUTPUT
optional output filename path
--output-type OUTPUT_TYPE, -t OUTPUT_TYPE
optional arg output data type
--tasks TASKS, -ts TASKS
number of parallel recognition tasks
--log-level LOG_LEVEL
logging level
-
--model
はモデルのパスを指定します。 -
--output-type
は出力形式を指定します。デフォルトはtxt
です。txt
,srt
,json
が利用可能です。 -
--input
は入力ファイルを指定します。ディレクトリも指定できます。 -
--output
は出力ファイルを指定します。ディレクトリも指定できます。 -
--model-name
はモデル名でモデルを指定します。--list-models
で利用可能なモデル名を確認できます。モデルは自動でダウンロードします。