QSVEncC+avisynthで高速自動エンコードする その2
の続きです。今回は要となるbatファイルについて書こうと思います。
QSVってなに?自分もできるかな?という人は以下の記事を御覧ください。
Aviutl+QSVでエンコードしてみる(core i7 3770+Z77) Firefoxは情弱のたしなみ
rem ###エラーメッセージ###
rem =====================================================
set error=ファイルが存在しないか、ファイル名・拡張子が間違っています
if not exist "%1" echo %error%
if not exist "%1" pause
rem =====================================================
rem ### プログラム・ファイルのパス ###
rem ====================================================
rem ### QSVEncC.exe ###
set QSVEncC_path="C:\avisynth\program\QSVEncC.exe"
rem ### avs2pipemod.exe ###
set avs2pipemod_path="C:\avisynth\program\avs2pipemod.exe"
rem ### fawcl.exe ###
set fawcl_path="C:\avisynth\program\fawcl.exe"
rem ### MP4Box ###
set mp4box_path="C:\avisynth\program\MP4Box.exe"
rem ### template.avs ###
set template=C:\avisynth\template.avs
rem ### DGindex ###
set DGindex=C:\avisynth\program\DGIndex.exe
rem ###ゴミ箱ツール###
set GB="C:\avisynth\program\GB.exe"
rem ### 出力場所 ###
rem ====================================================
set save=%~d1%~p1
set name=%~n1
echo %save%%name%
set output_avs="%save%%name%.avs"
set output_d2v="%save%%name%.d2v"
set output_wav="%save%%name%.wav"
set output_aac="%save%%name%.aac"
set output_264="%save%%name%.264"
set output_mp4="%save%%name%.mp4"
rem ### 映像エンコード設定 ###
rem ====================================================
set qsv=--y4m -u quality --cqp 24:26:27 --gop-len 300 --bframes 3 --sar 4:3 -i - -o %output_264%
echo ====================================================
echo ここから処理内容
echo ====================================================
echo ====================================================
echo DGindex処理開始
echo ====================================================
%DGindex% ^
-IF=[%~1] ^
-OF=[%save%%name%] ^
-AT=[%template%] ^
-EXIT
echo ====================================================
echo.
echo ====================================================
echo 入力AVSファイル
echo ====================================================
echo 入力:%output_avs%
echo ====================================================
echo.
echo ====================================================
echo QSVEncC
echo ====================================================
%avs2pipemod_path% -y4mp %output_avs% | %QSVEncC_path% %qsv%
echo ====================================================
echo.
echo ====================================================
echo DGindex抽出aac確定
echo ====================================================
for /f "usebackq tokens=*" %%a in (`dir /B %save%%name%*ms.aac`) ^
do @set output_DGaac="%save%%%a"
echo %output_DGaac%
echo.
echo ====================================================
echo FAW偽装→解除
echo ====================================================
%fawcl_path% %output_DGaac% %output_wav%
%fawcl_path% %output_wav% %output_aac%
echo.
echo ====================================================
echo mp4boxで結合
echo ====================================================
%mp4box_path% -fps 29.970 -add %output_264% -add %output_aac% -new %output_mp4%
echo.
echo ====================================================
echo 残骸ファイル削除
echo ====================================================
del /f /q %output_DGaac%
del /f /q %output_avs%
del /f /q %output_d2v%
del /f /q %output_264%
del /f /q %output_wav%
del /f /q %output_aac%
if exist %output_mp4% %GB% %~1
echo.
echo 削除ファイル:
if not exist %output_DGaac% echo %output_DGaac%
if not exist %output_avs% echo %output_avs%
if not exist %output_d2v% echo %output_d2v%
if not exist %output_264% echo %output_264%
if not exist %output_wav% echo %output_wav%
if not exist %output_aac% echo %output_aac%
if not exist %~1 echo %~1
echo.
上のをコピペしてbatファイルを作ってください。
ファイル名を「QSVEncC.bat」としてC直下のavisynthフォルダへ。
batファイルの作り方や簡単な説明は、下記リンクの最初にありますのでそちらを見ていただきたいです。
Avisynth+バッチファイル+αで簡単にアニメ高速エンコード その3 Firefoxは情弱のたしなみ
batファイルの各部説明(無駄に長い)
・エラーメッセージ ・変数設定 プログラムのパス 出力ファイル 映像・音声エンコード設定 ・エンコード処理 DGindex QSVエンコード DGindex抽出aac確定 FAW偽装→解除 mp4boxで結合 残骸ファイル削除 |
大雑把にいうとこのbatにTSファイルを投げ込むと指定した所にmp4ができます。
青い部分がソフトウェアなどのアドレスを入れる所です。上に書いたところに入れてあれば書き換える必要は無いでしょう。
エラーメッセージ
set error=ファイルが存在しないか、ファイル名・拡張子が間違っています if not exist "%1" echo %error% if not exist "%1" pause |
このbatファイルはTSを投げ込んで使うので、試しにダブルクリックで起動してみるとこのエラーが出ます。
変数設定(プログラム・出力・エンコード設定)
次は変数設定です。頻繁に使うパスは短く変数にした方が見やすくなります。
また、纏まっているのでパスの変更も楽なのかなと思います。
set save=%~d1%~p1 |
%~d1%~p1の意味は読み込んだTSの保存場所を示します。
もし特定のフォルダに保存したい場合は変更して下さい。
一時的な保存場所なので番組ごとに分けたい場合は、
番組ごとのフォルダを作り、振り分けソフト使うなりやbatを作るなりして振り分けて下さい。
↑気のせいでした
set QSVEncC_path="C:\avisynth\program\QSVEncC.exe" |
%QSVEncC_path% |
映像エンコード設定
set qsv=--y4m -u quality --cqp 24:26:27 --gop-len 300 --bframes 3 --sar 4:3 -i - -o %output_264% |
オプションについては作者さんが公開してるのでそちらを参考に。→QSVEncCのオプションの説明
で、ここで注目して欲しいのが--sar 4:3です。地上波の解像度は16:9ではなく、1440x1080で4:3なのです。
何も設定しない状態でエンコードしてしまうと4:3のアスペクト比となってしまいますが、
sar 4:3と言うオプションを追加することで、プレーヤー再生時は16:9として試聴が可能です。
その点BS/CSの場合は1920x1080で16:9なのでsarは1:1か、設定する必要は無いです。
・・・エンコード方針で主に地上波アニメ対象と書いたのはこれが原因で、
sar 4:3にした状態で自動化とするとBS/CSの番組は比率が狂ってしまいます。
出来れば条件分岐して地デジかBSか判断できれば良いのですが、
自分はBSよりも地デジが多いのでBSは手動でやろうかなと思っています。

DGindex処理開始
%DGindex% ^ -IF=[%~1] ^ -OF=[%save%%name%] ^ -AT=[%template%] ^ -EXIT |
DGindex.exe -IF=[入力ファイル] -OF=[出力場所] -AT=[template.avs入力]
と言う感じになっています。ちなみに" ^ "はキャレットと良い、改行しても一行として扱われます。
オプションについてはDGindexを解凍したファイルにhtmlファイルが詳しいです。
入力AVSファイル
echo 入力:%output_avs% |
QSVEncC
%avs2pipemod_path% -y4mp %output_avs% | %QSVEncC_path% %qsv% |
構文としては以下の用な感じ。
avs2pipemod.exe <オプション> <入力avs> | QSVEncC.exe <エンコード設定>
DGindex抽出aac確定
for /f "usebackq tokens=*" %%a in (`dir /B %save%%name%*ms.aac`) ^ do @set output_DGaac="%save%%%a" echo %output_DGaac% |
これはDGindexで抽出したaacのフルパスを指定の変数に入れるコマンドです。
これは次のFAWの工程で必要になってきます。
コマンドプロンプトでコマンドの実行結果を直接変数に代入する方法 - 半熟メモ
for /f "usebackq tokens=*" %%a in (`hostname`) do @set x=%%a |
上の例だとホスト名が変数xに入る事になります。
dir /B %save%%name%*ms.aac |
基本的に入力したTSファイル名を含むaacはひとつなのでそれが変数に設定されます。
Windowsコマンド集:(dir)
FAW偽装→解除
%fawcl_path% %output_DGaac% %output_wav% %fawcl_path% %output_wav% %output_aac% |
今回はDGindexで抽出されたaacを偽装wav化してすぐ元に戻しています。一見無意味そうですが、
偽装wav化する事により元のaacにあるDELAY値分自動的にディレイカットして音がズレないようにします。
avs2wavでもできますが普通にwavに変換するので劣化してしまいます。
前の工程でわざわざDGindexで出したaacのパスを変数に入れたのは、
このFAWがなぜかワイルドカードを読み込んでくれない為です。
mp4boxで結合
%mp4box_path% -fps 29.970 -add %output_264% -add %output_aac% -new %output_mp4% |
mp4box.exe -add <作った264のパス> -add <作ったaac> -new<mp4の保存場所>
途中で「-fps 29.970」が入っていますが、入れていないとなぜかフレームレートが狂うので指定しておきます。
残骸ファイル削除
del /f /q %output_DGaac% del /f /q %output_avs% del /f /q %output_d2v% del /f /q %output_264% del /f /q %output_wav% del /f /q %output_aac% echo. echo 削除ファイル: if not exist %output_DGaac% echo %output_DGaac% if not exist %output_avs% echo %output_avs% if not exist %output_d2v% echo %output_d2v% if not exist %output_264% echo %output_264% if not exist %output_wav% echo %output_wav% if not exist %output_aac% echo %output_aac% echo. |
mp4が完成したらavsやd2vは不要なので削除し、削除したものはechoで表示するようにしています。
【追記 7/3】
2013春季アニメを今回の方法でエンコードして来ましたが、殆ど問題無く実行できているように思います。
いままではmp4作成後にもTSを保持していましたが、mp4作成後に元TSをゴミ箱に移動するようにしました。
変更箇所は上のbatファイルにある赤文字の3箇所です。まぁ必ずやる必要はないです。
・set GB="C:\avisynth\program\GB.exe" ・if exist %output_mp4% %GB% %~1 ・if not exist %~1 echo %~1 |
ただ、実はゴミ箱に移動するというコマンドはなく、普通なら削除コマンドしか無いので、
コマンドラインごみ箱ツール
を使います。そのままファイルをゴミ箱に入れるコマンドを付与するソフトです。
gb.exe ファイル名 |
赤文字の一番上はそのGB.exeの保存場所を変数設定ですね。
二番目は、「もし、%output_mp4%が存在するならば、%~1を削除する」と言う意味になります。
%output_mp4%はエンコード完了したmp4ファイル、
%~1はバッチパラメータで、単純に読み込んだ元TSファイルのことです。
最後は、「もし、%~1が存在しないならば、%~1を表示する」
これは削除したかどうかのメッセージを表示するためだけのものです。
GB.exeでなくても、開いてるドライブにフォルダ作ってmp4作成後そこにmoveしておき、
1クールごとに整理するのも良いかと思います。
以上追記でした。
テストエンコードする
batファイルの説明はひと通り終わりました。これでエンコードはできるはずです。
青文字の部分など正しく設定してることを確認した後、試しにTSファイルをbatファイルにD&Dしてみてください。
おそらくは正常にmp4が書き出されると思います。
もしエラーが起きている場合は、batファイルの一番下に”pause”コマンドを入れてみてください。
pauseを入れると自動的にウィンドウが閉じませんので、エラーとなっている所がわかります。
エラーの原因は大抵ファイル名で、DGindexやQSVEncなどの部分で止まっているのかと思います。
使用可能な文字 | 使用不可な文字 | ||
文字 | 説明 | 文字 | 説明 |
()「」『』【】 | 全角括弧 | 半角/全角スペース | |
_ | アンダーバー | ()[]<> | 半角括弧 |
. | ピリオド | , | コンマ |
#$%& | 全角シャープとか | #$%& | 半角シャープとか |
= | 全角イコール | = | 半角イコール |
!!? | 感嘆・疑問符(半角疑問符以外) | ||
~'。、;:¥→♪ | その他のみなさん |
あと、元ソースと出力されるすべてのファイルはパスは同一であった方が良いです。
自分は一時的に録画ファイルを置いておくフォルダを用意していているのですが、
ちょうどそこでエンコードを今はするようにしています。
因み、TVRockの後処理で使う場合には”pause”コマンドは削除してください。
削除しないとそこで処理が停止し、処理が終わらなくなってしまいます。
連続エンコードする
上に書いたbatファイルでは、複数のTSファイルをD&Dする事はできません。
手動で一括エンコードしたいときには不便ですのでその為の外枠的なbatファイルを作ります。
ファイル名は「roop.bat」としてC直下のavisynthフォルダにでも置いておきます。
@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 "QSVEncC.batのフルパス" "%1" echo. echo. echo **************************************************************** echo End %~n1 %time% echo. echo. shift goto loop :end |
以前書いたものとほぼ同じです。詳しい説明は下記リンク参照。
Avisynth+バッチファイル+αで簡単にアニメ高速エンコード その3 Firefoxは情弱のたしなみ
青い所にQSVEncC.batのフルパスをいれるだけです。
簡単に説明すると%1を読み込みエンコードが終わったら%2へと進み、
読み込んだファイルが無くなったらループ終了するようになっています。
エンコード順序は今これをエンコードをしていますよ、っていうだけです。
これだと5個目までのファイルしか表示されないのでちょっと何とかしたいと思わなくもないです。
追記【7/3】
作業しながら前に録ったものをエンコードしてるのですが、いつの間にか終わってるので、
なにか作業終了をお知らせする方法がないか調べていたら良い方法が有りました。
batファイルでメッセージを出す方法 - Super Neurotic Junction
batでは普通ポップアップは出せないのですが、何かvbsを通して出せる様になってるみたいです。
自分は、
echo msgbox "エンコードが終了しました",vbCritical,"お知らせ" > %TEMP%/msgboxtest.vbs & %TEMP%/msgboxtest.vbs |
以上2度めの追記でした
今回はここまでです。
次回はTVRockあたりについて記事を書こうと思います。
QSVEncC+avisynthで高速自動エンコードする その3
- 関連記事
-
- QSVEncC+avisynthで高速自動エンコードする 改良編
- QSVEncC+avisynthで高速自動エンコードする その3
- QSVEncC+avisynthで高速自動エンコードする その2
- QSVEncC+avisynthで高速自動エンコードする その1
- TSファイルを一括でQSVエンコードする
| エンコード | 23:00 | comments:16 | trackbacks:0 | TOP↑
QSVとavisynthを使ったエンコード大変参考になりました。今まで手作業でやっていたものがバッチ処理で一発OK、しかもQSVで爆速なのは感動しました。ありがとうございます。
しかし導入で苦労しまして、DGIndexの処理の部分なんですが、そのままだとavsファイルが出力されずエンコードできませんでした。そこでバッチ初心者ながらググったりして頑張ってみたところ、
%DGindex% ^
-IF=[%~1] ^
-OF=[%save%%name%] ^
-AT=[template.avs] ^
-EXIT
に変更したらうまくいきました。理由はよくわかりませんが、同じように苦労されてる方がいたらと思い書き込ませて頂きました。
| 初心者 | 2013/05/02 03:18 | URL |