PSP で再生可能なビデオフォーマット類

PSP で再生できるファイルフォーマットの情報を探していたら、未だに携帯動画変換君同梱分の ffmpeg を使った情報しか出てこないので、ここらで纏めておく。
携帯動画変換君ffmpeg は既に随分と古いものになってしまい、内蔵の libx264 や libavcodec にも相当手が入っているので、あまりお勧めではないと思うんだけど操作が簡単だからか未だに愛用者が多いのも事実。

公式のリファレンスが一番よくまとまってた。にしてもリンクがほとんど張られてないんだよね…。 PSP™ (PlayStation®Portable) RSS チャンネル向けコンテンツ作成ガイドライン (PDF注意)の最終ページより抜粋。リファレンスの想定ファームバージョンは 3.30 で、現時点ではそれ以後のファームでの大規模改訂は行われていない模様。

Movie Format File Format Video Audio
H.264 Video (AVC) m4v, mp4 BaseLine Profile
Level 1.3 以下
768kbps 以下
320×240pixel 以下
30 フレーム/秒(fps)以下
AAC 128kbps 以下
48kHz 以下
ステレオ
Main Profile
Level 2.1 以下
(CABAC のみ)
4Mbps 以下
480×272pixel 以下
30 フレーム/秒(fps)以下
Main Profile
Level 3.0 以下
(CABAC のみ)
10Mbps 以下
720×480pixel 以下
30 フレーム/秒(fps)以下
MPEG-4 Video Simple Profile
Level 1.3 以下
768kbps 以下
320×240pixel 以下
30 フレーム/秒(fps)以下
Motion JPEG Video avi
(OpenDML 準拠)
7Mbps 以下
320×240pixel, 及び480×272pixel
30 フレーム/秒(fps)、及び15 フレーム/秒(fps)
μ-LAW 86kbps 以下
11.025kHz 以下
モノラル
Linear PCM 344kbps 以下
22.050kHz 以下
モノラル

上表には MPEG-4 Video としか書かれていないけれど*1、実際には libxvid がそれに該当する模様。そこまでビットレートが高くない動画であれば、わざわざ x264 を使わずとも xvid で十分実用に耐えうる。また、コンテナは一般的な MPEG4 コンテナで問題ないみたい。今更 Motion JPEG はないんじゃないかなという気が。

x264/xvidエンコードする場合、動画フォーマットよりも画面サイズを結構シビアに見ているようなので、動画サイズと再生可能サイズの不一致 → 非対応データと判定されるので注意が必要。リサイズ等は特にしてくれない。また、 CABAC 判定を厳密にしてるのかという点については若干疑問が残るものの、ffmpeg で変換するなら

 -coder ac -flags aic -level 30

あたりのオプションを付加しておけばいいと思われ(上記ではとりあえず 3.0 を指定)。H.264/AVC のレベル表記については、 H.264/MPEG-4 AVC - Wikipedia を参照のこと。なお、かつて使われていた

 -f psp

オプションは、現行の PSP Firm 5.0x 系では無意味だそうで、特にファイルフォーマットの指定をせずに /memstick/Video フォルダに放り込んでやれば再生できるようです。気になるなら付けておいてもいいみたい。

また、サムネイルについては、

タグのurl 属性に記述されたファイルは、アイテムのアイコンとして使用されます。width 属性値は160 以下、height 属性値は120 以下である必要があります。url 属性値のイメージファイルが、アイテムリストに表示されるチャンネルサムネイルイメージとして使われます。サポートされているイメージのコーデックは、次のとおりです。

イメージファイルのサイズは、200KB 以内である必要があります。デコードされたイメージのサイズは、縦160pixel 以下、横120pixel 以下である必要があります。

3. RSS ドキュメントの仕様::アイテムのサムネイルイメージ (PDF注意)

としか書かれていませんが、実際にはこの JPEG ファイルを /memstick/Video フォルダ内に対象のムービーファイルと同名で、かつ拡張子を .thm として保存しなければなりません。実際の処理としては

ffmpeg -y -i %FILENAME% -f image2 -ss 10 -vframes 1 -s 160x120 -an %FILENAME%.thm

あたりかと。

まぁ面倒くさいなら MediaCoder PSP Edition を使えば良いんじゃないかな。

*1:だいたい単に MPEG-4 って範囲広すぎるだろjk…。