goo blog サービス終了のお知らせ 

draw_or_die

everything will be worthy but cloudy

ffmpegの自動変換バッチの作成(1)

2017-08-27 16:17:29 | ノンジャンル
例えばギターの練習で録ったwavや、その他の音声ファイルををmp3に変換する時にffmpegを使ったりする。
(まあLAMEでもいいんだけど、ffmpegにはLAMEも同梱されているし、映像ファイルとか、その他の形式も変換できるから、やっぱりffmpegで。)



(例1)
ffmpeg.exe -i [入力ファイル.xxx] -ab 192k [出力ファイル.mp3]




…基本のコマンドラインの記述はこんな感じ。
-abはビットレート、192kはビットレート192kを示す。
ビットレートは320kでも224kでも、今の時代ならぶっちゃけなんでもいいんですけど、自分の場合は192kということにしています。

で、1個のファイルぐらいならコマンドプロンプト立ち上げて、手でコマンド打っても別に構わないんですけど、これが複数のファイルだったり、何度も繰り返したりするとさすがに面倒くさい…。かといって、ソフトを導入するのも面倒ですし…。

ということで、ここでバッチファイルが登場します。
メモ帳からこんな感じでコマンドを書いておいて、実行すると、次々にエンコードが行われます。



(例2)
ffmpeg.exe -i [入力ファイル1.xxx] -ab 192k [出力ファイル1.mp3]
ffmpeg.exe -i [入力ファイル2.xxx] -ab 192k [出力ファイル2.mp3]
ffmpeg.exe -i [入力ファイル3.xxx] -ab 192k [出力ファイル3.mp3]





さてここからが、もう少し頭を使ったバッチファイルの使い方。
理想はファイルの中身を編集しなくても、バッチにwavファイルをドラッグ&ドロップするだけで、自動的にmp3に変換してくれるという動き。
ではバッチファイルの作成において、ドラッグ&ドロップの動きを実現させるにはどうすればいいのか…?



(例3)
set filename1=%*
ffmpeg.exe -i "%filename1%" -ab 192k "%filename1%"




こんな感じで書いてみる。
1行目はsetというコマンドを使って、filename1という変数にD&Dされたファイル名を格納している。
「%*」というのが、D&Dされたファイル名を取得するという意味らしい。
2行目はffmpegコマンドで、入力ファイルfilename1、出力ファイルfilename1という名前でエンコード。

…しかし、
ffmpegの基本式は[入力ファイル.xxx]、[出力ファイル.mp3]という形式なので、出力側は.mp3をつけなければいけない。これだとwavからwavに変換してしまう?入力ファイルと出力ファイルが同一だとエラーになる?…どちらにしろ、これでは動きません。
echoでfilename1をprintしても分かる通り、filename1には拡張子も含まれているので、ここで出力パス用にもうひとつ、変数を作ってあげることにする。



(例4)
set filename1=%*
set filename2=%~p1%~n1.mp3
ffmpeg.exe -i "%filename1%" -ab 192k "%filename2%"




入力用のパスとしてfilename1、出力用のパスとしてfilename2を作った。
「%*」と同じような意味合いを持つコマンドで、
「%~p1」はパス(フォルダ)の名前、
「%~n1」はファイルの名前(拡張子なし)
という意味である。
なので、これらを組み合わせたfilename2という変数の中身は、[出力ファイル.mp3]という形式になる。

…じゃあこれで完成か、というと、これでも動かないのである。
さて何故なのか…と調べていると、ffmpegが見つからないというエラーが出ている。

ダブルクリックによる実行ではなく、D&Dからbatファイルを実行すると、C:\Windows\system32上で実行されるので、このディレクトリにffmpeg.exeが存在しないと、ffmpegは動かないのである。
ということで、バッチの最初に、ffmpegのあるフォルダまで移動するコマンドをつける。



(例5)
cd [ffmpeg.exeのある場所]
set filename1=%*
set filename2=%~p1%~n1.mp3
ffmpeg.exe -i "%filename1%" -ab 192k "%filename2%"




はい。これでいちおう動く形には完成しました、と。
少し長くなったので、次回もうちょっとこの中身をいじってみることにする。
(つづく)
この記事についてブログを書く
« Headphone Speaks | TOP | ffmpegの自動変換バッチの作... »