見出し画像

YouTube文字起こし:faster-whisperをGoogle Colabで動かす

コード見にくかったら編集してね。
上からコピペしていってくれれば良いです。

Googleドライブ連携

from google.colab import drive
drive.mount('/content/drive')

必要ライブラリインストール

!pip install --upgrade pip
!pip install pytube
!pip install faster-whisper
!pip install ffmpeg-python

Youtubeから、タイムスタンプなし

model_sizeは動画の長さに応じて適当に。大きいほど文字起こし間違いが少ないが遅い。

#@title Youtubeから、タイムスタンプなし
import sys
from faster_whisper import WhisperModel
import os
import subprocess
from pytube import YouTube

URL =  "https://www.youtube.com/watch?v=s3dQaS965Ag"  # YouTubeの動画URLを指定
SAVE_DIR = "/content/drive/MyDrive/"  # 保存先のディレクトリパスを指定


#def format_timestamp(seconds):
#    mins, secs = divmod(seconds, 60)
#    return f"{int(mins):02d}:{int(secs):02d}"


def convert_to_wav(audio_path):
    output_path = os.path.join(SAVE_DIR, os.path.splitext(os.path.basename(audio_path))[0] + ".wav")
    subprocess.run(["ffmpeg", "-i", audio_path, "-ar", "16000", output_path])
    return output_path

def download_audio(url):
    yt = YouTube(url)
    audio_stream = yt.streams.filter(only_audio=True).first()
    audio_path = audio_stream.download(output_path=SAVE_DIR, filename="audio")
    return audio_path

def transcribe_audio(audio_path):
    if not audio_path.endswith(".wav"):
        print(f"Converting {audio_path} to .wav format...")
        audio_path = convert_to_wav(audio_path)

    #model_size = "tiny" #実用的じゃない
    #model_size = "base" #実用的じゃない
    #model_size = "small" #実用に耐える
    #model_size = "medium"
    model_size = "large-v3"
    model = WhisperModel(model_size, device="cuda", compute_type="float16")

    segments, _ = model.transcribe(audio_path)
    #segments, _ = model.transcribe(audio_path, language="en") # 英語に翻訳したいなら
    #segments, _ = model.transcribe(audio_path, language="ja") # 日本語に翻訳したいなら

    transcription = "\n".join(segment.text for segment in segments)

    output_path = os.path.join(SAVE_DIR, os.path.splitext(os.path.basename(audio_path))[0] + ".txt")
    with open(output_path, "w") as text_file:
        text_file.write(transcription)

    print(f"Transcription saved to {output_path}")

if __name__ == "__main__":
    audio_path = download_audio(URL)
    transcribe_audio(audio_path)

接続を切る(処理完了後の節約のため)

#@title 接続切る
from google.colab import runtime
runtime.unassign()

faster-whisper

この記事が気に入ったらサポートをしてみませんか?