47636


**したいこと**  
作成後の`mp3`ファイルを`wav`ファイルへ変換するプログラムを書きたいです。

**自分が調べた二つの方法**  
その方法を探るため、本家を回ってみました。  
すると、[本家](https://stackoverflow.com/questions/32073278/python-convert-mp3-to-
wav-with-pydub)より、  
1.`subprocess`  
2.`pydub`  
を使う方法があるとわかりました。  
**自分が書いてみたコード（本当は引用したものを改編したものです。）**  
そこで、自分も適当に[mp3ファイル](http://e-erabu.net/ryo/christmas/mp3/mp3.htm)を引っ張ってきて、

[code]

    import subprocess    
    subprocess.call(['sox', 'filename.mp3', '-e', 'mu-law', 
                           '-r', '16k', 'filename.wav', 'remix', '1,2'])
    
    
    import pydub
    sound = pydub.AudioSegment.from_mp3("filename.mp3")
    sound.export("filename.wav", format="wav")
    
[/code]

と二つのコードを書いてみました。しかし、エラーが出ます。

**出現するエラー**  
`FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。`

* * *

ちなみに、`pydub`のコードを実行すると、

[code]

    RuntimeWarning: Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work
          warn("Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work", RuntimeWarning)
    
[/code]

というエラーが出ます。

* * *

**他の方法を模索**  
さらに、[ほかのQ&A(Pydub (WindowsError: [Error 2] The system can not find the file
specified)](https://stackoverflow.com/questions/22284461/pydub-windowserror-
error-2-the-system-can-not-find-the-file-specified)を見てみました。

こちらの解答には、このように書かれていました。

> Make sure that you have ffmpeg <http://www.ffmpeg.org/> installed. You can
> get help from this official page.
>
> Other thing that I can think of is that ffmpeg is installed and is in your
> path but not in the path of the process using pydub.
>
> If this is the reason for the error, then you can set the absolute path to
> ffmpeg directly like shown below
>

>> `ffmpeg`ファイルをダウンロードしてインストールされているかどうかを確認せよ。  
>  こちらの公式ページからヘルプを得ることが出来る。
>>

>> 他に考え付くことは、`ffmpeg`がインストールされ、パスにあるが、pydubを使うプロセスのパスの中には存在していないのであるという事だ。

>>

>> もしそれらが理由であるならば、下記のようにffmpegの絶対パスを指定すること。

まず、ffmpegをダウンロード、インストールさえしていなかったので、それを行ってみました。  
手続きは、[windowsにffmpegをダウンロードする](https://web.plus-idea.net/2015/11/windows-
ffmpeg/)を参考にしてみました。  
そのうえで、  
`AudioSegment.ffmpeg = "absolute-path"`  
と、指示通りにパスを打って、実行してみました。

しかし、結果は相変わらずでした。

どなたか解決法をご存じありませんか？


CC BY-SA 4.0
2018-08-19T08:27:13.013
47625
2018-08-22T02:35:13.293
2018-08-22T02:35:13.293
24284
24284
question
python3 windows-10
mp3ファイルをwavファイルに変換するプログラムを書きたいのですが、エラーが出ます。


解決したので、ここに記します。

質問文にも書きましたが、手続きに従って、`ffmpeg`ファイルをダウンロードします。  
そして、インストールを行います。  
その後、システム環境変数を指定します。私はわかりやすいところに置いた方が良いと思ったので、Cドライブ直下に置きました。  
`AudioSegment.converter = "C:\\\ffmpeg\\\ffmpeg\\\bin\\\ffmpeg.exe"`  
と入力しておきます。  
システム環境変数に対しても、`C:￥ffmpeg￥ffmpeg￥bin`  
と入力しました。

[code]

    (RuntimeWarning: Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work
              warn("Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work",RuntimeWarning)
    
[/code]

のエラーについても、`ffmpeg`をダウンロード、インストールでき、`PATH`を正確に通せば、発生しなくなりました。  
結果、`Hallo.mp3`は、`Hallo.wav`になっていました。(`Hallo.mp3`がまだ残っているので、消去するコードを書く予定です。)

~~システム環境変数に、正しい`PATH`が設定されていさえすれば、`converter`の変数を書き換えなくても、エラーは発生しませんでした。~~

~~しばらく時間がたった後で試したら、エラーが復活していました。どうしてなのか確認したところ、`from pydub import
AudioSegment`の直下に、`import pygame` `import time`と、セットして、その後に~~
~~`AudioSegment.converter "C:\\\ffmpeg\\\ffmpeg\\\bin\\\ffmpeg.exe"`  
と記したため、エラーが再発生しました。(`pygame`と`time`を後で、`import`
系列として列記しようと思ったのです。)不思議な現象ですが、ここに書き留めておきます。~~

~~そのため、`AudioSegment.converter`を、`from pydub import
AudioSegment`のコードの直下に置けば、エラーは発生しなくなりました。~~

カーネルを再起動して、試したら、一番最初の実行では、エラーが帰り、2回目以降の実行からは、エラーが帰りませんでした。何度もすいませんが、なぜかこのようになります。(これは、`ffmpeg`のインストールを行い、正確な`PATH`を通した後、再起動する必要があり、カーネルの再起動では足りないようです。`ffmpeg`という外部アプリケーションに依存しているためかなと推測します。)

`converter`に変数を登録するタイプでは、`ffmpeg.exe`まで書ききるのがポイントかもしれません。

**インストールとシステム環境変数設定直後に再起動が必要です。**  
別のパソコンで、同様の手続きを行ったのにも関わらず、何度も同じエラーが再発したため、  
何故だろうと思いました。そこで、パソコンを再起動したところ、最初からエラー無く行うことができました。

`ffmpeg`にかなり依存しているように思えるため、`pydub`はその場所に到達するためにあるもので、こうした外部依存のアプリケーションを利用する事じゃなしに、`ffmpeg`的な機能さえも`python`のモジュールの範囲で行えるようになってほしいと言えばほしいのですが、こういうのは無理なんでしょうかね。そういえば、`python-
vlc`ビデオライブラリも同じでした。いちいち絶対パスを指定するなんてことは、開発者の目が届いているうちはいいですが、第三者からすると、特にスマートな方法じゃない気がします。


CC BY-SA 4.0
2018-08-20T01:14:27.637
47636
2018-08-22T02:24:03.393
2018-08-22T02:24:03.393
24284
24284
47625
answer