前置き
Whisperを使ったYouTubeの文字起こしのスクリプトを書いてみました。
理由は、CrowdWorksでYouTubeの文字起こしの案件を請け負って小遣い銭稼ぎをしたくなったからです。
そこで目を付けたのが、今流行りのOpenAIのWhisperを活用して、効率化することでした。
ライブラリのインストールのコマンドと、文字起こしのコードを載せます。
言語はPython、実行環境はGoogle Colaboratoryです。
ライブラリをインストールするコマンド
!pip install yt-dlp
!pip install openai
!pip install yt-dlp
このコマンドは、Pythonのパッケージ管理ツールであるpipを使用して、yt-dlp
というパッケージをインストールします。yt-dlp
は、YouTubeの動画や音声のダウンロードを行うためのユーティリティです。このコマンドを実行することで、yt-dlp
パッケージがローカル環境にダウンロードされ、利用することができるようになります。
!pip install openai
このコマンドは、同様にpipを使用して、openai
というパッケージをインストールします。openai
パッケージは、OpenAIのAPIをPythonから利用するためのライブラリです。このコマンドを実行することで、openai
パッケージがインストールされ、OpenAIのAPIを使用するための準備が整います。
文字起こしをするためのコード
from typing_extensions import Text
import yt_dlp
import subprocess
import openai
def download_title(video_url):
# yt-dlpコマンドを組み立てる
cmd = f"yt-dlp -q -s --get-title {video_url}"
# yt-dlpコマンドを実行してタイトルを取得
title = subprocess.check_output(cmd, shell=True, text=True).strip()
return title
def save_title_to_file(title):
# タイトルをテキストファイルに保存
with open(f"{title}.txt", "w", encoding="utf-8") as file:
file.write(title)
video_url = "https://www.youtube.com/watch?v=Iw28whhyQnE" # YouTube動画のURL
# タイトルを取得
video_title = download_title(video_url)
# yt-dlpのオプションを設定
options = {
'postprocessors': [{
'key': 'FFmpegExtractAudio', # 音声を抽出するポストプロセッサ
'preferredcodec': 'aac', # 目的の音声形式
'preferredquality': '52', # 目的の音声品質
}],
'outtmpl': f"{video_title}.%(ext)s", # 出力ファイル名
}
# ダウンロード
with yt_dlp.YoutubeDL(options) as ydl:
ydl.download([video_url])
# Whisper APIで文字起こし
# OpenAI APIのトークンを指定
openai.api_key = <APIキー>
# 音声ファイルを開き、audio_fileに代入
audio_file= open(f"/content/{video_title}.m4a", "rb")
# 文字起こしのデータをWhisper APIから取得
transcript = openai.Audio.transcribe("whisper-1", audio_file)
# 文字起こしのデータの書き込みを.txtファイルへ!
with open(f"/content/{video_title}.txt", "w", encoding="utf-8") as file:
file.write(transcript["text"])
コードの解説
from typing_extensions import Text
import yt_dlp
import subprocess
import openai
この部分では、必要なライブラリやモジュールをインポートしています。typing_extensions
は型のサポートを提供するモジュールです。yt_dlp
はyt-dlp
パッケージを使用するためのモジュールです。subprocess
モジュールは外部プロセスを実行するためのモジュールであり、openai
はOpenAIの機能を使用するためのモジュールです。
def download_title(video_url):
# yt-dlpコマンドを組み立てる
cmd = f"yt-dlp -q -s --get-title {video_url}"
# yt-dlpコマンドを実行してタイトルを取得
title = subprocess.check_output(cmd, shell=True, text=True).strip()
return title
download_title
という関数は、指定されたビデオのURLからタイトルを取得するための関数です。内部でyt-dlp
コマンドを組み立てて実行し、その結果としてビデオのタイトルを取得しています。
def save_title_to_file(title):
# タイトルをテキストファイルに保存
with open(f"{title}.txt", "w", encoding="utf-8") as file:
file.write(title)
save_title_to_file
という関数は、与えられたタイトルをテキストファイルに保存するための関数です。タイトルをファイル名として使用し、そのタイトルを内容としてテキストファイルに書き込んでいます。
video_url = "https://www.youtube.com/watch?v=Iw28whhyQnE" # YouTube動画のURL
# タイトルを取得
video_title = download_title(video_url)
video_url
にはYouTubeの動画のURLが指定されており、download_title
関数を使ってその動画のタイトルを取得しています。
options = {
'postprocessors': [{
'key': 'FFmpegExtractAudio', # 音声を抽出するポストプロセッサ
'preferredcodec': 'aac', # 目的の音声形式
'preferredquality': '52', # 目的の音声品質
}],
'outtmpl': f"{video_title}.%(ext)s", # 出力ファイル名
}
postprocessors
は、ダウンロードしたビデオに対して実行されるポストプロセッサの設定を指定するリストです。この場合、1つのポストプロセッサが指定されています。
'key': 'FFmpegExtractAudio'
は、ビデオから音声を抽出するポストプロセッサを指定しています。このポストプロセッサはFFmpegを使用して音声を抽出します。
'preferredcodec': 'aac'
は、抽出された音声の形式をAACに指定しています。AACは高品質で圧縮効率の高い音声形式です。
'preferredquality': '52'
は、抽出された音声の品質を指定しています。具体的な品質レベルは実装やコーデックに依存しますが、ここでは品質レベル52が指定されています。
'outtmpl': f"{video_title}.%(ext)s"
は、ダウンロードしたビデオの出力ファイル名を指定しています。%(ext)s
はビデオの拡張子を保持するためのプレースホルダです。
これらのオプションを使用することで、ビデオの音声を抽出し、指定された形式と品質で保存することができます。
# ダウンロード
with yt_dlp.YoutubeDL(options) as ydl:
ydl.download([video_url])
yt_dlp.YoutubeDL(options)
を使用して、指定されたオプションでyt-dlp
を初期化します。その後、ydl.download([video_url])
を実行することで、指定されたURLのビデオをダウンロードします。
# Whisper APIで文字起こし
# OpenAI APIのトークンを指定
openai.api_key = <APIキー>
# 音声ファイルを開き、audio_fileに代入
audio_file = open(f"/content/{video_title}.m4a", "rb")
# 文字起こしのデータをWhisper APIから取得
transcript = openai.Audio.transcribe("whisper-1", audio_file)
# 文字起こしのデータを.txtファイルに書き込み
with open(f"/content/{video_title}.txt", "w", encoding="utf-8") as file:
file.write(transcript["text"])
ここでは、OpenAIのWhisper APIを使用して音声ファイルの文字起こしを行います。まず、openai.api_key
にAPIキーを指定します(実際のAPIキーに置き換えてください)。次に、指定された音声ファイルを開き、openai.Audio.transcribe
を使用してWhisper APIから文字起こしのデータを取得します。最後に、取得した文字起こしのデータを指定された.txt
ファイルに書き込みます。
締め
このコードは、大部分をChatGPTに書いてもらいました。
Python初学者ですが、おかげでサクサクと進みました。しかも、脳にかかる負荷が少なくて済んだので、ChatGPTは素晴らしい飛び道具だなと思いました。
OpenAIさんには感謝してもしきれないです!
さあ、CrowdWorksで稼ぐぞ~!