PS3でのMP4ファイルの音声(多重音声、5.1ch)について


結論から言うと、PS3では多重音声と5.1chは無理です。
MP4が非対応なのではなくてPS3側が非対応です。


多重化だけならMP4Boxで次のコマンドを打てば出来ます。

mp4box -add "outfile.mp4" -add "track01.m4a":lang=jpn -add "track02.m4a":lang=eng -new "Movie.mp4"


WMP11ならメニューの[再生]→[オーディオおよび言語トラック]で切り替えることができます。しかしながらPS3側ではそのようなメニューはありません。「音声切りかえ」というメニューがあるので、これで変更できるのでは?と思うかもしれませんが、選択すると「右」→「左」→「左+右」とかなって残念な気分になれます。

5.1chについてなのでが、まずAC3がMP4的に非対応です。ならばAACの5.1chを作れば、と思うかもしれませんが、というか私も思ったので作ってみたのですが、結果は無理でした・・・


前回 「VFWのx264動画(.avi)を強引にPS3で再生する方法
次回 「MP4ファイルの字幕の付け方


(更新日:2007/10/20)

MP4ファイルをWindowsで再生する方法


Windowsだと、まだMP4ファイルを標準でサポートしていないので入門者の方は意外とMP4ファイルを再生するところから躓いてしまったりするのではないでしょうか?そりゃDirectShowとか知ってれば別に難しいことでもなんでもないのですが、やっぱりOSが標準でサポートしていないと、とっつき易さが全然違いますね。

MP4ファイルというか、MP4コンテナは元はQuickTime形式なので、「QuickTime Player」で再生できます。しかし、QuickTime Playerだとアスペクト比の指定とか無視されるので、いまいち使い勝手は良くありません。

MP4+H.264が素で再生できるプレーヤーは他に無いことはないのですが、やはりおすすめはDirectShowフィルタを使用する方法です。

必要なフィルタ


DirectShowとはなんぞや?という方にとってはすみませんが、それについてはまた暇を見つけてゆっくり説明したいと思います。(嘘の可能性大)

インストールの仕方がよくわからない方は「いろいろインストール方法」を御一読下さい。

上記のフィルタをインストールして、Windows Media Playerで再生すると、ちゃんと再生されるはずです。アスペクト比の指定もばっちり反映されます(ffdshowでは反映されない?)。

ffdshowとCoreAVCは共にデコーダのフィルタなんですが、一緒に入れておくと吉です。CoreAVCの方が再生が非常に軽いです。こちらを普段使用する側にしてffdshowH.264デコーダは切っておくと良いでしょう。何か不具合が生じて再生できない等の場合には、ffdshow側に切り替えて再生させるといったことが出来ます。

DirectShowを利用するプレーヤー(大半は利用しています)なら、どのプレーヤーでも再生できるので、お気に入りのプレーヤーで再生すると良いでしょう。ちなみに私は旧バージョンの「BS Player」がお気に入りです(Verは1.3x、スキンはShowTimeがおすすめです)。でも一番使ってるのはWMPですけどね・・・。

字幕付きのMP4ファイルの再生方法

MP4ファイルに字幕が埋め込まれている場合、これを再生するためのフィルタが別途必要になります。必要なフィルターはVSFilterというやつです。

VSFilterをインストール後に字幕付きのMP4ファイルを再生すると、インジケータに「DirectVobSub」というツールチップが表示されるアイコンが出現するので、こいつを右クリックして目的の言語の字幕を選択します。


次回 「PS3が売れない理由


(更新日:2007/12/9)

VFWのx264動画(.avi)を強引にPS3で再生する方法


強引な方法なので多少危険です。一番下の免責を一応読んでおいてください。

VFW(Video For Windows)について特に詳しい説明とかしませんが、AVIファイルに格納されたx264の動画です。AVIファイルは当然のことながらPS3で再生できないので、x264のデータをMP4コンテナに移す必要があります。これはYAMB2.0を利用すると楽です。しかし、これだけでは残念ながら再生できないのでバイナリエディタでちょこっと修正を入れる必要があります。


手順は下記の通りです

  1. YAMB2.0を使ってAVIファイルのx264動画データをMP4ファイルに出力する
  2. 音声をPCM形式でWAVファイルに出力する
  3. WAVファイルをAACに圧縮する
  4. 1と3でできた動画と音声をMP4BoxでMUX(合成)する
  5. 出来上がったMP4ファイルをバイナリエディタで開き、特定の箇所を修正する


音声の抽出にはぷっちでここバイナリエディタBZあたりが定番ですかね。BZは初期状態では読み取り専用になっているので、開く前にツールバーアイコンの「リードオンリ」ボタンをクリックしておく必要があります。

YAMB2.0の使い方

Windows Vistaを使用している場合はexeファイルを右クリックして「管理者として実行」する必要があります。

まず、メイン画面の左側にあるアイコン「Settings」を選択してMP4Boxの場所を設定する必要があります。「Advanced Settings」を開いたら「Location」にMP4Boxのパスを入力しましょう。設定はこれだけです。

次に左側のアイコンの「Editing」を選択し、上から4つ目にある「Click to convert srt to ..中略.. MP4 in one click.」と書かれてるやつをダブルクリックします。

「Input」にMP4ファイルにしたいAVIファイルのパスを入力します。

実行するとMP4ファイルの出来上がりです。音声の処理とMUXの方法は省略します。分からない方は「MP4Boxの基本的な使い方」を参照して下さい。

バイナリエディタでの修正箇所

MUX前と後で編集箇所が若干異なります。

MUX前の場合

ファイル先頭から0x21B番目と0x223番目に「64 00 33」となってる箇所があると思います。これがH.264のプロファイルとLevelを表した箇所です。VFWではLevelを指定できず、強制的にLevel 5.1になっていたので再生できなかった訳です。ここを「64 00 29」と変更します。要は「33」のところを「29」に変更してやればOKです。ちゃんと2箇所とも変更してやる必要があります。

MUX後の場合

先頭からの位置が少し変化するだけです。場所は0x217、0x21Fになります。変更内容も同じです。

各値とLevel
  • 「64 00 33」 Profile High @ Level 5.1
  • 「64 00 29」 Profile High @ Level 4.1
  • 「4D 40 33」 Profile Main @ Level 5.1
  • 「4D 40 29」 Profile Main @ Level 4.1


120fpsのAVIファイルはあきらめてください。

Level未指定のMP4も再生可能に

VFWのファイルでなくても、Level未指定で作成されたMP4は同様の方法で再生することができるようになります。Level未指定の場合はデフォルトでLevel 5.1になるからです。しかし、この場合「64 00 33」の場所が著しくずれている場合があります。そのような場合は「64 00 33」で検索をかけて、8バイト先にも同じバイト列がある箇所を捜して、編集してください。BZの検索方法は「#64 00 33」です。
H.264のレベルを調べる方法はMP4Boxの-infoオプションで調べることができます。

MP4Box.exe -info "Movie.mp4"

一応、免責とか

バイナリエディタで編集するのでヘタすると予期せぬ場所を編集してしまって、ファイルが壊れる可能性が十分にあります。その辺を自覚して自己責任でやってください。また、変更後のLevelやプロファイルが不相応であった場合の動作はまったく予想できません。最悪PS3が壊れたとか言っても致し方ありません。私はともかく、ソニーに問い合わせるとか絶対にしないでください。本記事に限らず、このブログに記載された内容によって被害が出たとしても、私は一切の責任を負いかねます。


前回 「MP4ファイルのアスペクト比の指定方法
次回 「PS3でのMP4ファイルの音声(多重音声、5.1ch)について


(更新日:2007/10/20)

MP4ファイルのアスペクト比の指定方法


アスペクト比の指定にはSample Aspect Ratio(SAR)か、またはPixel Aspect Ratio(PAR)を指定する必要があります。x264ではSAR、MP4BoxではPARをそれぞれ指定することができます。PS3ではどちらの指定も反映されます。

x264でアスペクト比を指定する場合

x264でアスペクト比を指定するには、x264のオプション--sarを指定します。元動画の解像度が704x480で、出力のアスペクト比が16:9の動画を作成したい場合は次のようになります。

x264.exe --level 4.2 -p 20 --cqm jvt -b 2 --sar 40:33 -o "output.mp4" --threads auto --progress "infile.avs"

MP4Boxでアスペクト比を指定する場合

MP4Boxでは次のようになります。

MP4Box.exe -add "output.mp4":par=40:33 -new "output_par.mp4"

x264でSARを指定していれば、ここでPARを指定する必要もありませんが、別に指定しても問題はありません。

ピクセル比の求め方

SARやPARの指定には、よく40:33とか10:11という数字が見られます。一応なんでこんな数字になるか説明したいと思います。

元動画のアスペクト比がMx:Myのとき、出力の画面比がSx:Syの場合にどうすればよいかというと、1ドットのピクセルの比率を変更してSx:Syを実現します。

ピクセル比が1:1であればMx:My=Sx:Syになります。これを正方ピクセルと言います。

ピクセル比をx:yとしたとき、これが1:1ではない場合を非正方ピクセルと言い、次の式が成り立ちます。


Mx・x : My・y = Sx : Sy
(・は掛け算)


これを解くと次のようになります。


Mx・x : My・y = Sx : Sy
Sx・My・y = Sy・Mx・x
y / x = Sy・Mx / Sx・My


上記で得られた式に元動画のサイズを704x480、出力のアスペクト比を16:9としたとき、これを代入すると下記の解答が得られます。


y / x = 9・704 / 16・480
y / x = 33 / 40
よって、
x = 40
y = 33


ということで、ピクセル比(PAR)=40:33が得られました。

肝心の704x480は何?という説明が抜けていることに気づきましたが、NTSCとDVDの仕組みをそれなりにしないといけないのでここでは割愛します。NTSCについてはすみませんが別途調べてください。

しかし、一々計算するのも面倒なので下記にPARの一覧を書いておきます。
  • 704x480 → 16:9 PAR=40:33
  • 704x480 → 4:3  PAR=10:11
  • 3:2 → 16:9 PAR=32:27
  • 3:2 → 4:3  PAR=8:9
  • まだ未完成です...


前回「VFRなMP4(H.264/AVC)ファイルの作成方法
次回 「VFWのx264動画(.avi)を強引にPS3で再生する方法


(更新日:2007/9/12)

VFRなMP4(H.264/AVC)ファイルの作成方法


VFRVriable Frame Rateの略で、日本語で言うと可変フレームレートになります。24fpsのシーンと30fpsのシーンが交互に切り替わるような構成(混合フレーム)の場合にVFRな動画を作成する必要が出てきます。MP4ファイルはVFRをサポートしているので、完全なVFRを実現できます。

x264ならAviUtlのプラグインを使用する方法もありますが、ここでは手動で分割した可逆圧縮の動画を個別にエンコードし、MP4Boxを使用して結合する方法を紹介します。漢ならやっぱり手動です!

23.976fpsの動画(Movie01.avi)と29.97fpsの動画(Movie02.avi)があると仮定すると、下記のような手順になります。

  1. それぞれの動画のAVSファイルを用意する
  2. それぞれの動画のAVSファイルにAssumeFPSですべて同一のfpsを指定する
  3. x264でエンコードするときに--fps指定しない
  4. MP4Boxで結合するときにそれぞれのファイルに実際のfpsを指定する
各AVSファイルの中身

# infile01.avs
AviSource("Movie01.avi")
AssumeFPS(29.97)
ConvertToYV12()
return last

# infile02.avs
AviSource("Movie02.avi")
AssumeFPS(29.97)
ConvertToYV12()
return last

それぞれのファイルでAssumeFPSで明示的にFPSを指定しますが、すべて同じ値を指定する必要があります。

x264のコマンド

x264.exe --level 4.2 -q 20 --cqm jvt -b 2 -o "output01.264" --threads auto --progress "infile01.avs"
x264.exe --level 4.2 -q 20 --cqm jvt -b 2 -o "output02.264" --threads auto --progress "infile02.avs"

オプションに--fpsは指定しません。--level意外のオプションは例によって適当です。出力が264(raw)出力になっていますが、mp4出力でも大丈夫だと思います。

MP4Boxのコマンド

mp4box.exe -add "output01.264":fps=23.976 -cat "output02.264":fps=29.97 -add "Movie.m4a":lang=jpn -new "Movie.mp4"

ここで各動画の正しいfpsを指定します。これでVFRなMP4が完成します。


前回 「MP4Boxの基本的な使い方
次回 「MP4ファイルのアスペクト比の指定方法


(更新日:2007/10/1)

MP4Boxの基本的な使い方


MP4Boxはコマンドラインを使用したコンソールアプリケーションです。mp4ファイルの結合や音声合成(MUX)等を行いたい場合に使います。ここではMP4Boxの基本的な使い方に絞って説明します。

MP4Boxの基本的な文法

MP4Box.exe -オプション "入力ファイル" "対象のファイル"

MP4Box.exe -オプション "入力ファイル" -new "新規作成するファイル"

並びとしては"オプション"→"対象のファイル"です。新しくファイルを作成したい場合は-newオプションを指定します。

結合方法

MP4Box.exe -cat "Movie2.mp4" "Movie.mp4"

MP4Box.exe -add "Movie1.mp4" -cat "Movie2.mp4" -new "Movie.mp4"

前者の方法は既に存在するファイルに付け足す方法です。後者が新規にファイルを作成する方法になります。
結合に失敗した場合は"No suitable destination track found - creating new one (type vide)"とメッセージが出力されます。このメッセージが出ると、別トラックを作成してそこに動画データが出力されます。
結合するファイルの形式が異なる(Level、解像度、FPS等が異なる)場合は失敗するので注意してください。
VFRの方法については「VFRなMP4(H.264/AVC)ファイルの作成方法」をご覧下さい。

音声合成方法(MUX)

MP4Box.exe -add "Video.mp4"#video -add "Audio.m4a"#audio -new "Movie.mp4"

動画と音声を合成し、一つの動画ファイルに仕上げます。上記の例では"#video"、"#audio"と明示的に指定していますが、ビデオだけ、または音声だけのファイルを別々に用意して合成する場合は別に指定しなくても大丈夫です。

多国語音声の作成方法

MP4Box.exe -add "Video.mp4" -add "Audio1.m4a":lang=jpn "Audio2.m4a":lang=eng -new "Movie.mp4"

各オーディオファイルに言語を設定することで多国語の動画ファイルを作成することができます。WMP11で再生中に切り替えるには、メニューの[再生]→[オーディオおよび言語トラック]で切り替えることができます。

トラックの情報表示方法

MP4Box.exe -info "Movie.mp4"

MP4Box.exe -info 1 "Movie.mp4"

前者の方法ならすべてのトラックの情報を表示します。後者の場合は数値で指定したトラック番号の詳細情報を表示することができます。結合などが上手く行かない場合は-infoオプションで原因を探ってみましょう。


前回 「PS3で再生できるMP4(H.264/AVC)ファイルの作成方法
次回 「VFRなMP4(H.264/AVC)ファイルの作成方法


(更新日:2007/10/17)

PS3で再生できるMP4(H.264/AVC)ファイルの作成方法


今回はx264cli(x264.exe)を使った最低限の方法を紹介します。
コマンドプロンプトによるコマンドライン入力が主になりますので、DOSの必要最低限の知識は必要になります。(cdとdirを知っていれば十分ですが…)
必要なソフトは下記の通りです。

AviSynthはx264でエンコードする際に必要になるのでインストールが必要です。
その他のEXEファイルはコンソールアプリになります。適当にフォルダを作成して(C:\mp4とか)その中にまとめて入れておきます。あとエンコード元となる動画ファイル(.avi)と音声ファイル(.wav)も入れておきます。
コマンドプロンプト(Windows Vistaの場合は「管理者として実行」する必要があります)を開いて下記の通りに実行すれば、MP4ファイルのできあがりです。


(追記:2007/9/18)
x264.exeにx86版とx64版が出たようです。64ビットOSでない場合はx86版を落としましょう。ついでですが、pthreadGC2.dllは必要なくなっているようです。

AVSファイルの中身

# infile.avs
AviSource("Movie.avi")
ConvertToYV12()
return last

x264cliでは入力にAVSファイルを利用します。このファイルをx264.exeのあるフォルダに作成します。ConvertToYV12()を実行することでx264で読み可能なYV12形式で動画データを渡すことができます。
Movie.aviはHuffyuvやLagarithで圧縮されたロスレスのファイルがよいでしょう。圧縮率の高いLagarith*1の方がおすすめです。

x264のコマンド

x264 --level 4.2 -q 20 --cqm jvt -b 2 --fps 23.976 -o "output.mp4" --threads auto --progress "infile.avs"

ポイントは--level 4.2を指定することです。これを指定してないとPS3で再生できません。なお、--level 4.2が指定できるのはPS3のシステムバージョン1.82以降です。4.1や4でも再生できますがとりあえず4.2で問題ないはずです。もし再生できない場合は4.1や4等に変更してみてください。
FPSは実際の動画のものに合わせてください(29.97fpsの動画なら--fps 29.97)。VFR(可変フレームレート)の方法については「VFRなMP4(H.264/AVC)ファイルの作成方法」を参照してください。
--cqmとか-bオプションは好みで付けてください。上記のオプションはかなり適当です。画質の調整は-qの値を変更します。この値が小さいほど高画質で大容量になりますが、-q 24とかでも割と十分な画質なので適当な値は自分で見つけてください。知っておくと良いと思われるコマンドラインオプションについては「その他のx264のオプション」にまとめています。それ以外のオプションについてはx264.exeのヘルプを見ましょう。ヘルプの表示方法は「x264とMP4Boxのヘルプの表示方法」を参照して下さい。

neroAacEncのコマンド

neroAacEnc.exe -br 160000 -if "Movie.wav" -of "Movie.m4a"

-brビットレートです。好みで設定してください。音質にこだわるなら192000、割とどうでもいいなら128000とかで良いでしょう。

MP4Boxのコマンド

mp4box -add "output.mp4":fps=23.976 -add "Movie.m4a":lang=jpn -new "Movie.mp4"

一応、これでPS3上で再生できる動画ができあがります。作業フォルダをDLNAの監視フォルダにしておけばPS3で即確認できます。再生できたら喜びましょう。


前回 「PS3でPC上のMP4ファイルを再生する方法
次回 「MP4Boxの基本的な使い方

(更新日:2007/10/20)

*1:インストール方法はinfファイルを右クリック→インストール