0
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?

単語帳の音声ファイルから、Anki用csvとして一気に書き起こして、登録まで【Python + Whisper】

Last updated at Posted at 2025-10-11

単語帳の音声ファイル → Anki用CSV文字起こし → Ankiに登録(音声付)

🧩はじめに

単語帳アプリAnkiに、購入した英単語帳の単語・例文データを効率良く導入していく方法として、
Python と OpenAIのWhisperを使って「単語帳の音声 → 文字 → CSV→ Anki」という手順の一例を解説します。
Ankiで利用できるところまで解説したつもりです

この記事では、

  • 単語帳音声データから、Anki用の音声も再生できる形式のCSVとするまでの流れをなるべく丁寧に紹介します

背景

  • 画像認識+音声データからの作成を試みるも断念。写真撮ってらんない
  • 音声データ→これで文字起こせるかな→そこそこ精度いい

⚙️ 動作環境 / 前提条件

出力データには、音声認識精度に依存して、ちょくちょく誤字が残ります。

  • OS | Windows 11
  • Python | 3.10.13(Whisper 安定動作のため)
  • 必要ライブラリ |
    • openai-whisper(OpenAIの音声認識モデル)
    • pandas(データフレーム操作)
    • pydub(MP3→WAV変換)
    • ffmpeg(pydubで必要、外部バイナリ)
    • os, subprocess(標準ライブラリ)
  • エディタ | Visual Studio Code
  • 音声形式 | .mp3 または .wav
  • 出力 | CSV(Ankiにインポート可能)

元々はatsu_eigoさんのDistinctionを利用しましたが、著作権保護のため記事内では触れてません。

⚠️ 注意
・この記事は素人が調べ調べ、学習目的で作成したものです
・利用は自己責任でお願いします。
*記事修正は積極的に行うつもりです

🚀 手順

🗂️ フォルダ構成

フォルダ
mp3_Anki #フォルダ名
├── .venv/ #仮想環境
├── media/  #音声ファイル保存先
│    ├── sound_file1
│    │   ├──001_word1.mp3
│    │   ├──001_exB.mp3
│    │   ├──001_exC.mp3
│    │   ├──001_exD.mp3
│    │   ├──001_word2.mp3
│    │   ├──・・・
│    └── sound_file2
└── mp3_2_csv.py   #メインスクリプト

ダウンロードした音声ファイルをmediaファイルの下に置きます。

今回、コードが mp3_2_csv.py のみでしたので、root(mp3_Anki)の直下に置き、出力csvもroot直下にしています。

1. :ear: Whisperの準備

Whisperを使うためには、あらかじめffmpegが必要です。
私の場合は、インストール後、手動で環境変数を通し、かつ、以下のようにコード内でパスを通しました。

ライブラリのインストール:

terminal
pip install ffmpeg

windows検索「環境変数を編集」 → Path → 新規追加:

環境変数を編集
C:\ffmpeg\bin

pythonコードでpathを明示

python
os.environ["PATH"] += r";C:/ffmpeg/bin"
os.environ["FFMPEG_BINARY"] = r"C:/ffmpeg/bin/ffmpeg.exe"

動作確認:

python
import subprocess
result = subprocess.run(["ffmpeg", "-version"], capture_output=True, text=True)
print(result.stdout)

・調べた範囲では、無料利用可能でした。(2025/5くらいのとき)
・確か、whisperのpath通しに手間取りました。
・また、毎回仮想環境構築にも手間取るので↓メモ

ctrl+shift+P→">python:interpreter"→仮想環境構築
terminal で .venv\Scripts\activate

2. :abc: コード全体像

必要なライブラリのインストール:

terminal
pip install openai-whisper pandas pydub

コード(mp3_2_csv.py)

python
import os
import whisper
import pandas as pd
from pydub import AudioSegment

os.environ["PATH"] += r";C:/ffmpeg/bin"
os.environ["FFMPEG_BINARY"] = r"C:/ffmpeg/bin/ffmpeg.exe"
import subprocess

result = subprocess.run(["ffmpeg", "-version"], capture_output=True, text=True)
print(result.stdout)

# Whisper モデルをロード
model = whisper.load_model("base", device="cpu"

# メディアフォルダ、出力csvのパス(手動で変更)
MEDIA_FOLDER = os.path.abspath("media/**手動でフォルダ名を指定**")  # 絶対パスを取得
OUTPUT_CSV = "transcriptions_dict3.csv"

# 文字起こし結果を一時的に保存するリスト
data = []
wav_path = "temp.wav"

# mediaフォルダ内のすべてのMP3ファイルを取得しwav形式に変換
for file_name in os.listdir(MEDIA_FOLDER):
    file_path = os.path.join(MEDIA_FOLDER, file_name)
    if file_name.endswith(".mp3"):
        audio = AudioSegment.from_mp3(file_path)
        audio.export(wav_path, format="wav")

    elif file_name.endswith(".wav"):
        wav_path = file_path

    print(f"Processing: {file_name}...")

    # Whisperで文字起こし
    result = model.transcribe(wav_path, fp16=False)
    text = result["text"]

    # リストに追加(ファイル名を手動で指定)
    data.append({"File Name": file_name, "**ファイル名を手動で指定**": text})

# CSVファイルに保存
df = pd.DataFrame(data)
df.to_csv(OUTPUT_CSV, index=False, encoding="utf-8")

print(f"文字起こし完了!結果は '{OUTPUT_CSV}' に保存されました。")

なぜかは忘れましたが、mp3ではなくwav形式にする必要があったため、このようなコードになっています。

terminalから 

terminal
python mp3_2csv.py

を実行すると、うまくいけば、csvが出力されるはずです。

2~3秒の音声ファイル一つでも処理に1秒くらいかかるのでしばらく放置が必要です。(PCによる)

3. :chart_with_upwards_trend: CSVを暗記用に加工

Anki用にエクセルやスプレッドシートの式を活用してcsvを加工します。
音声ファイルを読み込むために↓の形式にする必要があります。

セル内の文字列
[sound:001_word1.wav]

例えば、↓とかをうまく使って整形しました。

spread sheet
="[sound:" &A1&"]"
spread sheet
=FILTER(B1:C1600, ISERROR(FIND("B.wav", A1:A1600)) * ISERROR(FIND("C.wav", A1:A1600)) * ISERROR(FIND("D.wav", A1:A1600)))

あとは、

  1. Ankiに音声ファイル上記csvをインポート
  2. Ankiカードの作成
    をすればうまくいくはずです。

Windowsなら、ここ↓に移動

フォルダ
%APPDATA%\Anki2\collection.media

Appendix. :card_box:Ankiカードの編集

私はデフォルトのものを編集して作成しました。
単語帳ごとの例文の数などに合わせて作り直してください。

Ankiカードフィールド
1:Word
2:Sound_word
・
・
Ankiカード表面
{{Word}}
<div style='font-family: Arial; font-size: 20px;'>{{Sound_word}}</div>
Ankiカード裏面
{{FrontSide}}
<hr>

<div  style='font-family: Arial; color; text-align:left;'>
&nbsp;→&nbsp;Ex1: {{ex1}}
{{Sound_ex1}}
</div>

<br>

<div  style='font-family: Arial; color; text-align:left;'>
&nbsp;→&nbsp;Ex2: {{ex2}}{{sound:Sound_ex2}}
</div>

<p class="jpn">  </p>

<hr>
<div  style='font-family: Arial;  text-align:left;'>
<center>{{Meaning}}
</div>
<div  style='font-family: Arial;  text-align:left;'>
<center>{{Sound_meaning}}</div>
<hr>

</br>

   <a href="https://www.google.co.jp/search?tbm=isch&hl=ja&source=hp&biw=1026&bih=781&q={{text:Word}}">Image</a>
                 <a href="https://www.oxfordlearnersdictionaries.com/definition/english/{{text:Front}?q={{text:Word}}">Oxford</a>
</br></br>

  {{Tags}}
Ankiカードスタイル
.card {
font-family: arial;
font-size: 20px;
text-align: center;
color: white;
background-color: black;
}

.jpn {
text-align: left;
font-size: 16px;
}

おわりに

お疲れさまでした。この方法だとうまくいったという報告でした。
フィードバック大歓迎ですのでお気軽にコメントいただけるとありがたいです。

0
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
0
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?