1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

vosk を利用して音声ファイルから文字起こしファイル(テキストファイル、字幕ファイル `srt`)を生成する

Last updated at Posted at 2025-01-12

概要

音声ファイル(.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 で利用可能なモデル名を確認できます。モデルは自動でダウンロードします。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?