PSP向けにアニメをFFmpegでエンコードする人のために

このきじはふるいよ.あたらしいのかいたのでそっちもみてほしいよ

ネットの某所でFFmpegPodCast配信周りの情報交換が活発に行われた結果そこそこの成果物が出てきたので、自分の分をちょっと載せておく。

ざっと書いておくと、映像ソース→FFmpegエンコ→自前サーバー→PodCast用XMLファイル生成OPMLのXMLリストPSPRSSチャンネルへの登録→PSPによるタイマーDLという流れにより、寝ているだけでPSPにアニメが振ってくるよ自分向けシステムのお話なのですが、自鯖が必要な上、きちんと管理できない場合に無差別配信になってしまうため、ここにはFFmpegのパラメータについてだけ書いておきます。意図としては"PSPで高画質かつそこそこのサイズでアニメを楽しむ"という目的を注ぎ込んだパラメータなので、その辺理解した上でお使いください。

複数パラメータを載せやすかったので携帯動画変換君のTranscoding.ini準拠にしてるます。各自環境に合わせてパラメータは直してください。

[Info]
Title=PSP向け設定mp4
[Item0]
Title=PSP/iPhone用1Pass汎用 16:9
TitleE=1pass custamize for PSP
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -title "<%Title%>" -s 480x270 -aspect 16:9 -r 30000/1001 -vcodec libx264 -b 500k -crf 20 -g 230 -mbd 2 -me_method umh -subq 6 -qdiff 6 -me_range 32 -sc_threshold 65 -keyint_min 3 -nr 100 -qmin 12 -flags bitexact+alt+mv4+loop -flags2 bpyramid+wpred+mixed_refs -partitions parti4x4+partp4x4+partp8x8 -f mp4 -acodec libfaac -ac 2 -ar 48000 -ab 128k -sn -coder 0 -level 13 -threads 2 "<%OutputPath%>[PSP]<%InputFileBase%>.mp4""
Command1=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 85 -vframes 1 -s 160x120 -an "<%OutputPath%>[PSP]<%InputFileBase%>.jpg""
[Item1]
Title=PSP/iPhone用1Pass 4:3アナログソース向け
TitleE=1pass custamize for PSP
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -title "<%Title%>" -s 360x270 -aspect 4:3 -r 30000/1001 -vcodec libx264 -b 500k -crf 25 -g 230 -mbd 2 -me_method umh -subq 6  -qdiff 6 -me_range 32 -sc_threshold 65 -keyint_min 3 -nr 100 -qmin 12 -flags bitexact+alt+mv4+loop -flags2 bpyramid+wpred+mixed_refs -partitions parti4x4+partp4x4+partp8x8 -f mp4 -acodec libfaac -ac 2 -ar 48000 -ab 128k -sn -coder 0 -level 13 -threads 2 "<%OutputPath%>[PSP]<%InputFileBase%>.mp4""
Command1=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 85 -vframes 1 -s 160x120 -an "<%OutputPath%>[PSP]<%InputFileBase%>.jpg""
[Item2]
Title=PSP用1Passサイズ重視 16:9
TitleE=1pass custamize for PSP
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -title "<%Title%>" -s 480x270 -aspect 16:9 -r 30000/1001 -vcodec libx264 -b 400k -crf 22 -g 240 -mbd 2 -me_method umh -subq 6 -qdiff 6 -me_range 32 -trellis 2 -bf 1 -b_strategy 1 -bidir_refine 1 -sc_threshold 65 -keyint_min 5 -nr 50 -qmin 12 -cmp chroma  -flags bitexact+alt+mv4+loop -flags2 bpyramid+wpred+mixed_refs -partitions parti4x4+partp4x4+partp8x8 -f mp4 -acodec libfaac -ac 2 -ar 48000 -ab 128k -sn -coder 1 -level 13 -threads 2 "<%OutputPath%>[PSP]<%InputFileBase%>.mp4""
Command1=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 85 -vframes 1 -s 160x120 -an "<%OutputPath%>[PSP]<%InputFileBase%>.jpg""

FFmpegは環境依存も大きいのでそのまま使える保証はしませんが、最新Revに近い場合はそこそこ動くと思われます。純正の携帯動画変換君では絶対動きませんので、必ず/core/内のFFmpeg.exeを新しい物と入れ替えてください。

んで、これだけだとわかりにくいので同サイズ帯で画質比較でもしてみます。サンプルはゼーガペイン第1話。CM無しの24分ほど。

ほとんどパラメータ弄らない状態でサイズが104,484,567バイト

シンプル

Item0相当の汎用設定でサイズが107,967,520バイト

汎用

Item2相当でサイズは100,115,593バイト。通常表示だと96MBで100MB切り達成。

サイズ重視

とまあ、こんな感じです。汎用もサイズ重視もパラメータ弄る前と比べたらノイズが格段に軽減されているのがわかると思います。なら、サイズ重視の方がいい気もしますが、エンコ速度の増大やら不具合の多発やらが見込まれるので、そこまでやる必要はないでしょう。2pass?何それおいしいの? 1passでこんだけやれるならいらんだろ。