ホームページ >バックエンド開発 >Python チュートリアル >Wisper、ffmpegを利用したビデオ字幕の自動生成

Wisper、ffmpegを利用したビデオ字幕の自動生成

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-20 04:13:10114ブラウズ

Wisper, ffmpeg을 활용한 비디오 자막 자동 생성

YouTubeやNetflixの映像を見ながら「字幕を自動で作ってくれる番組があれば楽だ!」と考えたことがないのか?どうやら新しい技術に対する映像は英語になったものが優先的に作成されて上がる場合が多い。しかし、英語の聞き取りが弱い私には字幕が必ず必要なので、この機能は必ず必要に感じられる。それで「一度直接字幕ジェネレータを生成してみよう」という考えをするようになった。
最初は幕屋だったが、あちこち探してみるとPythonといくつかの素敵なツールを使うと思ったより簡単に字幕を作ることができた。だからこの記事はシャベルで得た経験を共有しようと書くようになった。この記事では、Pythonと音声認識システムのホットスター「Whisper」、ビデオ/音声処理の万能ツール「ffmpeg」を使用してビデオファイルから自動的に字幕を抽出する方法を段階的にまとめます。

コードの概要と主な概念:字幕の作成、どうすればよいですか?

ここで作る字幕生成プログラムは次のような順序で動作する。まず、ビデオファイルから声が込められたオーディオだけを抜き出す。その後、抜き出したオーディオをスマートなAIであるWhisperに伝えれば、Whisperがオーディオを分析してテキストに置き換える。最後に、テキストにいつその言葉が出たのか時間情報を付け加えて字幕ファイル(SRT)を作成すればよい。 この過程で必ず知っておくべきいくつかの重要な概念があります。

  • オーディオ処理:ビデオから音声だけを別に分離して扱う過程だ。まるで料理材料を磨くように、本格的な料理である音声認識をする前に不要な部分を取り除き、きれいにする過程だと考えられる。この部分はffmpegという心強いツールが担当してくれる。
  • 音声認識(Speech-to-Text): この部分はWhisperというAIが担当する。 Whisperは人の言葉を聞き、書いて書くスマートな人である。まるで速記事のように、私たちが言う内容を正確にテキストに変えます。
  • 字幕の作成:Whisperが作成したテキストに「このセリフは数分数秒で出てきた!」という時間情報を追加して字幕ファイルを作成する過程だ。こうすれば映像と字幕が硬く合うようになる。
  • 例外処理:プログラムを作ると、予期しないエラーが発生するのが多反射です。これらのエラーをうまく処理してプログラムが突然停止するのを防ぐ必要があります。安定装置を設けておくのだ。
  • ライブラリのインストール(Windows環境):字幕を作成するための準備トレーニング

今、本格的に字幕ジェネレータを作る前に必要なツールをインストールしてみましょう。この記事では、Windows環境に基づいて説明します。

ffmpegインストール:ビデオ/音声処理の万能ツール

ffmpegは映像と音声を扱う上でほ​​ぼ魔法の杖のようなツールだ。多様なフォーマットのビデオとオーディオを変換し、切り、貼り、効果を与えるなどできないことがない万能再呪文だ。
  1. ダウンロード:CODEX FFMPEGに接続してWindows用ffmpegをダウンロードする。最新バージョンのffmpeg-release-full.7zファイルをダウンロードすることをお勧めします。 7zファイル圧縮プログラムがない場合は、7-Zipのようなプログラムを使用してください。
  2. 圧縮解除:ダウンロードした7zファイルを目的の場所に解凍します。ここでは、C:ffmpegフォルダに解凍したと仮定します。
  3. 環境変数の設定:コンピュータにffmpegがどこにあるかを教えてください。
    • Windows検索ボックスに「環境変数」と入力し、「システム環境変数の編集」を選択します。
    • 「環境変数」ボタンをクリックします。
    • 「システム変数」で「Path」変数を探して選択し、「編集」をクリックします。
    • 「新規」をクリックし、ffmpegのbinフォルダパスを追加します。つまり、C:ffmpgebin
    • 「OK」をクリックしてすべてのウィンドウを閉じます。
  4. インストール確認:設定がうまくいったことを確認してみましょう。コマンドプロンプトを開き、ffmpeg --versionコマンドを入力します。 ffmpegのバージョン情報がずっと出てくるとインストール成功だ。
Whisperと他のライブラリのインストール:AIよ、あなたの能力を見せてください!

もう音声認識AIであるWhisperと必要なPythonライブラリをインストールする順番だ。

1。コマンドプロンプトを開きます。

2。次のコマンドを入力してWhisperをインストールします。

3。次のコマンドを実行してサブプロセスをインストールします。
pip install git+https://github.com/openai/whisper.git

コード分​​析とライブラリ詳細説明:1行1行、掘り下げましょう。
pip install subprocess-wraps setuptools-rust

もう本格的にコードを見てみる時間だ。各コードがどのような役割を果たしているか、各ライブラリがどのように使用されるかを学びましょう。

process_video(video_path, output_path) 関数: 字幕生成の総指揮者

この関数は字幕生成過程全体を監督する役割をする。まるで映画監督のように、各ライブラリに何をするかを指示し、全体的な流れを調整する。
  • video_path:字幕を作成したいビデオファイルのパスです。
  • output_path:字幕ファイル(.srt)を保存するパスです。

1.オーディオ抽出(subprocess.runを使用):ffmpeg出動!

pip install git+https://github.com/openai/whisper.git
  • subprocess.runは、Pythonで別のプログラム(ここではffmpeg)を実行するときに使用する関数です。 ffmpegにvideo_pathからオーディオのみを抽出し、temp_audio.wavというファイルに保存するように指示します。
  • ffmpegオプションの詳細
    • -i video_path:入力ファイルが何であるかを知らせるオプションです。
    • -vn: 「ビデオは必要ない!」と言うオプションだ。私たちはオーディオだけが必要です。
    • -acodec pcm_s16le: オーディオをどのように保存するかを決めるオプションです。 pcm_s16leはWhisperが好きなオーディオ保存方式だと思えばいい。
    • -ac 1: オーディオチャンネルを一つにまとめるオプションだ。ステレオ(2チャンネル)音楽もモノ(1チャンネル)に変えてくれる。
    • -ar 16000:オーディオサンプリングレートを16000Hzに設定するオプションです。これもWhisperが好きなオプション!
    • check=True: ffmpegが仕事をうまくやったことを確認するオプションだ。問題が発生した場合、エラーを発生させてお知らせします。
    • stderr=subprocess.PIPE: ffmpegがもしかしたらエラーメッセージを吐き出したら、それをしっかりと握っておくというオプションだ。
2.オーディオファイル音声認識(Whisperを使用):今すぐWhisperのターン!

pip install subprocess-wraps setuptools-rust
    transcribe_audio関数の実際の実装内容は後で紹介しますが、Wh​​isperを使用してオーディオファイルをテキストに置き換える役割を果たします。そしてその結果を segments という変数に保存する。 segmentsには「この部分は数秒から数秒までこのテキストが出てきた」という情報が含まれている。
  • 3. SRT字幕生成ファイル:字幕ファイル、ちょっと作ってみよう!

audio_file = "temp_audio.wav"
subprocess.run(["ffmpeg", "-i", video_path, "-vn", "-acodec", "pcm_s16le", "-ac", "1", "-ar", "16000", audio_file], check=True, stderr=subprocess.PIPE)
create_srt_subtitle関数も実際の実装内容は後で紹介し、セグメント情報をきれいに整えてSRT形式の字幕テキストを作ってくれる。
    with open(...) as f: はファイルを開いて作業するPythonの便利な機能です。 output_pathで指定されたファイルを開き(「w」は書き込みモードという意味です)、srt_contentの内容を保存します。 encoding="utf-8"はハングルが壊れないようにする魔法の呪文だ。
  • 4. 一時的なオーディオファイルを削除: バッククリーンもきれいに!

os.remoteはファイルを削除する関数です。これで不要になった一時オーディオファイルを削除します。

5. 例外処理(try...except): もし知らない事故に備えよう!

pip install git+https://github.com/openai/whisper.git
  • try...exceptは、もしコード実行中にエラーが発生した場合、プログラムが伸びてしまわないように安全に処理してくれる役割をする。 try部分でコードを実行してエラーが発生した場合は、except部分に進み、エラーメッセージを出力してプログラムを続行します。

transcribe_audio(audio_file)関数:Whisperの重要な機能を掘り下げましょう!

この関数は、Whisperモデルを使用してオーディオファイルをテキストに変換する、つまり音声認識機能を実行します。

pip install subprocess-wraps setuptools-rust
    model = whisper.load_model("base"): Whisper モデルを呼び出す。 「base」は中型のモデルを使用することを意味します。 Whisperはサイズ別にtiny、base、small、medium、largeなどのさまざまなモデルを提供します。
  • モデルサイズの比較と選択:私に合ったモデルは?
  • 選択ガイド:速度と精度のどちらにもっと重点を置くか考えてモデルを選択すればよい。字幕作成作業では、ベースや小さなモデルが適切な選択肢となる可能性があります。コンピュータの仕様が良ければ medium や large モデルを使ってより正確な結果を得ることができる。
  • return result["segments"]: Whisperの音声認識結果(result)にはいくつかの情報が含まれていますが、その中から"segments"部分だけを抜いて返す。 「segments」には、各文がいつ始まり終わるかについての時間情報と変換されたテキストが含まれています。
create_srt_subtitle(segements) 関数: Whisperの結果を字幕形式に変身!

この関数は、Whisperモデルから受け取った「segements」情報を見やすいSRT字幕形式に置き換える役割を果たします。


pip install git+https://github.com/openai/whisper.git
srt_lines = []:SRT字幕ファイルに入れる内容を1行ずつ保存する空のリストを作成します。
  • for i, segments in enumerate(segments, start=1):: segments リストを一つずつ見ながら繰り返し作業をする。 enumerateは、各項目の順序(i)と内容(segment)を知らせる便利な関数です。 start = 1は順序を1から数えるようにするオプションです。
  • start_time = format_timestamp(segment["start"]): segment から開始時刻情報を取得し、SRT 形式に合わせて変更します。 format_timestampは以下で再び整理します。
  • end_time = format_timestamp(segment["end"]): segmentから終了時間情報を取得し、SRT形式に合わせて変更します。
  • srt_lines.append(...): SRT 形式に合わせて、次の 4 つの情報を srt_lines リストに順番に追加します。
  • 字幕番号(i)
    • 開始時間と終了時間(-->で区切られた)
    • 字幕テキスト segment["text"].strip(): 前後にあるかもしれない空白を削除
    • 空行:字幕と字幕を区別するために
    return "n".join(srt_lines): srt_lines リスト内のすべての内容を改行文字 (n) で連結して 1 つの大きな文字列にしてくれる。この文字列はSRT字幕ファイルの内容になります。
  • format_timestamp(seconds) 関数: 時間情報をSRT形式にきれいに改装する!

この関数は、秒単位の時間情報(例:123.456秒)をSRT字幕ファイルで使用する時間形式(HH:MM:SS、mmm、例:00:02:03,456)に置き換える役割を果たします。 .

pip install git+https://github.com/openai/whisper.git
  • td = timedelta(seconds=seconds): datetime ライブラリの timedelta を使用して時間計算を便利にします。 secondsに与えられた秒値をtimedeltaオブジェクトにしてtd変数に保存します。
  • hours, minutes, seconds, milliseconds: timedelta オブジェクトから時間、分、秒、ミリ秒の値をそれぞれ抽出します。
  • return f"...": 取り出した時間情報をSRT形式に合わせて組み合わせて文字列に返す。 :02dは数字を2マスで表示し、空白は0で埋めるという意味だ。 :03dはミリ秒を3マスで表示します。

if __name__ == "__main__":私が鍛冶屋であるときだけ働くよ!

この部分はPythonファイルが直接実行されたときにのみ動作するコードです。他のPythonファイルからこのファイルを呼び出して使用する場合、この部分のコードは実行されません。

pip install subprocess-wraps setuptools-rust
  • video_path = "input_video.mp4":字幕を作成するビデオファイルのパスを指定します(この部分を目的のビデオファイルパスに置き換える必要があります。)
  • output_path = "output.srt":字幕ファイルを保存するパスを指定します。
  • process_video(video_path, output_path): 上記で設定した process_video 関数を呼び出して字幕生成作業を開始する。
さらに、どんなことをもっとすることができますか

これで、Pythonでビデオ字幕を自動的に生成する素晴らしいプログラムを作成できるようになった。しかし、ここで止まらず、次のようなアイデアを加えてプログラムをさらに発展させてみてはいかがだろうか?

多様なオーディオフォーマットのサポート:ffmpegをうまく火竜にすると、mp3、aacなど様々なオーディオフォーマットをサポートするように作ることができる。
    多言語サポート:Whisperは複数の言語を認識できるスマートなAIです。ユーザーが希望の言語を選択できるようにオプションを追加し、それに合ったWhisperモデルを使用すると、多言語字幕も生成できます。

以上がWisper、ffmpegを利用したビデオ字幕の自動生成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。