こちらでAWSサービスを使って動画ファイル→音声ファイル→テキストファイルという処理を実装したのですが、
今流行りのOpenAIのWhisperというサービスを使うことで一瞬でそして無料で実装できたので紹介します。
(今までの苦労とお金はなんだったんだ。。。)
利用サービス
Whisper
今流行りのOpenAIの文字起こしサービスとなります。
オープンソースなので誰でも簡単に使うことができます。
moviepy
Whisperだけと言いましたが動画を音声に変換するためにこちらのpythonライブラリーも使っています。
実装方法
詳しくは上記を参照してください。
python 3.10.2にて実装しました。
まず下記コマンドにてwhisperをインストール
pip install git+https://github.com/openai/whisper.git
moviepyもインストールしていない場合はインストールしましょう。
pip install moviepy
次にWhisperのモデルを選びます。
サイズが大きくなればパラメーターが増えて処理に時間がかかりますが文字起こしの精度が高まります。
Size | Parameters | Model | Required VRAM | Relative speed |
---|---|---|---|---|
tiny | 39 M | tiny | ~1 GB | ~32x |
base | 74 M | base | ~1 GB | ~16x |
small | 244 M | small | ~2 GB | ~6x |
medium | 769 M | medium | ~5 GB | ~2x |
large | 1550 M | large | ~10 GB | 1x |
自分の環境(Mac:M1、メモリ:8GB)では約15MBの音声ファイル(長さは15分)の処理にsmallで約3分、mediumで約10分かかりました。
文字起こしの正確さでいうと、small < Amazon Transcribe < mediumという印象を持ちました(完全主観です)。
コード
下記のコードにて実装しました。
最初はモデルのインストールがあるため時間がかかります。
文字起こしされたテキストをprintで表示しています。
文字起こしした文章や音声ファイルを保存したい場合はコードを修正してください。
import os
from moviepy.editor import VideoFileClip
import whisper
# Set the paths
video_folder = "動画ファイルのフォルダ"
video_filename = "動画ファイルの名前を入れてください" # Replace with your actual video file name
video_path = os.path.join(video_folder, video_filename)
audio_folder = "音声ファイルのフォルダ"
output_audio_path = os.path.join(audio_folder, "temp_audio.mp3")
# Extract audio from the video
video = VideoFileClip(video_path)
video.audio.write_audiofile(output_audio_path)
# Load the Whisper ASR model
model = whisper.load_model("small")
# Transcribe the extracted audio
result = model.transcribe(output_audio_path)
print(result["text"])
# Remove the temporary audio file
os.remove(output_audio_path)
感想
たったのこれだけのコードで実装できることに素直に驚いてしまいました。
動画ファイルから音声ファイルの変換は15分ほどの動画であれば1分もかからずに終わります。
3種類の形式の動画ファイル(mp4, avi, mov)を試しましたが全て問題なく音声ファイルに変換することができました。
これをさらにChatGPTに渡すことで要約も可能ですね。
最後までご覧いただきありがとうございました。