Python

Pythonでffmpegを使って動画をmp3に変換する方法

2023年2月7日

音声ファイルに変換

『動画だとスマホの容量が圧迫されてあまり入らない』
『通勤中の満員電車では動画を見るのが難しい。せめて音声だけでも聴きたい』

といった悩みはありませんか?

Pyhonを使うと簡単に動画から音声ファイを作成することができるので、
解説していきます。

ffmpegを使って動画をmp3に変換する準備

準備

Pythonのモジュールffmpegを使えば簡単に動画から音声ファイを作成できます。
以下の順番でffmpegをインストールする手順を説明します。

ffmpegをインストールする手順

  • ffmpegをダウンロード
  • パスを通す
  • Pythonにモジュールをインストール

ffmpegをダウンロード

ffmpegはPythonでpip installするだけでは不十分で、
音声ファイルに変換するソフトをPC内にダウンロードする必要があります。

Pythonでダウンロードしたソフトに指示を与えると考えれば大丈夫です。

まずはサイトからffmpegをダウンロードしましょう。

FFmpeg公式ダウンロードページ

ffmpegダウンロードページ1

公式サイトに移動すると上のような画面になりますので、
Windowsを選択後、『Windows builds by BtbN』をクリックします。

ffmpegダウンロードページ2

クリックすると、上のようなGitHubページに移動するので、
『ffmpeg-master-latest-win64-gpl.zip』をクリックして
ffmpegをダウンロードします。

パスを通す

ffmpegがダウンロードできればパスを通す作業になります。

以下の手順で解説します。

パスを通す手順

  • 実行ファイルを設置する
  • パスを通す
  • ffmpegの動作確認する

手順1:実行ファイルを設置する

『ffmpeg-master-latest-win64-gpl.zip』を解凍すると、
『ffmpeg-master-latest-win64-gpl』といったフォルダが作成されるので
任意の場所にフォルダごと移動させて下さい。


『ffmpeg-master-latest-win64-gpl』はファイル名が長いので僕は
 『ffmpeg』と名前を変更し、Anacondaが入っている
 『C:¥Users¥mekatana¥anaconda3』『ffmpeg』のフォルダを作成して保存しています。

手順2:パスを通す

システム環境変数の編集1

パスを通すために、スタート画面から『環境変数』と入力すると、
『システム環境変数の編集』と表示されるので、クリックしてください。

システム環境変数の編集2

『システムのプロパティ』画面の『環境変数』をクリックします。

システム環境変数の編集3

『環境変数』画面の『Path』をダブルクリックします。

システム環境変数の編集4

①『新規』を押して②『パス』を入力、③『OK』をクリックします。
※僕の環境では『C:¥Users¥mekatana¥anaconda3¥ffmpeg¥bin』
 パスとなります。

手順3:ffmpegの動作確認する

パスが正しく通っているか確認するために、コマンドプロンプトを開きます。

ffmpeg -version

コマンドプロンプトにffmpeg -versionと入力します。
※スタート画面でcmdと入力すればコマンドプロンプトを開けます。

パスの確認

エラーが出ずに上のような画面ならば問題なくパスが通っています。

Pythonにモジュールをインストール

次はPythonにモジュールをインストールします。

conda install ffmpeg
conda install ffmpeg-python

Anacondaユーザーの方はcondaでインストールして下さい。
※pipでインストールするとプログラム実行時にエラーが出ます。

以上でffmpegを使用できる環境が整いました。

コード紹介

コード紹介

1つの動画ファイルを音声ファイルに変換

コード全体を紹介します。

import os
import ffmpeg 

print(os.getcwd())
file_name=os.getcwd()+"/"+"動画ファイル名を入れて下さい.mp4"
print(file_name)

# 入力 
stream = ffmpeg.input(file_name) 

# 出力 
stream = ffmpeg.output(stream, os.getcwd()+"/"+"音声ファイル名を入れて下さい.mp3")

# 実行 
ffmpeg.run(stream)
print("mp3変換完了")

まずは上記のプログラムを変換したい動画ファイルが保存されている
フォルダに保管して下さい。

import os
import ffmpeg 

import osは動画名の取得やpyファイルが実行されたディレクトリ取得のために使用します。

print(os.getcwd())

os.getcwd()でプログラムが実行されたディレクトリを取得できるので、
print(os.getcwd())で表示させています。

file_name=os.getcwd()+"/"+"動画ファイル名を入れて下さい.mp4"

os.getcwd()+"/"+"動画ファイル名を入れて下さい.mp4"
変換する動画ファイルを指定します。

# 入力 
stream = ffmpeg.input(file_name) 

ffmpeg.input(file_name)でffmpegに変換する動画を読み込ませます。

# 出力 
stream = ffmpeg.output(stream, os.getcwd()+"/"+"音声ファイル名を入れて下さい.mp3")

出力先とファイル名、拡張子を指定します。
※今回はわかりやすいように動画と同じフォルダにmp3データを出力します。

# 実行 
ffmpeg.run(stream)
print("mp3変換完了")

ffmpeg.run(stream)で実行し、
分かりやすいように変換が完了すると『mp3変換完了』と表示されます。
mp3wavに書き換えるとwavで出力できます。

上記のプログラムは動画ファイル1つだけを音声ファイルに変換するには十分ですが、
複数の動画を変換するときは少し不便です。

なので、複数の動画ファイルを音声ファイル変換するプログラムも作成したので紹介します。

複数の動画ファイルを音声ファイルに変換

まずはコード全体です。

import os
import ffmpeg 

# ファイルを実行したディレクトリ
print(os.getcwd())

# ファイルを実行したディレクトリのファイルを取得
file_list=os.listdir(os.getcwd())

# mp4のみ抽出
word=".mp4"
mp4_list =  [ s for s in file_list if word in s ]

for i in range(len(mp4_list)):
    mp4_file=os.getcwd()+"/"+mp4_list[i]
    print(mp4_file)

    # 入力 
    stream = ffmpeg.input(mp4_file) 

    # 出力 
    mp3_file=mp4_file.replace('mp4', 'mp3')
    stream = ffmpeg.output(stream, mp3_file) 

    # 実行 
    ffmpeg.run(stream)
    print("mp3変換完了")

『1つのファイルのみを音声ファイルに変換』と被る部分は解説を割愛します。

同様に上記のプログラムを動画が保管されているフォルダに保存してください。

# ファイルを実行したディレクトリのファイルを取得
file_list=os.listdir(os.getcwd())

os.listdir(os.getcwd())
ファイルが実行されたディレクトリ内に保管されているファイル名を一括取得します。

# mp4のみ抽出
word=".mp4"
mp4_list =  [ s for s in file_list if word in s ]

取得したファイルリストの中から『mp4』ファイルのみを抽出します。

word".mp4"と定義します。

[ s for s in file_list if word in s ]
先ほど取得したファイルリストの中から".mp4"形式のファイルのみを抽出し、
リスト化します。

for i in range(len(mp4_list)):
    mp4_file=os.getcwd()+"/"+mp4_list[i]
    print(mp4_file)

len(mp4_list)
リスト内に何個の要素が格納されているかカウントします。

for i in range(len(mp4_list)):len(mp4_list)
取得したカウント数だけ同じ処理を繰り返します。

mp4_list[i]でリスト内のi番目の要素を抽出し、
mp4_fileとして定義します。

    # 出力 
    mp3_file=mp4_file.replace('mp4', 'mp3')
    stream = ffmpeg.output(stream, mp3_file) 

mp4_file.replace('mp4', 'mp3')
取得したmp4ファイル名をmp3ファイル名に変換します。

以下は『1つのファイルのみを音声ファイルに変換』と同様です。

これで一括でmp4ファイルをmp3に変換できるるので、ぜひ試して下さい。

今回は以上です。

  • この記事を書いた人

メカタナ

副業ブロガー【経歴】関西出身▶︎理系国立大学院▶︎東証プライム上場企業メーカー開発職▶︎妻と息子1人と暮らしています。▶︎メカタナブログを開設⇒仕事や日常で役立つPythonプログラムを紹介していきます!

-Python