2017年版アニメエンコード環境
前回の記事から半年経ち、最近のモダン(?)なエンコ環境に慣れてきたので再度まとめてみる。
前提
- Avisynth+ r2455
- x264 r2762 x64
プラグインなど諸々全て64bit版を用意できるようになったので、avs4x26xなどのパイプツールは使いません。x264.exeは自ビルドしました。
BS11などの横1920ソースは、インタレを保持したまま横1440にリサイズします。横1920で製作されているアニメは数も少ないので、ファイルサイズを抑えるためにもリサイズしています。
CMカットを真面目にやるようになりました。自動CMカットツール、いくつか試してみましたが調整が結構面倒なので、結局今では目視でやっています。目視でも1分もかからないですし、誤爆の心配もありません。
.avs
SetFilterMTMode("DEFAULT_MT_MODE", MT_SERIALIZED) SetFilterMTMode("LWLibavVideoSource", MT_SERIALIZED) SetFilterMTMode("NNEDI3", MT_MULTI_INSTANCE) SetFilterMTMode("eedi3", MT_MULTI_INSTANCE) SetFilterMTMode("TDeint", MT_MULTI_INSTANCE) SetFilterMTMode("TFM", MT_MULTI_INSTANCE) SetFilterMTMode("TDecimate", MT_MULTI_INSTANCE) SetFilterMTMode("FluxSmoothST", MT_SERIALIZED) SetFilterMTMode("f3kdb", MT_MULTI_INSTANCE) video="___video___" audio="___audio___" v = LWLibavVideoSource(video, cache=true, dr=true, repeat=true, dominance=1).AssumeFPS(30000, 1001) v = v.AssumeTFF() v = (v.height() == 1088) ? v.Crop(0, 0, 0, -8) : v AudioDub(v, WAVSource(audio)) # Trim # from 1920*1080 to 1440*1080 #Resize4Interlaced(1440, 1080) # to progressive #TIVTC24PMod() # NR #FluxSmoothST(7, 7) # debanding #f3kdb(range=15, Y=96, Cb=64, Cr=64, sample_mode=2, blur_first=true, dynamic_grain=false, opt=-1, mt=true, dither_algo=3, keep_tv_range=true, input_mode=0, input_depth=8, output_mode=0, output_depth=8) #Histogram(mode="luma") #Info() Prefetch(4) return last function Resize4Interlaced(clip clip, int width, int height, float "src_left", float "src_top", float "src_width", float "src_height") { src_left = default(src_left, 0) src_top = default(src_top, 0) src_width = default(src_width, 0) src_height = default(src_height, 0) clip = clip.TDeint(mode=1, order=1) clip = clip.Spline64Resize(width, height, src_left, src_top, src_width, src_height) clip = clip.AssumeTFF().SeparateFields().SelectEvery(4, 0, 3).Weave() return clip } function TIVTC24PMod(clip clip) { src = clip.nnedi3(field=-1) interp = clip.eedi3(field=-1, sclip=src) deinted = clip.TDeint(order=-1, field=-1, edeint=interp) clip = clip.TFM(mode=6, order=-1, pp=7, slow=2, mChroma=true, clip2=deinted) clip = clip.TDecimate(mode=1) return clip }
バッチファイル
@echo off cd /d %~dp0 echo. echo アニメエンコードバッチ echo. rem ### 作業フォルダなど ### rem ==================================================== set programPath=E:\Encode\ set tempPath=F:\tmp_result\ set completePath=Y:\video\ rem ==================================================== rem ### プログラムのパス ### rem ==================================================== rem ### wavi.exe ### set wavi="%programPath%wavi106m\wavi.exe" rem ### fawcl.exe ### set fawcl="%programPath%FakeAacWav_0.28\fawcl.exe" rem ### x264.exe ### set x264="%programPath%x264\x264_2762_x64.exe" rem ### muxer.exe ### set muxer="%programPath%l-smash_r1450\muxer.exe" rem ### remuxer.exe ### set remuxer="%programPath%l-smash_r1450\remuxer.exe" rem ==================================================== echo エンコード対象一覧 echo =================================================== for %%f in (%*) do ( echo %%~nf ) echo =================================================== echo. echo x264コンフィグ作成 echo =================================================== set config=--min-keyint 1 --bframes 3 --b-adapt 2 --ref 3 --deblock 1:1 --rc-lookahead 40 --vbv-maxrate 40000 --vbv-bufsize 30000 --qpstep 12 --aq-mode 1 --aq-strength 0.6 --qcomp 0.80 --direct auto --me umh --psy-rd 0.4:0.0 --trellis 2 --no-fast-pskip --no-dct-decimate --range tv --nal-hrd vbr --input-range tv --level 4.1 --threads 0 --thread-input set crf=23 set /P crf="crf値を入力してください。デフォルトは「23」です。:" set /a isNumeric=%crf% * 1 if not "%crf%"=="%isNumeric%" goto exception set config=%config% --crf %crf% set resolution=HD set /P resolution="解像度タイプを入力してください。デフォルトは「HD」です。(SD / HD):" if "%resolution%" == "SD" ( set config=%config% --merange 16 --subme 7 --colorprim smpte170m --transfer smpte170m --colormatrix smpte170m ) else if "%resolution%" == "HD" ( set config=%config% --merange 24 --subme 6 --colorprim bt709 --transfer bt709 --colormatrix bt709 ) else ( goto exception ) set width=1440 set /P width="横解像度を入力してください。デフォルトは「1440」です。(640 / 720 / 1440 / 1920):" if "%width%" == "640" ( if "%resolution%" == "HD" goto exception set sar=1:1 ) else if "%width%" == "720" ( if "%resolution%" == "HD" goto exception set sar=32:27 ) else if "%width%" == "1440" ( if "%resolution%" == "SD" goto exception set sar=4:3 ) else if "%width%" == "1920" ( if "%resolution%" == "SD" goto exception set sar=1:1 ) else ( goto exception ) set config=%config% --sar %sar% set framerate=30i set /P framerate="フレームレートを入力してください。デフォルトは「30i」です。(24p / 30i):" if "%framerate%" == "24p" ( set config=%config% --keyint 240 ) else if "%framerate%" == "30i" ( set config=%config% --keyint 300 --tff --weightp 0 ) else ( goto exception ) goto :continue :exception echo. echo 例外が発生しました。 echo. pause goto :eof :continue echo =================================================== echo. echo 内容の確認 echo =================================================== echo 一時フォルダ:%tempPath% echo 保存フォルダ:%completePath% echo. echo x264:%x264% echo. echo config:%config% echo. set isOnlyVideo= set /P isOnlyVideo="映像のみをエンコードしますか?(y):" echo. set isShutdown= set /P isShutdown="終了後にシャットダウンしますか?(y):" echo. set isReady= set /P isReady="以上の内容でエンコードを開始します。キャンセルする場合は何かキーを押してください。" if not "%isReady%" == "" goto :eof echo =================================================== echo. rem ### ループ開始 ### :loop if "%~1" == "" goto end set name=%~n1 set wav="%tempPath%%name%.wav" set aac="%tempPath%%name%.aac" set m4a="%tempPath%%name%.m4a" set avs="%tempPath%%name%.avs" set raw="%tempPath%%name%.264" set mp4="%tempPath%%name%.mp4" set complete="%completePath%%name%.mp4" echo wav抽出 echo ==================================================== if not "%isOnlyVideo%" == "y" ( %wavi% %avs% %wav% ) echo ==================================================== echo. echo wav偽装解除 echo ==================================================== if not "%isOnlyVideo%" == "y" ( %fawcl% %wav% %aac% ) echo ==================================================== echo. echo 音声mux echo ==================================================== if not "%isOnlyVideo%" == "y" ( %muxer% -i %aac% -o %m4a% ) echo ==================================================== echo. echo x264エンコード echo ==================================================== %x264% %config% -o %raw% %avs% echo ==================================================== echo. echo 動画mux echo ==================================================== %muxer% -i %raw% -o %mp4% echo ==================================================== echo. echo remux echo ==================================================== if not "%isOnlyVideo%" == "y" ( %remuxer% -i %mp4% -i %m4a% -o %complete% ) echo ==================================================== echo. shift goto :loop :end if "%isShutdown%" == "y" shutdown -s -t 30 pause