PLAYSTATION3はHDTVサイズのH.264/AVCを再生でき、
ムービープレイヤーとして最適です。
そこで、PV3でキャプチャしたデータをPS3で再生できるH.264/AVCのエンコード方法を記します。
使うツールはAviSynth、x264、mp4box、avs2wav、waveflt2、neroAacEncです。
ただし、私が個人的に調べたことなので、間違い等があるかもしれませんので、あらかじめご了承ください。
基本的に2010年4月10日現在の情報で、x264 rev.1523を基本にしています。
まず始めに、Aviutilを使って、aupファイルを作成します。 24fps化、1440x1080への縮小(Lanczos3フィルタ)、編集などの事前処理をaviutl上で行います。
エンコードを行うバッチファイルです。
@echo off
rem #############
rem # File Name #
rem #############
set AUP=E:\DATA\Intensity\sample.aup
set OUT=OUT\BSD - sample - 第01話 - 1920x1080-24p - 12Mbps.mp4
set LOG="%OUT%.log"
set STAT="%OUT%.status"
set OUT="%OUT%"
set IN=tmp\tmp.avs
set AVIUTLVFP=D:\PROGRAMS\AviUtl\aviutl.vfp
set X264=x264.exe
rem #################
rem # BITRATE(kbps) #
rem #################
set BITRATE=12000
rem ###################################################
rem # MAX BITRATE(20000=for PS3 , 15000= for Xbox360) #
rem ###################################################
set MAX_BITRATE=15000
rem ######################
rem # SOUND BITRATE(bps) #
rem ######################
set SOUND_BITRATE=256000
rem ##############################
rem # FPS=59.94 , 29.97 , 23.976 #
rem ##############################
set FPS=23.976
rem ####################################
rem # SPEED=NORMAL , FAST , MID , SLOW #
rem ####################################
set SPEED=SLOW
rem #######################################
rem # LEVEL=4 , 4.2 (4.2 = only 1080/60p) #
rem #######################################
set LEVEL=4
rem ############################
rem # INTERLACE=0(off) , 1(on) #
rem ############################
set INTERLACE=0
rem #######################################################
rem # ASPECT=1280x720 , 1280x1080 , 1440x1080 , 1920x1080 #
rem #######################################################
set ASPECT=1920x1080
rem ###################################################
rem # PROFILE=HIGH(High Profile) , MAIN(Main Profile) #
rem ###################################################
set PROFILE=NORMAL
rem ###############################################
rem # VOLUME_ADJUST=0(no adjust) , 1(-2dB adjust) #
rem ###############################################
set VOLUME_ADJUST=0
rem #####################
rem # Encode Pass=1 , 2 #
rem #####################
set PASS=2
rem ##############################
rem # Thread Number=1 , 2 , .... #
rem ##############################
set THREAD=4
rem ###############
rem # DISPLAY_OPT #
rem ###############
set DISPLAY_OPT=--quiet
rem ################## SPEED option ###########################
set SPEED_OPT=--threads %THREAD% --ref 2 --trellis 2
if "%SPEED%" == "FAST" set SPEED_OPT=--threads %THREAD% --me dia --ref 1 --subme 0 --no-cabac --no-chroma-me --b-adapt 0
if "%SPEED%" == "MID" set SPEED_OPT=--threads %THREAD% --me umh --ref 3 --subme 7 --no-fast-pskip --no-dct-decimate --weightb --trellis 2 --b-adapt 1
if "%SPEED%" == "SLOW" set SPEED_OPT=--threads %THREAD% --me umh --ref 3 --subme 9 --no-fast-pskip --no-dct-decimate --weightb --trellis 2 --b-adapt 2
rem ################## LEVEL option ###########################
set LEVEL_OPT=-v -B %BITRATE% --vbv-maxrate %MAX_BITRATE% --vbv-bufsize=25000 --fps %FPS% --level 4 --bframes 3 --b-pyramid strict --mixed-refs --keyint 300 --min-keyint 30 %ENCODE_OPT%
if "%LEVEL%" == "4.2" set LEVEL_OPT=-v -B %BITRATE% --vbv-maxrate %MAX_BITRATE% --vbv-bufsize=25000 --fps %FPS% --level 4.2 --bframes 1 --b-pyramid strict --mixed-refs --keyint 300 --min-keyint 30 %ENCODE_OPT%
rem ################## INTERLACE option #######################
set INT_OPT=
if "%INTERLACE%" == "1" set INT_OPT=--tff --nal-hrd vbr
rem ################## VOLUME option ##########################
set VOLUME_OPT=
if "%VOLUME_ADJUST%" == "1" set VOLUME_OPT=-normal -2.0
rem ################## PROFILE option ##########################
set PROFILE_OPT=
if "%PROFILE%" == "HIGH" set PROFILE_OPT=--8x8dct --partitions p8x8,b8x8,i8x8,i4x4
rem ################## x264 option ############################
set OPTION=%INT_OPT% %ENCODE_OPT% %SPEED_OPT% %PROFILE_OPT% %LEVEL_OPT% %DISPLAY_OPT%
rem ################## Aspect #################################
set PAR=1:1
if "%ASPECT%" == "1280x1080" set PAR=3:2
if "%ASPECT%" == "1440x1080" set PAR=4:3
rem ################## start ##################################
echo ====================== start of %OUT% ====================== >> %LOG%
echo ==== x264 option ==== >> %LOG%
echo %OPTION% >> %LOG%
rem ################## make avs file #####################
mkdir tmp
mkdir out
echo LoadVFAPIPlugin( "%AVIUTLVFP%", "AUPSource" )>%IN%
echo AUPSource( "%AUP%" )>>%IN%
echo FlipVertical()>>%IN%
echo ConvertToYV12()>>%IN%
if "%PASS%" == "2" goto PASS2
rem ################## x264(1pass) #####################
echo ==== 1pass start ==== >> %LOG%
time /t >> %LOG%
%X264% %OPTION% -o tmp\tmp.264 %IN%
echo ==== 1pass end ==== >> %LOG%
time /t >> %LOG%
goto PASS_END
:PASS2
rem ################## x264(2pass) #####################
echo ==== 1pass start ==== >> %LOG%
time /t >> %LOG%
%X264% -p 1 --stats %STAT% %OPTION% -o NUL %IN%
echo ==== 2pass start ==== >> %LOG%
time /t >> %LOG%
%X264% -p 2 --stats %STAT% %OPTION% -o tmp\tmp.264 %IN%
echo ==== 2pass end ==== >> %LOG%
time /t >> %LOG%
:PASS_END
rem ################## sound #############################
avs2wav %IN% tmp\tmp.wav
waveflt2.exe %VOLUME_OPT% tmp\tmp.wav tmp\tmp2.wav
neroAacEnc.exe -br %SOUND_BITRATE% -2pass -if tmp\tmp2.wav -of tmp\tmp.m4a
rem ################## make mp4 file #####################
mp4box -fps %FPS% -new %OUT% -add tmp\tmp.264 -add tmp\tmp.m4a
mp4box -par 1=%PAR% %OUT%
mp4box -info %OUT%
mp4box -info 1 %OUT%
mp4box -info 2 %OUT%
rem #### LOG ####
echo ==== info ==== >> %LOG%
mp4box -info %OUT% >> %LOG%
mp4box -info 1 %OUT% >> %LOG%
mp4box -info 2 %OUT% >> %LOG%
echo ==== all end ==== >> %LOG%
time /t >> %LOG%
rem ################## end ###############################
echo ====================== end of %OUT% ====================== >> %LOG%
先頭部分を修正するだけで使い回しが出来ます。
なお、事前に「tmp」、「out」のディレクトリを作ってください。
連続でエンコードを行うためのバッチファイルです。
@echo off rem ############################################## call bat\test_01.bat call bat\test_02.bat call bat\test_03.bat rem ############################################## echo ============= shutdown ============= shutdown -s -t 60 -c "x264エンコードが完了したのでshutdownします" rem ##############################################
エンコード用バッチファイルを連続で実行した後、マシンの電源を落とします。
PLAYSTATION3はver 1.80でHigh Profileに対応したようです。
Levelに関しては基本的にLevel 4です。
ただし、MPEG4/AVCの規格として、1080/60pはLevel4では実現できなくて、Level4.2になります。
そこで、1080/60pの時だけ、Level4.2を指定するようにしています。
これでも再生してくれます。
昔のPLAYSTATION3では
「--no-b-adapt」を付けないと、ほぼ途中で止まりましたが、いまは大丈夫のようです。
そのため、いまは「--b-adapt 2 --bframes 3」でも問題ないようです。
なお、PLAYSTATION3では、処理が間に合わなくなった時のビットレート表示はあてになりません。
コマ落ち時のビットレート表示は考慮されていないようで、デタラメな値が表示されるようです。
あと、上限は20Mbpsにするのが無難です。
昔のx264でエンコードしたインタレースデータは、デコードは出来ましたが、正しくでインタレース処理が出来ませんでした。
しかし、x264 rev.2510から「--tff --nal-hrd vbr」で正しくデインターレースできるデータを出力できるようになりました。
mp4ファイルをBlu-rayのBDMV形式にする場合は以下の手順でBDMVに出来ます。
neroAacDec -if foo.mp4 -of foo.wavとLPCMのWAVに変換し、 EncWAVtoAC3で、DOLBY DIGITALに変換して、その音声を使ってmkvファイルにします。 (BDMVではAACは使えません)
このページで使っているプログラムのダウンロードサイト一覧です。
このページを作成する上で参考にしたものは以下のページ、書籍です。