PSP用のエンコード環境
MeGUIではファイルごとに操作しなくてはいけないのでSeraphyさんの"PSPでVFR"を参考にバッチファイルを書いてみた。
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
exitSleepSample.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