たのしい動画のエンコード環境構築

高性能なパソコンですることといえばゲームや動画のエンコード(やTwitter)と答える方が多いかと思いますが、とりわけエンコード環境構築は面倒な印象があるので備忘録も兼ねてエンコード環境構築の流れを書いていこうと思います。

 

インストールするソフトウェア

  • AviSynth+
  • AvsPmod
  • x264
  • avs2pipemod
  • fawcl
  • muxer
  • remuxer
  • ts_parser
  • AviSynthのプラグイン諸々

動画編集ソフトはAviUtlが有名だと思いますがテレビ番組をエンコードする場合、色空間の変換による劣化などを考慮するのが億劫なのでAviSynth+およびそのスクリプトエディタであるAvsPmodを使用します。

 

インストールの流れ

AviSynth+

以下のページから最新版のAviSynth+インストーラーをダウンロードします。

インストールはそのまま進めていけばいいのですがコンポーネントの選択でavsをメモ帳に関連付けるを選択しておくと便利かもしれません。

 

AvsPmod

以下のページからダウンロードします。

使用するプラグインが32bit版しかないときは32bit版を使う必要があるらしいです。スクリプトファイルは使いまわせるので今回は64bit版をダウンロードします。

このソフトはインストール形式ではないので適当な場所にエンコード用のソフトウェアをまとめておくフォルダを作成し、その中に設置します。私は以下の場所に設置しました。

%HomePath%\Apps\Encode\AvsPmod

 

x264, muxer, remuxer

最近はH.265/HEVCだったりAV1など新しいコーデックがありますが、よく使われていると思われるH.264のエンコーダーを使用します。好みなのでx265が使いたかったらそのように読み替えて進めてください。

今回はrigaya氏のバイナリを拝借しました。x264とL-SMASHをダウンロードします。

ダウンロードした中からx264, muxer, remuxerを先程のエンコードフォルダに設置します。

 

avs2pipemod, fawcl, ts_parser

chikuzen氏のgithubよりavs2pipemodをダウンロードします。

fawclは以下から「up1009.zip」をダウンロードします。

ts_parserは以下からダウンロードします。

それぞれのバイナリを先程のエンコードフォルダに設置します。

 

AviSynthのプラグイン

お好みで、と言いたいところですがL-SMASH+FAWなエンコード環境を構築しているので最低限必要なプラグインを記します。

  • L-SMASH Works

動画の読み込みに必要です。

 

  • AACFaw

分割したAACをFAWとして読み込みます。

それぞれダウンロードしたら64bit版のdllを以下のディレクトリに設置します。

%ProgramFiles(x86)%\AviSynth+\plugins64+

 

すべて設置するとエンコードフォルダはバッチファイルを除き以下のようになるかと思います。

 

 

エンコードしてみる

ここではavsの書き方やAvsPmodの使い方は書きませんが参考程度にスクリプトファイルを置いておきます。

avsの<Video File>にはTSファイル、 <Audio File>には「ts2aac.bat」で分離したaacファイルのパスを指定します。

@echo off

:loop
if "%~1"=="" goto end

ts_parser.exe --mode da --delay-type 3 --rb-size 4096 --wb-size 8192 --debug 1 "%~1"

shift
goto loop

:end
echo 全ての処理が完了しました。
::pause
exit
Video = "<Video File>"
Audio = "<Audio File>"

v = LWLibavVideoSource(Video, cache=true, dr=true, repeat=true, dominance=1).AssumeFPS(30000, 1001).AssumeTFF()

AudioDub(v, AACFaw(Audio))

return last
@echo off

:: 出力設定
set output="%~dpn1.mp4"

:: パス指定
set AVS="%~1"
set ENC=<エンコードフォルダ>

set AVS2PIPEMOD="%ENC%\avs2pipemod64.exe"
set X264="%ENC%\x264_2901_x64.exe"
set AVS2WAV="%ENC%\avs2wav.exe"
set FAWCL="%ENC%\fawcl.exe"
set MUXER="%ENC%\muxer.exe"
set REMUXER="%ENC%\remuxer.exe"

:: x264の引数指定
set OPT1=--preset placebo --crf 20 --qpmin 10 --qpmax 40 --qpstep 16 --qcomp 0.85 --no-mbtree --rc-lookahead 240
set OPT2=--vbv-bufsize 17500 --vbv-maxrate 17500 --aq-strength 0.35 --psy-rd 0.35:0 --keyint 240 --bframes 6
set OPT3=--partitions p8x8,b8x8,i8x8,i4x4 --merange 64 --ref 5 --no-dct-decimate --colormatrix bt709

:: 完了
set COMPLETE=***************************  完了 ******************************

echo ---TEST SCRIPT---
echo.

:: ---------------------- 0.Existence ----------------------

echo エラーチェック
echo.

if not "%~1"=="" goto loop
echo [入力ファイルエラー]
echo ファイルを入力して下さい...
goto end
:loop
if "%~1"=="" goto end

echo 完了
echo.

echo ---------------------- 1.Encode(Movie) ------------------------

echo **************** 映像のエンコードを開始します。 ****************
echo.

%X264% %OPT1% %OPT2% %OPT3% %OPT4% -o "%~dpn1.264" %AVS%

echo %COMPLETE%
echo.

echo ---------------------- 2.Cut^&Enc(Audio) -----------------------

echo **************** avsに従い音声をカットします。 *****************
echo.

%AVS2PIPEMOD% -wav %AVS% > "%~dpn1_Trimmed.aac.wav"

echo %COMPLETE%
echo.
echo ************* カットしたFAW音源をAACに変換します。 *************
echo.

%FAWCL% "%~dpn1_Trimmed.aac.wav" "%~dpn1.aac"

echo %COMPLETE%
echo.

echo ------------------------- 3.Muxing ----------------------------

echo **************** 映像と音声をコンテナに格納します。 *****************
echo.

%MUXER% -i "%~dpn1.264" -i "%~dpn1.aac" -o %output%

echo %COMPLETE%
echo.

echo ------------------------- 4.Delete ----------------------------

echo 中間ファイルの削除
echo.

del "%~dpn1.264"
del "%~dpn1.aac"
del "%~dpn1_Trimmed.aac.wav"

echo 完了
echo.

:: -------------------------- 5.Shift -----------------------------

shift
goto loop

:: -------------------------- 6.end --------------------------
:end

echo 全ての処理が完了しました。
::pause
exit