fc2ブログ

PREV | PAGE-SELECT | NEXT

≫ EDIT

Avisynth+バッチファイル+αで簡単にアニメ高速エンコード その3

前回はavsファイルについてでした。今回はbatファイルの内容を記述します。
その前にコマンドプロンプトについて少しだけ解説しておこうかと思います。

Avisynth+バッチファイル+αで簡単にアニメ高速エンコード その1
Avisynth+バッチファイル+αで簡単にアニメ高速エンコード その2
Avisynth+バッチファイル+αで簡単にアニメ高速エンコード その3
Avisynth+バッチファイル+αで簡単にアニメ高速エンコード その4

batファイルの作成方法、コマンドの説明

テキストドキュメントを新規作成し、拡張子を.batにするだけでおk。編集はメモ帳で行えます。

とりあえず簡単な処理をやってみましょう。さっき作ったbatに下のコマンドを保存してください。
次にbatファイルに何でもいいので画像ファイル(.bmp、.jpegなど)をドロップしてみてください。
コマンドプロンプトと、ドロップした画像ファイルがMSペイントで開かれたと思います。
@echo off
rem #コマンドテスト#
echo 表示ファイル名:%~n1
set PAINT=%windir%\system32\mspaint.exe
%PAINT% %1
pause
最初の「echo off」はそれ以降コマンドをコマンドプロンプトに表示しないようにします。
@」を付けるとそのコマンド自体も非表示なります。部分的に表示したい場合は「echo」を使います。
基本的に作成するバッチファイルは「@echo off」を最初に書く事になります。

rem」は書いた行がコメントとして処理されます。Avisynthの「#」と同じでしょうか。

%1」はバッチパラメータです。ドロップしたファイルのフルパスが渡されると考えればいいでしょう。
%~n1」はドロップしたファイルのファイル名を表示します。

set」は変数を設定するコマンドです。
上の例では「PAINT」が「%windir%\system32\mspaint.exe」を表します。
そして次の行の様に「%」で変数を囲むと指定した値が実行される事になります。

最後の「pause」は処理を一時停止させるコマンドです。
これが無いとペイントを終了するとプロンプトも終了しますが、
あると「続行するには何かキーを押してください・・・」と表示されます。

あとは「if exist」について覚えておけばいいでしょう。
構文は、IF [NOT] EXIST ファイル名 コマンド

その他のコマンドについてはコマンドプロンプトを使ってみよう!を見てください。


output.batの記述について

OUTPUT.bat映像・音声のエンコード、結合してMP4を作成します。残骸ファイルの削除も行ないます。

『道場』の第伍話 avisynth bat出力編を参考にしています。
output.batの内容の目次を書くと、
・変数設定
  映像・音声エンコード設定
  出力ファイル
  プログラムのパス

・エンコード処理
  x264エンコード
  WAV出力
  neroAacEncエンコード
  mp4boxで結合
  残骸ファイル削除

・SCRename

  出力ファイルをリネーム

こんな感じになります。ではイカにoutput.batの内容を。(記事用に書き換えたので間違ってるかもしれんです)
@echo off
rem ###エラーメッセージ###
rem =====================================================

set error=ファイルが存在しないか、ファイル名・拡張子が間違っています
if not exist "%1" echo %error%
if not exist "%1" pause
rem =====================================================

rem ###映像・音声エンコード設定###
rem =====================================================
set x264=--profile high --level 4.1 --crf 20 --aq-mode 1 --direct auto
set aac=-br 192000 -2pass -lc
rem =====================================================
rem ### 出力ファイル ###
rem =====================================================
set save=
任意の保存場所のパス
set subtitle=%~n1
set outfile_264="%save%%subtitle%[enc].mp4"
set subtitle=%~n1
set outfile_264a="%subtitle%.mp4"
set outfile_aac="
%save%%subtitle%.aac"
set outfile_wav="
%save%%subtitle%.wav"
set outfile_log="
%save%%subtitle%.log"
set subtitle=%~n1
set outfile_264b="
%save%%subtitle%.mp4"
rem =====================================================
rem ### プログラムのパス ###
rem =====================================================
rem ### コマンドライン版 x264 ###
set x264_path="x264.exeのフルパス"
rem ### neroAacEnc ###
set neroAacEnc_path="neroAacEnc.exeのフルパス"
rem ### avs2wav.exe ###
set avs2wav_path="avs2wav.exeのフルパス"
rem ### MP4Box ###
set mp4box_path="MP4Box.exeのフルパス"
rem ### SCRename ###
set screname_path="SCRenameフォルダのパス"
rem =====================================================

echo ====================================================
echo                        入力AVSファイル                      
echo ====================================================
set INPUTFILE=%~1
echo パス:%INPUTFILE%
echo.

echo ====================================================
echo                        x264エンコード開始                    
echo ====================================================
%x264_path% %x264% -o %outfile_264% %INPUTFILE%
echo.
echo ====================================================
echo                       wav出力開始                           
echo ====================================================
%avs2wav_path% %INPUTFILE% %outfile_wav%
echo.
echo ====================================================
echo           neroAacEncエンコード開始                   
echo ====================================================
%neroAacEnc_path% %aac% -if %outfile_wav% -of %outfile_aac%
echo.
echo ====================================================
echo                        mp4boxで結合                          
echo ====================================================
%mp4box_path% -add %outfile_264% -add %outfile_aac% -new %outfile_264b%
echo.

echo ====================================================
echo                      残骸ファイル削除                        
echo ====================================================
del /f /q %outfile_264%
del /f /q %outfile_wav%
del /f /q %outfile_aac%
echo 削除ファイル:
if not exist
%outfile_264% echo %outfile_264%
if not exist %outfile_wav% echo %outfile_wav%
if not exist %outfile_aac% echo %outfile_aac%
echo.
echo ====================================================
echo                        SCRename                          
echo ====================================================
setlocal
rem SCRename.vbs をインストールしたパスを設定
set SCRPATH=
%screname_path%
for /F "usebackq delims=" %%I in (`cscript //nologo "%SCRPATH%\SCRename.vbs" "
%save%%~n1.mp4" "$SCtitle$ $SCpart$第$SCnumber$話 「$SCsubtitle$」 ($SCservice$)" %2 %3`) do set SCRTARGET=%%~I
rem 設定例
rem call encode.bat "%SCRTARGET%"
endlocal
echo.

ごちゃごちゃしてますが、最初の例が分かればわかると思います。多分。
コマンドプロンプトに詳しい人ならばスマート・コンパクトに出来ると思うのですが、面倒なのでこのままです。
まず太い青のところがパスを設定する所で変更するべきところです。

エンコード設定ですが、これはx264とneroAacEncのパラメータ設定です。
Avisynthのフィルタと同じでこれまた適当ですので、お好みの設定をしてください。
x264の設定方法はこちらを参考に、neroAacEncは説明書を読みましょう。

最後のSCRenameは「SCRenameTvRock.bat」の内容を貼りつけただけです。


MASTER_output.batの記述について


MASTER_output.bat複数のavsファイルをドロップで読込み可能で、順番にエンコード・MP4作成をします。
エンコード方法はOUTPUT.batを呼び出します。
基本的にエンコードにはこのファイルを使えばいいです。

これも『道場』の第陸話 avisynth 複数のavsをまとめてbat処理編を参考にしています。早速内容を。
@echo off
rem            エラーメッセージ
rem
****************************************************************
set error=ファイルが存在しないか、ファイル名・拡張子が間違っています
if not exist "%1" echo %error%
if not exist "%1" pause
rem ****************************************************************

echo ****************************************************************
echo               エンコード順序                       
echo ****************************************************************
if exist %1 echo   1st:%1
if exist %2 echo   2nd:%2
if exist %3 echo   3rd:%3
if exist %4 echo   4th:%4
if exist %5 echo   5th:%5
echo.

:loop
if not exist "%1" goto end
echo ****************************************************************
echo             BATファイル読込み %time%                    
echo ****************************************************************
echo.
call "OUTPUT.batのフルパス" "%1"
ping localhost -n 6 >nul
echo.
echo.
echo ****************************************************************
echo End %~n1 %time%
ping localhost -n 6 >nul
echo.
echo.

shift
goto loop
:end
shutdown -s -t 30

先程と同じとおりに太い青が変更点です。これは一つだけです。
「エンコード順序」には読み込んだAVSのパスをエンコード順に表示します。そのままです。
「if exist %1 echo   1st:%1」は%1が存在するならば、1st:%1を表示すると言う意味です。
なので、1つだけ読み込めば1stまで表示され、3つなら3rdまで表示されます。
この場合5個のファイルまで表示されます。もっとあるなら書き足せばおk

「BATファイル読み込み」は先程作成した「OUTPUT.bat」に%1を読み込ませます。
「shift」コマンドは置き換え可能パラメータを指定します。「goto」コマンドは指定したラベルに飛びます。
要は、gotoで:loopに戻った分、%1が%2と順に置き換えられ自動的に次のavsをエンコード開始します。

しかしこのままだと3、4、5とループし続けるので、
「if not exist "%1" goto end」を置いて存在しないパラメータが指定されたら、
:endに飛んでシャットダウンするようになっています。(シャットダウンしたくない場合は:end以下を削除)

やはりMASTER_output.batを開いてavsのパスを記述するのは面倒なんでドロップした方が楽ですね。
で、ドロップ出来るなら複数選択してそのまま投げ込んで順番にエンコ出来ればより楽です。


DGindex.batの記述について

DGindex.batDGindexを呼び出してTSファイルから「d2v」「aac」「avs」ファイルを作成します。
TSドロップでも使えますが、手間をなくす為TVrockの後処理コマンドに記述します。

これはTSからmp4のメモを参考にしています。以下が内容。
@echo off
set error=ファイルが存在しないか、ファイル名・拡張子が間違っています
if not exist "%1" echo %error%
if not exist "%1" pause

start DGIndex.exeのフルパス -IF=[%~1] -OF=[録画の保存先%~n1] -AT=[template.avsのフルパス] -EXIT
「IF」はInput FIleで、%~1を読み込みます。
「OF」はOutput Fileです。これも%~1でいいのですが、そうすると*_HD.ts.d2vの様になってしまうので、
TSと同じ保存先を指定して、ファイル名だけ指定しました。まぁどうせSCRenameで変わるんですけどね。
「AT」は指定したavsを参照し、d2v,aacのパスとディレイ情報を記述した新しいavsを作成します。
DGindexのコマンドについて詳しく知りたい方はマニュアルを見てください。

ところで、TVrockで設定した録画の保存先は、
録画終了後TS、D2V、AAC、AVS、LOGのファイルが存在することになります。
もちろんそれで構わないのですが、エンコードが終わってMP4が完成したらいらないですよね。
全体をドラッグして削除も面倒なんでそれらを削除するbatも作ってみました。
作ったらAvisynthフォルダに入れて、録画フォルダにショートカット作って置けばいいです。
だた、したのコマンドの場合コマンドラインごみ箱ツール「GB」をインストールしておく必要があります。
@echo off

set GB=GB.exeのフルパス
set save=録画の保存先
set TS=%save%*.ts
set D2V=%save%*.d2v
set AAC=%save%*.aac
set AVS=%save%*.avs
set LOG=%save%*.log

if exist %TS% %GB% %TS%
if exist %D2V% %GB% %D2V%
if exist %AAC% %GB% %AAC%
if exist %AVS% %GB% %AVS%
if exist %LOG% %GB% %LOG%

「*(アスタリスク)」は0文字以上の任意の文字列を表すワイルドカードです。
「if exist %TS% %GB% %TS% 」の意味は"%TS%が存在するなら%TS%をゴミ箱に移動する"です。
わざわざソフトをインストトールするのはコマンドプロンプトにゴミ箱に移動するコマンドが無いからです。

%GB%でなくて「del」でもいいのですが、「del」は完全に削除してしまうので、復元が困難になります。
mp4作成後ならいいですが、作成前に誤って実行してしまうとTSが消えてしまうので念のためGBにしました。
ゴミ箱なら元に戻せますからね。


これで必要な.batファイルは揃いました。後はTVrockの後処理設定ですが、それは次回に。
関連記事

| エンコード | 13:42 | comments:0 | trackbacks:0 | TOP↑















非公開コメント

http://higitune.blog106.fc2.com/tb.php/25-751f6aef

PREV | PAGE-SELECT | NEXT