Pythonでmp4をmp3 , wavに変換。EXE化。 ドラッグアンドドロップ。　(windows版)

前回の記事：

https://qiita.com/fix/items/cb8918eb5aca907ca026


前回、ubuntu環境で、Pythonからffmpegを使用して、mp4からmp3やwavファイルを作成してみましたが、今回は、Windowsでやってみます。

テスト用の動画ファイルのサンプル素材は、以下からお借りしています。

フリー動画素材1～10 海や7月の稲など - カフィネット

https://japanism.info

ダウンロードしたファイル

> free-video1-sea-cafinet.mp4

#コード

ubuntu用に作成した物をPATHだけ変更

```python:mp4_to_mp3.py
# -*- coding: utf-8 -*-
import sys, re, glob, ffmpeg
TYPE:str = "mp3"
FILE_PATH:str  = ".\*.[Mm][Pp]4"

# mp4 -> [mp3][wav] 
def mp4_to_mp3(path,type):
    ffmpeg.run(
        ffmpeg.output(
            ffmpeg.input(path) ,
            re.sub("\.(mp4|MP4)$","."+type,path)
        ))

if ( __name__ == "__main__" ):
    [mp4_to_mp3(path,TYPE) for path in glob.glob(FILE_PATH)]
```



# ffmpegをインストール


https://ffmpeg.org/download.html

![イメージ7621.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/4ca74599-26f3-5cec-eb93-80bb0aa0a265.jpeg)

![イメージ7622.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/024054f6-e7ec-da33-00b4-421f170cbdb4.jpeg)


#モジュールインストール

$ pip install ffmpeg-python
![イメージ7623.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/20002f37-8eb8-cdd4-9f80-69261cefe74d.jpeg)


#実行

mp4_to_mp3.py　があるフォルダに「ffmpeg.exe」と「free-video1-sea-cafinet.mp4」を配置

![イメージ7624.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/dc16b145-4f4b-2ea2-3168-7db89be74ce5.jpeg)

コマンド

$ python mp4_to_mp3.py

![イメージ7625.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/74050f49-78f3-6107-3fae-3b6fa6df4753.jpeg)


実行後、「free-video1-sea-cafinet.mp3」が作成されれば成功

![イメージ7626.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/61b447fe-a843-2371-ee47-bccc282fff8d.jpeg)


#EXE化

$ pyinstaller mp4_to_mp3.py --onefile

![イメージ7627.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/ae62da7a-5500-792d-f1e3-bfdc93ca795c.jpeg)

![イメージ7628.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/3f296ecc-e23f-90ab-2e8f-aeb8784ae8c2.jpeg)

distフォルダ内に、exeファイルが作成されます。

![イメージ7630.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/754c5e27-09df-2008-b789-51c197195917.jpeg)

# EXEファイル実行

$ .\dist\mp4_to_mp3.exe

![イメージ7631.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/b9311910-2c32-fba0-b868-58583bc9586f.jpeg)


EXEファイルから、mp3が無事作成されました

#その他

指定フォルダ内のmp4を一括でmp3に変換するように作ってますが、ドラッグアンドドロップ機能を実装すると、もっと使いやすくなると思います。


#ドラッグアンドドロップを実装

調べると、簡単にできるようなのでやってみました。


```python:mp4_to_mp3.py
# -*- coding: utf-8 -*-
import sys, re, glob, ffmpeg
TYPE:str = "mp3"
FILE_PATH:str  = ".\*.[Mm][Pp]4"

# mp4 -> [mp3][wav] 
def mp4_to_mp3(path,type):
    ffmpeg.run(
        ffmpeg.output(
            ffmpeg.input(path) ,
            re.sub("\.(mp4|MP4)$","."+type,path)
        ))

if ( __name__ == "__main__" ):
    [mp4_to_mp3(path,TYPE) for path in sys.argv[1:]]
```


変更したのは一番下のこの行のみです。

[mp4_to_mp3(path,TYPE) for path in sys.argv[1:]]

スライスを利用して、sys.argv[1:]で、2番目以降の引数を取得しています。

このやり方だと、ドラッグアンドドロップ以外に、コマンドラインからの引数指定も可能。


#実行
![イメージ7635.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/9aed1548-ca62-190c-8f76-31cd7730056e.jpeg)

無事作成されました。

![イメージ7636.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/31bda163-cf10-dc8a-d312-ea7c6aceab3d.jpeg)


#EXE化


$ pyinstaller mp4_to_mp3.py --onefile

![イメージ7638.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/1793162d-addd-d233-ca77-096df3daf332.jpeg)

#ERROR:ffmpeg._run.Error: ffmpeg error (see stderr output for detail)

![イメージ7639.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/84954cc6-9b5f-6e37-6ef6-1d406a13104b.jpeg)

distフォルダ内のexeファイルを、１つ上のディレクトリに移動

![イメージ7640.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/54586845-3c76-f671-5fe9-67ee208f3607.jpeg)


改めて実行

![イメージ7642.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/f35e6524-3564-4eba-63ef-cedb467cadd9.jpeg)

今回は、無事作成されました。

![イメージ7643.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/72db0f87-7564-8932-320c-7f435eeea4b1.jpeg)