【Python音声からテキスト抽出】英語の字幕を自動生成する方法
Youtubeなどの動画を作成する場合、撮影した動画に字幕を自動でつけたいことがあるかと思います。
日本語字幕はすでに対応可能なソフトやツールがたくさん出ていますので、自動で翻訳して出力するまでをやってみましょう。
まずは5つのステップで全体を把握してください。
この5つのステップで基本ができたら次により自動化できるところをピックアップしていきます。
この方法をマスターすれば動画制作から、インタビューのテキスト起こし、外国人のインタビューも録音さえしておけばあとから一瞬(PCのスペックに依存)でテキスト化、翻訳することができます。
簡易紹介:こうたろう
1986年生まれ
音大卒業後日本、スウェーデン、ドイツにて音楽活動
その後金田式DC録音のスタジオに弟子入り
プログラミング(C)を株式会社ジオセンスのCEO小林一英氏よりを学ぶ
現在はヒーリングサウンド専門のピアニスト、またスタジオでは音響エンジニア、フォトグラファーなどマルチメディアクリエーターとして活動中
当記事ではプログラマー、音響エンジニアとして知識とスキルをシェアしていきます
関連サイト
【保存版】Pythonで使える音響・オーディオに関連するライブラリ17選
【2024年最新】今話題の音楽生成AIサービス3選と音楽制作の未来予測
【Python音声からテキスト抽出】英語の字幕を自動生成する方法
【音声機械学習】音源だけで性別、年齢、感情を識別するアプリの開発ガイド決定版
【Music21保存版】音楽家必須のPythonプログラミング〜楽譜の管理と楽曲分析の最強ツール
ステップ1: 環境の準備
- 必要なライブラリをインストールします。これには音声認識用の
SpeechRecognition
、翻訳用のgoogletrans
またはdeep-translator
などが含まれます。
ステップ2: 音声認識
SpeechRecognition
ライブラリを使用して、音声ファイルをテキストに変換します。- 日本語の音声ファイル(例えば、
.wav
形式)を用意します。 - この音声ファイルを読み込み、
SpeechRecognition
を用いてテキストに変換します。
ステップ3: 翻訳
- 翻訳ライブラリ(
googletrans
やdeep-translator
)を使用して、日本語のテキストを英語に翻訳します。 - 変換されたテキストを英語に翻訳し、必要に応じて編集します。
ステップ4: 字幕ファイルの作成
- 翻訳されたテキストを字幕ファイル形式(例:
.srt
)に変換します。 - 各字幕には、表示開始時間と終了時間を指定します。
ステップ5: 字幕の動画への組み込み
- 最後に、生成した字幕ファイルを動画に組み込みます。これにはビデオ編集ソフトウェアが必要です。
ちなみに音声のモニターヘッドホンはこちらがおすすめ!
SENNHEISER HD 25 PLUS
当サイトでも一押しの中の一押し。
本当に素晴らしい音を体験できます。
上位モデルもあるんですが、このHD25の方がいいんです。
サウンドハウスでの価格スタジオの音響顧問:金田式DC録音の五島昭彦氏も絶賛、何個も持っています。
SONY / MDR-CD900ST
これを外すわけにはいきません。
業界では定番中の定番。
オーバーイヤータイプですので長時間のモニター、制作におすすめです。
サウンドハウスでの価格ただし、業界ではどこでも誰でも持っているので持ち出す時は名前を書くなど目印が必要かも?!
CLASSIC PRO / CPH7000
サウンドハウスのオリジナルブランドのモニターヘッドホン。
サウンドハウスでの価格お安く提供してくれていますが、その分余計な加工がされていないため、とても素直でフラットな音を提供してくれます。
非常にコスパのいいモニターヘッドホンです!
ライブラリをインストール
このプログラムが導入されているデバイスは例えばこういった商品があります。
エラーのデバッグが面倒な方は是非時間の節約のためこちらを試してみてください。
音声のためのライブラリ
SpeechRecognitionは音声認識を行うためのライブラリ。
これを使用して、音声ファイルをテキストに変換します。
pip install SpeechRecognition
PyAudioはSpeechRecognitionで音声ファイルを処理するために必要な場合があります。
特にマイクからのリアルタイム音声入力を扱う際に重要になりますし、他にもできることはたくさんありますから、是非一緒にインストールしておきましょう。
Pythonライブラリ〜Pydubを使ってオーディオファイルを変換するコード
pip install pyaudio
翻訳のためのライブラリ
googletrans または deep-translatorを使います。
今回はDeepLのAPIを使います。
deeplモジュールのインストール
pip install deepl
Deep-translatorのインストールコマンド
pip install deep-translator
DeepLの使い方はサブドメインのサイト(金融系)にて詳しく解説していますので是非使いこなしてください。
DEEPL APIを有効活用〜使い方からPYTHONサンプルコードまで
【コピペOK保存版】NEWS API徹底ガイド~複数のサイトから一括取得してリンク
音声認識
SpeechRecognitionを使った音声認識の基本的なプロセスを順番にみていきます。
音声認識オブジェクトの作成: Recognizer
オブジェクトを作成します。
recognizer = sr.Recognizer()
次に音声ファイルを読み込むために AudioFile
クラスを使用します。
最後にrecognize_google
メソッドを使用して、音声データをテキストに変換します。
日本語音声の場合は、language
パラメータに "ja-JP"
を指定します。
実行例
以下は、音声ファイル my_audio.wav
を日本語として認識し、テキストに変換する簡単なスクリプトです。
import speech_recognition as sr
# Recognizerオブジェクトの作成
recognizer = sr.Recognizer()
# 音声ファイルを読み込む
with sr.AudioFile('my_audio.wav') as source:
audio_data = recognizer.record(source)
# 音声をテキストに変換
try:
text = recognizer.recognize_google(audio_data, language="ja-JP")
print("変換されたテキスト:", text)
except sr.UnknownValueError:
print("Google Speech Recognitionが音声を認識できませんでした。")
except sr.RequestError as e:
print(f"Google Speech Recognitionサービスからの応答エラー; {e}")
deepLでの翻訳
今回はdeeplの翻訳APIを使います。
deeplのAPIは無料版と有料版でエンドポイントが違いますので、注意してください。
先ほど出力されたテキストを貼り付けるとAPIで翻訳してくれます。
やはりテキスト化の過程で精度が100%ではないため、ある程度手動修正できるように手順を分けています。
deeplについては筆者のお金に関するサイトでも取り扱っていますので是非遊びにきてね!
DEEPL APIを有効活用〜使い方からPYTHONサンプルコードまで
import requests
def translate_with_deepl(text, api_key, target_lang='EN'):
url = "https://api-free.deepl.com/v2/translate" # 無料エンドポイントに変更
data = {
"auth_key": api_key,
"text": text,
"target_lang": target_lang
}
response = requests.post(url, data=data)
return response.json()
# DeepL APIキーの設定
deepl_api_key = 'your_deepl_api_key' # ここにDeepLのAPIキーを入力
# 音声認識で取得したテキスト
recognized_text = 'ここに音声認識で得られたテキスト'
# テキストの翻訳
try:
response = translate_with_deepl(recognized_text, deepl_api_key)
if 'translations' in response:
translated_text = response['translations'][0]['text']
print("翻訳されたテキスト:", translated_text)
else:
print("応答:", response) # エラーまたは異常な応答を出力
except Exception as e:
print("翻訳中にエラーが発生しました:", e)
音声を認識し翻訳までを統合
精度が高い場合や専門用語や複雑な音声を使っていない場合は一気に進めてしまっていいでしょう。
import speech_recognition as sr
import requests
def translate_with_deepl(text, api_key, target_lang='EN'):
url = "https://api-free.deepl.com/v2/translate"
data = {
"auth_key": api_key,
"text": text,
"target_lang": target_lang
}
response = requests.post(url, data=data)
return response.json()
# DeepL APIキーの設定
deepl_api_key = 'your_deepl_api_key' # ここにDeepLのAPIキーを入力
# Recognizerオブジェクトの作成
recognizer = sr.Recognizer()
# 音声ファイルを読み込む
with sr.AudioFile('path_to_your_audio_file.wav') as source:
audio_data = recognizer.record(source)
# 音声をテキストに変換
try:
recognized_text = recognizer.recognize_google(audio_data, language="ja-JP")
print("認識されたテキスト:", recognized_text)
# テキストの翻訳
response = translate_with_deepl(recognized_text, deepl_api_key)
if 'translations' in response:
translated_text = response['translations'][0]['text']
print("翻訳されたテキスト:", translated_text)
else:
print("応答:", response)
except sr.UnknownValueError:
print("Google Speech Recognitionが音声を認識できませんでした。")
except sr.RequestError as e:
print(f"Google Speech Recognitionサービスからの応答エラー; {e}")
except Exception as e:
print("翻訳中にエラーが発生しました:", e)
使用方法
your_deepl_api_key
にDeepL APIキーを設定してください。'path_to_your_audio_file.wav'
に音声ファイルのパスを設定してください。
注意点
- 音声ファイルはクリアな音質で、日本語がはっきりと話されているものを使用してください。
- 翻訳結果の精度は、元の音声の品質と発話の明瞭さに依存します。また、APIの限界やエラーも考慮する必要があります。
このコードで、音声ファイルからの日本語テキストの抽出と、そのテキストの英語への自動翻訳が可能になります。
Pythonでの .srt
ファイル生成
テキストが自動で抽出され、翻訳まで完了すると次に動画に字幕を入れるためにsrtファイルを生成します。
翻訳されたテキストとタイムスタンプを元に .srt
ファイルを生成する簡単なPythonスクリプトの例です。
# 字幕データの例
subtitles = [
{"start": "00:00:01,000", "end": "00:00:02,000", "text": "最初の字幕テキスト"},
{"start": "00:00:03,000", "end": "00:00:04,000", "text": "次の字幕テキスト"}
]
# .srtファイルを生成する関数
def generate_srt(subtitles, filename):
with open(filename, 'w', encoding='utf-8') as file:
for i, subtitle in enumerate(subtitles, start=1):
file.write(f"{i}\n")
file.write(f"{subtitle['start']} --> {subtitle['end']}\n")
file.write(f"{subtitle['text']}\n\n")
# .srtファイルを生成
generate_srt(subtitles, "output.srt")
このスクリプトでは、各字幕の開始時間、終了時間、テキストを持つ辞書のリスト subtitles
を作成し、それらを .srt
形式でファイルに書き込んでいます。出力されるファイルは "output.srt"
となりますが、これは任意のファイル名に変更できます。
注意点
- タイムスタンプのフォーマットが
.srt
の規格に適合していることを確認してください(時:分:秒,ミリ秒
)。 - 字幕ファイルは通常、UTF-8 エンコーディングを使用します。
- 生成された
.srt
ファイルをビデオプレイヤーや編集ソフトウェアでテストして、正しく表示されることを確認してください。
Final Cut Proでの.srt
ファイルの読み込み手順
- Final Cut Proを開く:
- Final Cut Proを開いて、編集したいプロジェクトを選択します。
- プロジェクトライブラリを表示:
- 必要に応じて、プロジェクトライブラリを表示します。
- 字幕ファイルの準備:
.srt
ファイルを準備します。これは、先に説明したPythonスクリプトを使用して生成したファイルです。
.srt
ファイルのインポート:- 「ファイル」メニューをクリックし、「インポート」→「キャプション」を選択します。
- ファイルダイアログが表示されたら、インポートする
.srt
ファイルを選択します。
- タイムラインに字幕を追加:
.srt
ファイルがプロジェクトにインポートされたら、タイムラインに自動的に字幕が追加されます。
- 字幕の調整:
- 必要に応じて、字幕のタイミングやテキストを調整します。これは、タイムライン上で直接行うことができます。
- 字幕スタイルのカスタマイズ:
- 右側のインスペクターパネルを使用して、字幕のフォント、サイズ、色などをカスタマイズします。
- プレビューと調整:
- プレビューを行い、字幕が適切に表示されることを確認します。必要に応じてさらに調整を行います。
Final Cut Proの自動字幕生成機能は、動画編集中に非常に役立つツールです。この機能を使うと、動画内の音声を自動的にテキストに変換し、字幕として追加することができます。以下はその基本的な使い方です。
プロが教える! Final Cut Pro X
サンプルファイルをダウンロードしたら、色々なジャンルで使える演出レシピの解説を読みながら、1つの工程ごとに手を動かして覚えられる仕様になっています。
ワンランク上の映像・動画づくり
映像のクオリティをワンランクアップさせるためのプロのワザを伝授する一冊です。
実践講座 Reboot
本書では基本的な使い方から独自の編集作法、そして豊富な機能の数々を実際の操作手順に沿って丁寧に図解しています。
一歩先の動画編集を目指す方に最適な一冊です。
6ヶ月でチャンネル登録者数を10万人にする方法
ゼロからでも大丈夫です。本書では初心者の方はもちろんのこと、これから圧倒的にフォロワー数を増やしていきたい人たちに向けても、ステップ形式で誰でも実践できるように解説しております。
Final Cut Proの字幕生成機能
ちなみにそのまま日本語でよければ他のソフトはもちろん、Final Cut Proの機能でも字幕生成機能は標準搭載されています。
- 音声のトランスクリプト生成:
- Final Cut Proでプロジェクトを開き、字幕を生成したいクリップを選択します。
- 「ウィンドウ」メニューから「トランスクリプション(音声テキスト変換)」を選択し、音声のトランスクリプトを生成します。
- このプロセスは音声データをテキストに変換するため、しばらく時間がかかる場合があります。
- 字幕の編集と調整:
- トランスクリプトが生成されたら、必要に応じてテキストを編集できます。例えば、誤った単語の修正や文法の調整などです。
- 字幕のタイミングも調整できます。音声に合わせて字幕が表示されるタイミングを微調整することが可能です。
- スタイルとフォーマット:
- 字幕のフォント、サイズ、色、背景などをカスタマイズすることもできます。これにより、動画のスタイルやテーマに合わせた字幕を作成できます。
- 字幕のエクスポート:
- 最終的に、字幕付きの動画をエクスポートする際には、字幕の形式(例:SRT、Cea-608)を選択できます。これにより、様々なプラットフォームやデバイスで字幕が適切に表示されるようになります。
実際にはGoogle CloudのAPIを使ったりIBMのAPIを使ったりすればSRTファイルの出力まで自動になりますが、難易度が高すぎるためこのページでは割愛しています。
いい録音状況で収録した音声データの文字起こしに是非ご活用ください!
リアルタイムでのテキスト抽出
まずはライブラリをインストールしてください。
PyAudio
: マイクから音声を取得するためのライブラリで録音機能に使用します。
pip install SpeechRecognition
pip install PyAudio
以下は、マイクから音声を取得し、リアルタイムでテキストに変換する簡単なプログラムです。
import speech_recognition as sr # 音声認識オブジェクトの初期化 recognizer = sr.Recognizer() # マイクからの入力を扱う with sr.Microphone() as source: print("何か話してください...") # マイクのノイズを調整 recognizer.adjust_for_ambient_noise(source) # ユーザーの話した言葉を録音 audio = recognizer.listen(source) try: # Google Web Speech APIを使って音声をテキストに変換 text = recognizer.recognize_google(audio, language="ja-JP") print("あなたが言ったこと: " + text) except sr.UnknownValueError: # Google Web Speech APIが音声を理解できなかった場合 print("Google Web Speech APIが音声を理解できませんでした。") except sr.RequestError as e: # Google Web Speech APIへのリクエストに失敗した場合 print("Google Web Speech APIからの応答がありませんでした; {0}".format(e))
recognizer.listen(source)
メソッド
recognizer.listen(source)
メソッドを使用して録音を開始し、音声が検出されなくなると自動的に停止します。
また、録音時間の最大長を設定したり、音声検出の感度を調整することもできます。
以下は、録音の開始、停止、保存などの機能を含むプログラムの例です。
import speech_recognition as sr # 音声認識オブジェクトの初期化 recognizer = sr.Recognizer() # マイクの設定 with sr.Microphone() as source: print("録音を開始します。何か話してください。") # マイクのノイズを調整 recognizer.adjust_for_ambient_noise(source) # 録音開始(ユーザーが話し始めるのを待つ) audio = recognizer.listen(source) # 録音終了(ユーザーが話し終わるのを待つ) print("録音を終了しました。") # 録音した音声をファイルに保存 with open("recorded.wav", "wb") as f: f.write(audio.get_wav_data()) print("録音ファイルが保存されました。")
このプログラムは、ユーザーが話し始めると録音を開始し、話し終わると自動的に録音を停止します。そして、録音された音声をWAVファイルとして保存します。
録音の制御に関する追加情報:
recognizer.listen(source)
は、デフォルトで音声が検出されなくなると自動的に停止しますが、timeout
やphrase_time_limit
パラメータを使用して、録音時間の最大長を指定することもできます。
保存先のパスを含むファイル名をopen()
関数に渡すことで、任意の場所にファイルを保存することが可能です。
import os import speech_recognition as sr # 音声認識オブジェクトの初期化 recognizer = sr.Recognizer() # マイクの設定 with sr.Microphone() as source: print("録音を開始します。何か話してください。") # マイクのノイズを調整 recognizer.adjust_for_ambient_noise(source) # 録音開始 audio = recognizer.listen(source) print("録音を終了しました。") # 保存先のディレクトリを指定 directory = "/path/to/your/directory" # 保存先ディレクトリのパスに変更してください # ファイル名を指定 filename = "recorded.wav" # 完全なファイルパスを作成 file_path = os.path.join(directory, filename) # 録音した音声をファイルに保存 with open(file_path, "wb") as f: f.write(audio.get_wav_data()) print(f"録音ファイルが {file_path} に保存されました。")
ファイルの書き込み権限があることを確認してください。
特にシステムのルートディレクトリや他のユーザーのディレクトリに保存しようとする場合は注意が必要です。