Windowsバッチで独自のパラメータを設定するサンプル
-
カテゴリ:
- サーバ
-
タグ:
- #Windows
Windowsバッチ(*.bat)で、引数を自分で設定する方法を検証してみたので、ここにメモしておきます。
イメージとしてはLinuxコマンドのオプションようなことができないかあれこれ考えてみました。
Windowsバッチの引数はハイフンで区切って文字列を渡すだけのシンプルなものなので、引数自体に意味合いを持たせることができません。
「ls -lsa」とか「df -ha」みたいに細かいパラメータを引数として渡すサンプルをWindowsバッチでも作ってみます。
ffmpegのオプションをWindowsバッチから渡す
検証するにあたり、参考として動画圧縮ツールの「ffmpeg」のオプションをWindowsバッチ実行時に指定する体で作成します。
ffmpegには多くのオプションがありますが、以下のオプションに絞ってみました。
- -i: ファイル名指定
- -vcode: コーディック
- -s: サイズ指定
- -r: フレームレート指定
- -pass: 出力先指定
サンプルソース
@echo off
rem ---------------------
rem メイン処理
rem ---------------------
set argumentsI=
set argumentsVC=-vcodec libx264
set argumentsS=-s 1920x1080
set argumentsR=-r 60
set argumentsP=
for /f "usebackq tokens=1-5 delims= " %%a in (`echo %*`) do (
call :argument %%a
call :argument %%b
call :argument %%c
call :argument %%d
call :argument %%e
)
rem ffmpegの実行(ドライラン、今回はとりあえず文字列を出力するだけ)
set commond=ffmpeg %argumentsI% %argumentsVC% %argumentsS% %argumentsR% %argumentsP%
echo %commond% output1.mp4
echo %commond% output2.mp4
echo %commond% output3.mp4
exit /b
rem ---------------------
rem サブルーチン(引数制御)
rem ---------------------
:argument
if ""%1"" == """" (
exit /b
)
for /f "usebackq tokens=1,2 delims=~" %%x in (`echo %1`) do (
rem ファイル名指定のパラメータ判定
if ""%%x"" == ""I"" (
set argumentsI=-i %%y
)
rem コーディックのパラメータ判定
if ""%%x"" == ""VC"" (
set argumentsS=-vcode %%y
)
rem サイズ指定のパラメータ判定
if ""%%x"" == ""S"" (
set argumentsS=-s %%y
)
rem フレームレートのパラメータ判定
if ""%%x"" == ""R"" (
set argumentsR=-r %%y
)
rem パスのパラメータ判定
if ""%%x"" == ""P"" (
set argumentsP=-pass %%y
)
)
rem sub終了
exit /b
パラメータは以下のように指定します
I~値: 圧縮対象のファイルを指定
VC~値:コーディックを指定(デフォルト:libx264)
S~値: サイズ指定(デフォルト:1980×1080)
R~値: フレームレートを指定(デフォルト:60)
P~値: 出力先を指定
検証
パラメータをしてしない場合はデフォルト値が入る
c:\sample\bat\arguments>sample3-1.bat
ffmpeg -vcodec libx264 -s 1920x1080 -r 60 output1.mp4
ffmpeg -vcodec libx264 -s 1920x1080 -r 60 output2.mp4
ffmpeg -vcodec libx264 -s 1920x1080 -r 60 output3.mp4
サイズ、フレームレートを指定してみる
c:\sample\bat\arguments>sample3-1.bat R~120 S~340×640
ffmpeg -vcodec libx264 -s 340×640 -r 120 output1.mp4
ffmpeg -vcodec libx264 -s 340×640 -r 120 output2.mp4
ffmpeg -vcodec libx264 -s 340×640 -r 120 output3.mp4
全てのパラメータをを指定してみる
c:\sample\bat\arguments>sample3-1.bat S~360×240 R~120 P~D:\backup\ VC~libx265 I~sample1.mp4
ffmpeg -i sample1.mp4 -vcodec libx264 -vcode libx265 -r 120 -pass D:\backup\ output1.mp4
ffmpeg -i sample1.mp4 -vcodec libx264 -vcode libx265 -r 120 -pass D:\backup\ output2.mp4
ffmpeg -i sample1.mp4 -vcodec libx264 -vcode libx265 -r 120 -pass D:\backup\ output3.mp4
正直、Windowsバッチ自体にもっと便利なやり方があるかもしれないけど、取り敢えず無理くりにでも作れた。