はじめに
音声ファイル、動画ファイルからテキストファイルを抽出したかったのでメモ
環境
Windows 11 Professional
WSL2 Ubuntu 24.04 LTS
Docker Desktop 4.34.2 (167172)
python 3.11
whisper
準備
- openai / whisper
https://github.com/openai/whisper
を使う。
Docker
上で、python
+ whisper
を使うので、適当な作業ディレクトリを用意する。
プロジェクト構成
├── Dockerfile
├── compose.yml
├── model.py
├── audio (テキストを抽出したい音声ファイル)
├── movie (テキストを抽出したい動画ファイル)
└── text (テキストファイル)
python
は Docker
上で使いたいので、compose.yml
とDockerfile
を用意する。
compose.yml
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/app
Dockerfile
FROM python:3.11-slim-bullseye
# install git
RUN apt-get update && \
apt-get install git ffmpeg -y
# install pip
RUN pip install --upgrade pip
# install whisper
RUN pip install git+https://github.com/openai/whisper.git
RUN pip install moviepy
WORKDIR /app
CMD ["tail", "-f", "/dev/null"]
pythonプログラム
model.py
import os
from moviepy.editor import VideoFileClip
import whisper
model = whisper.load_model("medium")
video_folder = "movie"
audio_folder = "audio"
text_folder = "text"
# video_folderを走査してmp3ファイルを作成する
for filename in os.listdir(video_folder):
# mp4, mkv
if filename.endswith(".mp4") or filename.endswith(".mkv"):
video_path = os.path.join(video_folder, filename)
video = VideoFileClip(video_path)
output_audio_path = os.path.join(audio_folder, filename + ".mp3")
video.audio.write_audiofile(output_audio_path)
# audio_folderを走査してtextファイルを作成する
for filename in os.listdir(audio_folder):
if filename.endswith(".mp3"):
output_audio_path = os.path.join(audio_folder, filename)
result = model.transcribe(output_audio_path)
output_text_path = os.path.join(text_folder, filename + ".txt")
# result をテキストファイルとして保存する
with open(output_text_path, "w") as f:
f.write(result["text"])
実行
compose.yml
の階層で下記を実行する。
docker compose up -d
model.py
を実行する。
docker compose exec app python model.py
text
にテキストファイルが出力される。
試したもの
今回はサンプル音声 https://pro-video.jp/voice/announce/ を利用させていただいた。
これの G-01の音声をダウンロードし、音声ファイルとして入れてテキストを抽出したところ、以下が出力された。
無添加のシャボン玉石鹸ならもう安心。天然の保湿成分が含まれるため、肌に潤いを与え、すこやかに保ちます。お肌のことでお悩みの方は、ぜひ一度、無添加シャボン玉石鹸をお試しください。お求めは0120-0055-95まで。
※model
がmedium
だと結構正確に出力されるが、small
だと句読点がなかったり、漢字が間違っていたりなどするので、正確性を求めるのであれば model
の size
を変えたほうが良い。
一番性能が良いのは large
だが、実行時間と正確性を両立している turbo
がよさそうか。
参考
openai / whisper
https://github.com/openai/whisper動画ファイルからテキスト抽出がWhisperを使えば数十分で実装できた話
https://qiita.com/ShinyaNakayama/items/8ab7a0033a99b2644066
おわりに
会議の動画の文字起こしに使えるので積極的に使っていきたい。
ChatGPTやClaude, Geminiなどに起こした文字を渡して、要約してもらうという使い方もよさそうだ。