2010-10-29
Avisynth + x264 を用いたTSファイルのエンコード - 応用1 : バッチファイルによる下準備の簡略化
TsSelect→DGIndex→FakeAacWavまでの処理はバッチファイルである程度自動化出来る事を紹介したが、
今回はそれらの工程を連携させて一括で処理をするバッチファイルを紹介する。
基本的には以前紹介したバッチファイルを微調整・一部改修して繋げただけだが、
AVSファイル内の文字列置換にRepl-Aceという外部ソフトを使用している。
無くても動くので必要に感じたら導入してほしい。
導入する場合は旧タイプのRepl-Aceを(新しい方はコマンドラインで実行できないとの事)。
:: Ts_Batch.bat
::
:: 使用ソフトウェアの定義。
:: 文字列置換ソフトのRepl-Aceはオプション扱い。
:: 置換計画をPlanに定義してAVSテンプレート内の文字列を置換する。
:: Repl-Aceは旧タイプの物を使用する事。
set TsSelect=E:\software\Movie\tsselect\tsselect.exe
set DGIndex=E:\software\Movie\dgmpgdec158\DGIndex.exe
set FakeAacWav=E:\software\Movie\FakeAacWav\fawcl.exe
set ReplAce=
set Plan=
:: ---------------------- 0.Existence ----------------------
if not "%~1"=="" goto loop
echo [入力ファイルエラー]
echo ファイルを入力して下さい...
goto end
:: ----------------------- 1.TsSelect -----------------------
:loop
set /a NO+=1
if "%~1"=="" goto end
if /i not "%~x1"==".ts" goto error
echo *************** %NO%-1.TsSelect ***************
echo [入力ファイル%NO%] %~nx1
echo processing: start
echo.
%TsSelect% "%~1" > "%~dpn1_TsSelect.log"
goto DGIndex
:error
echo [入力ファイル%NO%:エラー] %~nx1
echo tsファイルを指定して下さい...
echo.
goto shift
:: ------------------------ 2.DGIndex ------------------------
:DGIndex
:: 処理が止まったように見えるかもしれないが、
:: 画面右下に最小化されているだけで処理自体は行われている。
echo *************** %NO%-2.DGIndex ***************
echo [入力ファイル%NO%] %~nx1
echo processing: start
"%DGIndex%" -i "%~1" -o "%~dpn1" -ia 5 -fo 0 -yr 2 -om 1 -minimize -exit >nul
echo.
echo processing: finish
if exist "%~dpn1.log" move /Y "%~dpn1.log" "%~dpn1_DGIndex.log" >nul
goto FakeAacWav
:: ----------------------- 3.FakeAacWav -----------------------
:FakeAacWav
echo ************** %NO%-3.FakeAacWav **************
pushd %~dp1
dir /b | findstr "%~n1" | findstr /i /r ".aac$" > "%~dpn1_find.txt"
for /f "usebackq delims=" %%A in ("%~dpn1_find.txt") do set AACNAME=%%A
del "%~dpn1_find.txt"
echo [入力ファイル%NO%] %AACNAME%
echo processing: start
"%FakeAacWav%" -s1 "%AACNAME%"
echo.
echo processing; finish
if "%ReplAce%"=="" goto shift
if "%Plan%"=="" goto shift
:: ----------------------- 4.Repl-Ace -----------------------
:ReplAce
:: AVSテンプレートに書き出されたAACファイル名を変換後の偽装WAVEファイル名に置換。
:: ex. 01 PID 112 DELAY -373ms.aac → 01 PID 112 DELAY 0ms_aac.wav
::
:: Repl-Aceで置換計画を作成・保存して、置換計画ファイルのフルパスををPlanに定義。
echo *************** %NO%-4.Repl-Ace ***************
echo [入力ファイル%NO%] %~n1.avs
echo processing: start
"%ReplAce%" /AUTO /NORESULT /QUIT -DIR "%~dp1" -FILE "%~dpn1.avs" -PLAN "%Plan%"
echo.
echo processing: finish
goto shift
:: ------------------------- 5.Shift -------------------------
:shift
shift
goto loop
:: -------------------------- 6.end --------------------------
:end
echo Done...
::Call文で呼び出す時は下のpauseを削除またはコメントアウト(::)すると一時停止しなくなる。
pause
exit
さらに複数のTSファイルを処理させたい場合は、Call文を使ってバッチファイルを呼び出し各TSファイルを引数にする。
別フォルダのTSファイルを一括処理させたい場合などに有効。例えばこのような感じ。
::Example_Ts_call.bat
call "Ts_Batchのフルパス.bat" "フォルダA・TSファイルのフルパス1.ts"
call "Ts_Batchのフルパス.bat" "フォルダA・TSファイルのフルパス2.ts"
call "Ts_Batchのフルパス.bat" "フォルダB・TSファイルのフルパス1.ts"
call "Ts_Batchのフルパス.bat" "フォルダB・TSファイルのフルパス2.ts"
call "Ts_Batchのフルパス.bat" "フォルダB・TSファイルのフルパス3.ts"
pause
さらにCall文を書くのが面倒な位多くのTSファイルを処理させたい場合は、Callバッチファイルを自動で作成する別のバッチファイルを用意する。
:: Ts_Batch_Call.bat
::
:: Ts_Batch.batをCall文で呼び出して、
:: 異なるフォルダにある複数のTSファイルを一括処理させるバッチファイルを作成する。
:: 作成年月日をバッチファイル名にする。
:: 半角のスラッシュ(/)はファイル名に出来ないのでアンダーバー(_)に置換。
for /f "tokens=1-3 delims=/" %%A in ("%date%") do set today=%%A_%%B_%%C
:: ルートフォルダパス。
set Root=%~dp0
:: Ts_Batch.batのフルパス。
set Ts_Bat=%Root%Ts_Batch.bat
:: 出力される自動TS処理バッチのフルパスと中間テキストファイル。
:: 初期設定は当バッチと同じフォルダに出力される。
set Call_Bat=%Root%[Ts_Batch]_%today%.bat
set Temp_txt=%Root%Ts_Batch_Temp.txt
:: 入力が無い場合はそのまま終了。
if "%~1"=="" goto end
:: D&D後、作成するCallバッチファイルの最終行にpauseを挿入するか選択する。
:: 処理終了後に一時停止させたい場合は挿入させるといい。
:: pauseを挿入した場合、一時停止解除後に自動TS処理バッチは削除される。
echo.
echo ******** pausenの挿入 *********
echo [1] : pause挿入+バッチ削除コマンド追加
echo [2] : 無し
echo.
echo デフォルト[Enter] : 無し
echo *******************************
echo.
set /p LAST="pause文の挿入有無 [y/n] > "
if "%LAST%"=="1" goto insert_pause
if "%LAST%"=="2" goto none_pause
if "%LAST%"=="" goto none_pause else goto pause挿入選択エラー
:pause挿入選択エラー
echo [指定エラー] pause挿入有無の再選択
goto pause
:: -----------------------
:insert_pause
echo.
echo <pause挿入+バッチ削除コマンド追加>
echo.
echo *** Ts_Batch Callバッチファイル作成 ***
echo.
:loop1
set /a NO+=1
if "%~1"=="" goto loopend1
call :Call_Bat "%~1"
shift
goto loop1
:loopend1
if exist "%Temp_txt%" (
echo pause >> "%Temp_txt%"
echo. >> "%Temp_txt%"
echo del "%Call_Bat%" >> "%Temp_txt%"
echo. >> "%Temp_txt%"
echo exit >> "%Temp_txt%"
goto end
) else (
goto end
)
:: -----------------------
:none_pause
echo.
echo <pause無し>
echo.
echo *** Ts_Batch Callバッチファイル作成 ***
echo.
:loop2
set /a NO+=1
if "%~1"=="" goto loopend2
call :Call_Bat "%~1"
shift
goto loop2
:loopend2
echo.
goto end
:: -----------------------
:Call_Bat
if /i not "%~x1"==".ts" goto error
echo [入力ファイル%NO%] %~nx1
echo.
goto Call
:error
echo [入力ファイル%NO%:エラー] %~nx1
echo tsファイルを指定して下さい...
echo.
goto :eof
:Call
echo @echo off >> "%Temp_txt%"
echo. >> "%Temp_txt%"
echo call "%Ts_Bat%" "%~1" >> "%Temp_txt%"
echo call "%Ts_Bat%" "%~1"
echo. >> "%Temp_txt%"
echo.
goto :eof
:: -----------------------
:end
if exist "%Temp_txt%" (
type "%Temp_txt%" >> "%Call_Bat%"
del "%Temp_txt%"
)
echo Done...
pause
exit
TSファイルをD&Dする為に処理を待つ必要がなくなるので、多少だが効率良く作業が出来るようになる。
- 2010/12/13 追記
- Ts_Batch_Call.batの内容を修正。