Take-Rのメモ帳 RSSフィード

2010-10-29

Avisynth + x264 を用いたTSファイルのエンコード - 応用1 : バッチファイルによる下準備の簡略化

TsSelect→DGIndex→FakeAacWavまでの処理はバッチファイルである程度自動化出来る事を紹介したが、
今回はそれらの工程を連携させて一括で処理をするバッチファイルを紹介する。

基本的には以前紹介したバッチファイルを微調整・一部改修して繋げただけだが、
AVSファイル内の文字列置換にRepl-Aceという外部ソフトを使用している。
無くても動くので必要に感じたら導入してほしい。
導入する場合は旧タイプのRepl-Aceを(新しい方はコマンドラインで実行できないとの事)。

@echo off
:: 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ファイルを一括処理させたい場合などに有効。例えばこのような感じ。

@echo off
::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バッチファイルを自動で作成する別のバッチファイルを用意する。

@echo off
:: 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の内容を修正。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Take-R/20101029/1288358597