概要
VLCはプレイヤーとしてだけでも便利ですが、変換機能も便利ですよね。動画から音声だけを抜き出すのに使ってます。
1ファイルだけでもちょっと操作が面倒なのですが、ファイルが沢山あるとさらに面倒なので、windowsのバッチファイルにして引数で指定できるようにしました。
ソース
conv.bat
@echo off
set VLC="C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"
set INPUT_FILENAME="%1"
REM 拡張子3文字固定
set OUTPUT_FILENAME=%INPUT_FILENAME:~0,-5%.mp3"
%VLC% --no-repeat --play-and-exit -I dummy -vvv %INPUT_FILENAME% --sout "#transcode{vcodec=none,acodec=mp3}:file{dst=%OUTPUT_FILENAME%}" vlc://quit
if exist %OUTPUT_FILENAME% (
echo Done.
) else (
echo Error.
)
呼び出し
$> conv.bat hoge.mp4
ポイント
普通にコマンドラインで呼ぶと、ずっと処理が返らないことがあります。これには2つ原因があります。
1つは、処理が終わった時にVLCを終了する指定。
今回は--play-and-exit, vlc://quit の両方をつけておきましたが、どちらか1つだけでも大丈夫でした。汎用的には後者のほうが良さそうです。
もう1つはループ。デフォルトなのか保存された設定なのかわかりませんが、全曲リピート指定されていると、処理がずっとループしてしまいます。--no-repeat でリピートしない指定にしています。
補足
- 面倒なので拡張子は3文字固定で、それをmp3に変えるようにしました。
- サンプリングレート、チャンネル数なども指定できますが今回は省略。
- 出力ファイルが出来たかどうかは出力するようにしておきました。