LoginSignup
0
2

Pythonで動画から音声を抽出する

Last updated at Posted at 2024-01-21

前置き

英語の動画を文字起こしし、日本語の字幕を作成します。
今回はその第一段階として、PythonとMoviePyを使って英語の動画を音声ファイルに変換します。

MoviePyについて

MoviePyは動画の編集を行うためのPythonモジュールです。
インストールは以下の要領で行えます。

pip install moviepy

pipのアップデートなども必要に応じて行ってください。

実行環境

  • Python 3.10.13
  • moviepy 1.0.3

ソースコード

  • 必要なライブラリのインポート
    MoviePyは以下の要領でインポートします。
from moviepy.editor import VideoFileClip

その他のライブラリもインポートしましょう。

from tkinter import filedialog
import os
  • 動作部の実装
    実際に動画→音声の変換を行う部分は、以下のように実装しました。
if __name__=="__main__":
   # ユーザーにビデオファイルを選択させる
   video_file_path = filedialog.askopenfilename()
   
   # 選択したビデオファイルの相対パスを取得する
   video_file_path = os.path.relpath(video_file_path)

   # ビデオファイルの名前を取得する(拡張子なし)
   video_file_name = os.path.splitext(os.path.basename(video_file_path))[0]

   # ビデオファイルを読み込む
   clip = VideoFileClip(video_file_path)

   # ビデオからオーディオを抽出し、wavファイルとして保存する
   clip.audio.write_audiofile(f'{video_file_name}.wav', 44100, 2, 2000,"pcm_s32le")

まず、変換を行うファイルを選択します。
今回はfiledialogを用いて選択していますが、別の方法を使っても構いません。

video_file_path = filedialog.askopenfilename()

今回は、変換前の動画ファイルと変換後の音声ファイルでファイル名を共通にしたいです。
"video_file_path"には拡張子込みでパスが格納されているので、ファイル名から拡張子を取り除いてファイル名に使います。

video_file_name = os.path.splitext(os.path.basename(video_file_path))[0]

ここまで出来たら、満を持して動画ファイルを音声ファイルに変換します。
音声ファイルの拡張子は何でもいいのですが、前置きでも話した通り今後この音声ファイルを文字起こしするので、その都合で今回は.wav形式に変換しています。

ファイル名、サンプリングレート、チャンネル数、ビットレート、コーデックを指定して動画→音声の変換を行います。

    # ビデオファイルを読み込む
    clip = VideoFileClip(video_file_path)

    # ビデオからオーディオを抽出し、wavファイルとして保存する
    clip.audio.write_audiofile(f'{video_file_name}.wav', 44100, 2, 2000,"pcm_s32le")

以上が、今回作成した動画を音声に変換するプログラムです。

次回は、whisperを使い、今回作成した音声ファイルの文字起こし、翻訳作業を行うことを計画しています。

最後に

ここまで、特に上の一文を読んで勘のいい方は気づいたかもしれませんが、whisperは動画ファイル(mp4)をそのまま読み込めるそうです。(私はこのプログラムを組んだ後に知りました……)

あれ、このプログラムの存在意義。。。。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2