PSP用のエンコード環境

MeGUIではファイルごとに操作しなくてはいけないのでSeraphyさんの"PSPVFR"を参考にバッチファイルを書いてみた。
encode.bat

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

rem 付属のTOOLディレクトリの場所を指定する。
SET TOOLDIR=C:\Program files\PSPでVFR\tool

rem 各ソフトのインスト場所
SET MKVTOOLNIX=C:\program files\mkvtoolnix
SET X264=C:\program files\x264

rem トラックの設定。普通は変更しない。
SET VIDEO_TRACK=1
SET AUDIO_TRACK=2


rem 個別にファイルを設定する場合はここを編集
SET MP4BOX=%TOOLDIR%
SET ATOMCHANGER=%TOOLDIR%
SET NEROAACENC=%TOOLDIR%
SET TC2MP4=%TOOLDIR%
SET AVS2WAV=%TOOLDIR%
SET HAALI=%TOOLDIR%


rem エンコードの高度な設定
SET BITRATE=512
SET X264OPTIONS1= --pass 1 --bitrate %BITRATE% --level 3 --keyint 300 --min-keyint 30 --bframes 5 --direct auto --subme 1 --analyse none --qpstep 24 --vbv-bufsize 10000 --vbv-maxrate 10000 --ratetol 4.0 --me dia --merange 32 --threads auto --thread-input --progress --no-dct-decimate --no-psnr --no-ssim
SET X264OPTIONS2= --pass 2 --bitrate %BITRATE% --level 3 --keyint 300 --min-keyint 30 --ref 2 --mixed-refs --no-fast-pskip --bframes 5 --b-rdo --bime --direct auto --subme 6 --trellis 1 --analyse p8x8,b8x8,i4x4 --qpstep 24 --vbv-bufsize 10000 --vbv-maxrate 10000 --ratetol 4.0 --me umh --merange 32 --threads auto --thread-input --progress --no-dct-decimate --no-psnr --no-ssim
SET AAC_OPTIONS= -q 0.35

SET PATH=%MKVTOOLNIX%;%HAALI%;%PATH%
SET CALLAPP=START "" /B /BELOWNORMAL /WAIT 
SET CALLAPPNW=START "" /BELOWNORMAL


rem 複数ファイルのループ処理
SET ARGV=%*
FOR %%I IN (!ARGV!) DO CALL :PSP "%%~I"
GOTO :EOF

:PSP

rem ファイル設定
SET TGT_FILE=nul
SET TGTAFILE=nul
SET TITLE=%~n1
SET IN_FILE=%~dpnx1
SET WORKPATH=%TMP%\%~nx1
SET OUT_PATH=%~dp1psp
SET WAV_FILE=%WORKPATH%\%~nx1_tmp.wav
SET AVS1FILE=%WORKPATH%\%~nx1_tmp.1.avs
SET AVS2FILE=%WORKPATH%\%~nx1_tmp.2.avs
SET OUTVFILE=%WORKPATH%\%~nx1_tmp.video.mp4
SET OUTRFILE=%WORKPATH%\%~nx1_tmp.vfr.mp4
SET OUTAFILE=%WORKPATH%\%~nx1_tmp.audio.mp4
SET OUTMFILE=%WORKPATH%\%~nx1_tmp.mux.mp4

SET OUT_FILE=%OUT_PATH%\%~n1.mp4


IF NOT EXIST "%WORKPATH%" mkdir "%WORKPATH%"
IF NOT EXIST "%OUT_PATH%" mkdir "%OUT_PATH%"
%CALLAPPNW% CMD /C encode_audio.bat "%~dpnx1"
IF "%~x1" == ".mp4" CALL :MP4 "%~dpnx1"
IF "%~x1" == ".MP4" CALL :MP4 "%~dpnx1"
IF "%~x1" == ".mkv" CALL :MKV "%~dpnx1"
IF "%~x1" == ".MKV" CALL :MKV "%~dpnx1"
IF "%~x1" == ".avi" CALL :AVI "%~dpnx1"
IF "%~x1" == ".AVI" CALL :AVI "%~dpnx1"
IF "%~x1" == ".wmv" CALL :WMV "%~dpnx1"
IF "%~x1" == ".WMV" CALL :WMV "%~dpnx1"
IF "%~x1" == ".divx" CALL :AVI "%~dpnx1"
IF "%~x1" == ".DIVX" CALL :AVI "%~dpnx1"


:MAIN
IF NOT EXIST "%TGT_FILE%" (
	ECHO.
	ECHO 中間ファイルの生成に失敗しました。
	ECHO VIDEOとAUDIOのトラックが逆かもしれませんし、未対応の形式かもしれません。
	ECHO.
	pause
	GOTO :EOF
)



rem avsの作成 Video
CALL :AVS_DirectShowSource
IF NOT EXIST "%OUTVFILE%" %CALLAPP% "%X264%\x264.exe" %X264OPTIONS1%  --output NUL "%AVS2FILE%"
IF NOT EXIST "%OUTVFILE%" %CALLAPP% "%X264%\x264.exe" %X264OPTIONS2%  --output "%OUTVFILE%" "%AVS2FILE%"

rem 結合
IF NOT EXIST "%OUTRFILE%" %CALLAPP% "%TOOLDIR%\DTSRepair".exe -i:120000 "%OUTVFILE%" "%TC_FILE%" "%OUTRFILE%"

:LOOP1
IF EXIST "%OUTAFILE%" GOTO :LOOP1END
cscript SleepSample.js
GOTO :LOOP1

:LOOP1END
IF NOT EXIST "%OUTMFILE%" %CALLAPPNW% "%MP4BOX%\mp4box.exe" -add "%OUTRFILE%" -add "%OUTAFILE%" -new "%OUTMFILE%"

:LOOP2
IF EXIST "%OUTMFILE%" GOTO :LOOP2END
cscript SleepSample.js
GOTO :LOOP2

:LOOP2END
COPY /Y /B "%OUTMFILE%" "%OUT_FILE%"


rem 動かないときはここで停止させると何か分かるかも
IF NOT EXIST "%OUT_FILE%" ECHO エラーが発生しているようです。各ツールのメッセージを確認してみてください。
IF NOT EXIST "%OUT_FILE%" PAUSE

rem 掃除
IF EXIST "%OUTMFILE%" RMDIR /S /Q "%WORKPATH%"
GOTO :EOF


:MP4
IF NOT EXIST "%~dpnx1" GOTO :EOF
SET TGT_FILE=%WORKPATH%\%~nx1_tmp.avi
rem SET TGTAFILE=%WORKPATH%\%~nx1_tmp.raw
SET TGTAFILE=%~dpnx1
SET TC_FILE=%WORKPATH%\%~nx1_tmp.txt
%CALLAPP% DTSRepair -t "%~dpnx1" "%TC_FILE%"
rem %CALLAPP% "%MP4BOX%\mp4box.exe" -raw %AUDIO_TRACK% "%~dpnx1" -out "%TGTAFILE%"
%CALLAPP% %MKVTOOLNIX%\mkvmerge -o "%WORKPATH%\%~nx1_tmp.mkv" -S "%~dpnx1" --timecode-scale 120000
%CALLAPP% "%TOOLDIR%\mkv2vfr.exe" "%WORKPATH%\%~nx1_tmp.mkv" "%TGT_FILE%" 1>nul
GOTO :EOF


:MKV
IF NOT EXIST "%~dpnx1" GOTO :EOF
SET TGT_FILE=%WORKPATH%\%~nx1_tmp.avi
rem SET TGTAFILE=%WORKPATH%\%~nx1_tmp.raw
SET TGTAFILE=%~dpnx1
SET TC_FILE=%WORKPATH%\%~nx1_tmp.txt
%CALLAPP% "%MKVTOOLNIX%\mkvextract.exe" timecodes_v2 "%~dpnx1" %VIDEO_TRACK%:"%TC_FILE%"
rem %CALLAPP% "%MKVTOOLNIX%\mkvextract.exe" tracks "%~dpnx1" %AUDIO_TRACK%:"%TGTAFILE%"
%CALLAPP% "%TOOLDIR%\mkv2vfr.exe" "%~dpnx1" "%TGT_FILE%" 1>nul
GOTO :EOF


:AVI
IF NOT EXIST "%~dpnx1" GOTO :EOF
SET TGT_FILE=%WORKPATH%\%~nx1_tmp.avi
SET TGTAFILE=%~dpnx1
SET TC_FILE=%WORKPATH%\%~nx1_tmp.txt
%CALLAPP% "%TOOLDIR%\avi2timecode2.exe" "%~dpnx1" "%TC_FILE%"
%CALLAPP% "%TOOLDIR%\avidelnull.exe" "%~dpnx1" "%TGT_FILE%"
GOTO :EOF


:WMV
IF NOT EXIST "%~dpnx1" GOTO :EOF
SET TGT_FILE=%WORKPATH%\%~nx1_tmp.avi
SET TGTAFILE=%~dpnx1
SET TC_FILE_WORK=%WORKPATH%\%~nx1_tmp.work.txt
SET TC_FILE=%WORKPATH%\%~nx1_tmp.txt
COPY /Y "%~dpnx1" "%WORKPATH%\%~nx1_tmp.wmv" 1>nul 2>nul
%CALLAPP% "%TOOLDIR%\Media2Mkv.exe" "%WORKPATH%\%~nx1_tmp.wmv"
%CALLAPP% %MKVTOOLNIX%mkvextract timecodes_v2 "%WORKPATH%\%~nx1_tmp.wmv.mkv" %VIDEO_TRACK%:"%TC_FILE%"
%CALLAPP% %MKVTOOLNIX%mkvextract tracks "%WORKPATH%\%~nx1_tmp.wmv.mkv" %VIDEO_TRACK%:"%TGT_FILE%"
GOTO :EOF




:AVS_DirectShowSource
ECHO global plugin_directory = "%TOOLDIR%\" >"%AVS2FILE%"
ECHO Import(plugin_directory + "Setting.avs") >>"%AVS2FILE%"
ECHO DirectShowSource("%TGT_FILE%", convertFps=false) >>"%AVS2FILE%"
ECHO sbResize(480,270) >>"%AVS2FILE%"
ECHO AddBorders(0,0,0,2) >>"%AVS2FILE%"
ECHO AssumeFPS(30000, 1001) >>"%AVS2FILE%"
ECHO ConvertToYV12() >>"%AVS2FILE%"
ECHO return LAST >>"%AVS2FILE%"

GOTO :EOF

encode_audio.bat

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

rem 付属のTOOLディレクトリの場所を指定する。
SET TOOLDIR=C:\Program files\PSPでVFR\tool


rem 個別にファイルを設定する場合はここを編集
SET NEROAACENC=%TOOLDIR%
SET AVS2WAV=%TOOLDIR%


rem エンコードの設定
SET AAC_OPTIONS= -q 0.35

SET CALLAPP=START "" /B /BELOWNORMAL /WAIT 


rem 複数ファイルのループ処理
SET ARGV=%*
FOR %%I IN (!ARGV!) DO CALL :PSP "%%~I"
GOTO :EOF

:PSP

rem ファイル設定
SET TGTAFILE=%~dpnx1
SET WORKPATH=%TMP%\%~nx1.tmp
SET WAV_FILE=%WORKPATH%\%~nx1_tmp.wav
SET AVS1FILE=%WORKPATH%\%~nx1_tmp.1.avs
SET OUTAFILE=%WORKPATH%\%~nx1_tmp.audio.mp4


IF NOT EXIST "%WORKPATH%" mkdir "%WORKPATH%"


:MAIN

rem avsの作成 Audio
ECHO A = DirectShowSource("%TGTAFILE%", video=false, audio=true) >"%AVS1FILE%"
ECHO A = A.Audiorate ^^!= 48000 ^^? A.SSRC(48000, false) : A >>"%AVS1FILE%"
ECHo V = Colorbars(40,30) >>"%AVS1FILE%"
ECHO AudioDub(A, V) >>"%AVS1FILE%"

IF NOT EXIST "%WAV_FILE%" %CALLAPP% "%AVS2WAV%\avs2wav.exe" "%AVS1FILE%" "%WAV_FILE%"
IF NOT EXIST "%OUTAFILE%" %CALLAPP% "%NEROAACENC%\neroAacEnc.exe" -if "%WAV_FILE%" -of "%OUTAFILE%" %AAC_OPTIONS%


GOTO :EOF
exit

SleepSample.js

WScript.sleep(5000);

エンコードではないがサムネイル作成用
make_THM.bat

@ECHO OFF
setlocal
SET FFMPEG=c:\program files\megui\tools\ffmpeg\ffmpeg.exe
set OFFSET=10
set FFPARM= -y -f image2 -ss %OFFSET% -vframes 1 -s 160x120

FOR %%I IN (*.mp4) DO CALL :MAIN "%%~I"
GOTO :EOF

:MAIN
set INFILE=%~f1
set OUTFILE=%~dpn1.jpg
IF NOT EXIST "%OUTFILE%" START "" /BELOWNORMAL /MIN "%FFMPEG%" -i "%INFILE%" %FFPARM%  "%OUTFILE%"
GOTO :EOF

endlocal