読者です 読者をやめる 読者になる 読者になる

子豚の嫁探し

3ヶ月毎に嫁を探す豚野郎です。

TSをD&Dするだけでmp4にエンコード

f:id:lI22:20151102225638j:plain

ご無沙汰しております。

最近エンコードしています?私はしていません。

最近のエンコード界ってどうなっているのだろう、ということで調べてみると、QSVがそこそこまともになっていると聞く。尚且つ、QSVでデコードして出力するともっと速いとかなんとか。実際に使ってみたけど、なるほど確かにすごい。すごいのだけど、なにか物足りない気がしなくもない。でもQSVは使いたい、うーんこの。というわけで、AviSynthやらを使いつつ、QSVでエンコードしてみます。

実行環境

OS:Windows7 Pro SP1 (x64)
CPU:Core i7 3770
MEM:PC3-12800 (4GB*2)

用意するアプリケーション

TsSplitter
DGIndex
FakeAacWav
QSVEncC
avs2pipemod
l-smash
ts2avs(※)

ts2avsってのは、テンプレートとして用意したavsファイルの映像ソース部分に、DGIndexからdemuxしたm2vを指定して作業フォルダに生成してくれるものです。DGIndexでテンプレートavsの指定もできるのですが、d2vしか適用できない(あまり調べてないから知らない)ので、なんかもう面倒臭くなったので自分で作りました。THE 自分用なアプリケーションですので公開するつもりはありません。

そもそもの話、なぜにm2v?ってところですよね。MPEG2の読込はDGDecode_MPEG2Sourceに任せていたのですが、L-SMASH WorksのLWLibavVideoSourceが予想以上に爆速だったので切り替えたためです。そんなことしなくても・・・という声が聞こえてきそうですが、いいんですよ。エンコードなんて自己満足、過去の偉人は皆そう言いました。

バッチファイル

以下、バッチファイル晒し。これにTSファイルをボコボコとドラッグアンドドロップすると勝手にエンコードしてくれます。CMカット?リサイズ?クロップ?インタレ解除?ロゴ除去?そんなことは一切しません、面倒臭い。誤爆してても知らなーい、キニシナーイ。どうしてもアレだったら円盤買えばよろし。なお、平均FPSは150前後で、DGDecode時の約3倍。ivyな3770でこの速度、優秀ですね。

@echo off

rem ====================================================
rem 初期設定
rem ====================================================
set program_path=E:\program\
set temp_path=F:\tmp\
set comp_path=F:\result\

set template_avs=%program_path%template.avs

rem ====================================================
rem プログラム・ファイルのパス
rem ====================================================
rem # TsSplitter #
set TsSplitter_path="%program_path%TsSplitter\TsSplitter.exe"
rem # DGIndex #
set DGIndex_path=%program_path%dgmpgdec158_SSE\DGIndex.exe
rem # fawcl.exe #
set fawcl_path="%program_path%FakeAacWav_0.28\fawcl.exe"
rem # ts2avs #
set ts2avs_path="%program_path%ts2avs_0.01\ts2avs.exe"
rem # QSVEncC.exe(x86) #
set QSVEncC_path="%program_path%QSVEnc_2.15\QSVEncC\x86\QSVEncC.exe"
rem # avs2pipemod.exe ###
set avs2pipemod_path="%program_path%avs2pipemod-0.4.2\avs2pipemod.exe"
rem # muxer #
set muxer_path="%program_path%l-smash_r1384\muxer.exe"
rem # remuxer #
set remuxer_path="%program_path%l-smash_r1384\remuxer.exe"

rem ====================================================
rem ループ処理の開始
rem ====================================================
:loop
if "%~1" == "" goto end

set input_ts=%~1
set name=%~n1

rem ====================================================
rem 出力・入力パス
rem ====================================================
set output_split=%temp_path%
set input_split=%temp_path%%name%_HD.ts
set output_dg=%temp_path%%name%
set output_aac="%temp_path%%name%.aac"
set output_m4a="%temp_path%%name%.m4a"
set output_avs="%temp_path%%name%.avs"
set output_m2v="%temp_path%%name%.demuxed.m2v"
set output_264="%temp_path%%name%.264"
set output_mp4="%temp_path%%name%.mp4"
set complete_mp4="%comp_path%%name%.mp4"

rem ====================================================
rem QSVEncパラメータ
rem ====================================================
set qsv=--y4m -u balanced --cqp 22:25:27 --gop-len 300 --bframes 3 --level 4.1 --profile Main --sar -16:-9 --colormatrix bt709 --colorprim bt709 --transfer bt709 --tff -i - -o %output_264%

echo ====================================================
echo TsSplitterでゴミを除去し、DGIndexでDemuxする
echo ====================================================
%TsSplitter_path% %input_ts% -SD -1SEG -OUT %output_split%
%DGIndex_path% -i %input_split% -om 2 -od %output_dg% -hide -exit
echo.

echo ====================================================
echo 上記でDemuxしたaacをwavに偽装、wav偽装解除(音ズレ対策)
echo ====================================================
for /f "usebackq tokens=*" %%a in (`dir /B %temp_path%%name%*ms.aac`) do (@set output_DGaac="%temp_path%%%a")
%fawcl_path% %output_DGaac%
for /f "usebackq tokens=*" %%b in (`dir /B %temp_path%%name%*ms_aac.wav`) do (@set output_DGwav="%temp_path%%%b")
%fawcl_path% %output_DGwav% %output_aac%
echo.

echo ====================================================
echo l-smashで音声mux
echo ====================================================
%muxer_path% -i %output_aac% -o %output_m4a%
echo.

echo ====================================================
echo avsファイルの作成
echo ====================================================
%ts2avs_path% %template_avs% %output_avs% %output_m2v%
echo.

echo ====================================================
echo QSVEncCでエンコードしてraw出力、l-smashで映像mux
echo ====================================================
%avs2pipemod_path% -y4mt %output_avs% | %QSVEncC_path% %qsv%
%muxer_path% -i %output_264% -o %output_mp4%
echo.

echo ====================================================
echo l-smashで音声・映像remux
echo ====================================================
%remuxer_path% -i %output_mp4% -i %output_m4a% -o %complete_mp4%
echo.

shift
goto loop
:end

pause

avsファイルは、LWLibavVideoSourceで映像ソースを読み込ませるだけなので割愛。

ts2qsv.exe

っで、このバッチファイルだとTSファイルのファイル名やパスによっては正常に動作しなかったりします。いちいちファイル名やらを弄るのも面倒臭いし、バッチファイル内でやるのは汚いし面倒臭いし・・・というわけで冒頭の画像のやつです。面倒臭いので自分で作りました。公開する気はありません、だって自分用だもの。

そんなこんなで、「面倒臭い」が口癖の私でも飽きることなくエンコードを続けられています。ファイルをドラッグアンドドロップして実行ボタンをクリックするだけの簡単なお仕事、面倒くさがり屋のそこのあなたにおすすめです。

追記(2015/10/10)

バッチファイルのDGIndexオプションが古いままだったので修正。