音風景ブログ

目隠しテストによるエンコーダの音質評価などを行うブログです。

最新FFmpeg、携帯動画変換君、PSP用設定

注意

いろいろ改良した2012年1月最新版があります。

  • 画質/音質/速度の改善
  • すっきりして見やすいオプション
  • Tempフォルダに音声(wav,mp4)が溜まりまくる(手動で削除しないとHDD容量が圧迫される)問題の改善
  • 古いffmpegを上書きせずにすむ解説法

旧記事

携帯動画変換君を、Youtubeニコニコ動画で使われるOn2 VP6/FLV4やH.264に対応したバージョンに改造する。

  1. http://blog.k-tai-douga.com/article/43079762.htmlから、ffmpeg_bin-27450.zipまたは各自のCPUごとの最適化版をダウンロードして解凍したffmpeg.exeをcoresフォルダの中へ上書き。(または古いffmpeg.exeを退避)
  2. ftp://ftp6.nero.com/tools/NeroAACCodec-1.5.1.zipから、NeroAACCodec-1.5.1.zipをダウンロードして解凍して、win32フォルダに入っているneroAacEnc.exeをcoresフォルダの中へ。
  3. Transcoding.iniを以下のように書き換え。またはこちらから落とす。http://zak.s206.xrea.com/psp/transcoding.ini
[Info][Info]
Title=FFmpeg rev.27450 for PSP
TitleE=FFmpeg rev.27450 for PSP

Description=FFmpeg rev.27450用の設定。PSP用。
DescriptionE=for FFmpeg rev.27450 configuration for PSP

[Item0]
Title=【超低画質】AVC 320x240 1MB/分
TitleE=[very bad]AVC 320x240 1MB/min
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 1 -ar 24000 "<%TemporaryFile%>.wav""
Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%TemporaryFile%>.wav" -lc -br 40000 -of "<%TemporaryFile%>.mp4"
Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%TemporaryFile%>.mp4" -acodec copy -i "<%InputFile%>" -r 29.97 -vcodec libx264 -g 250 -level 21 -b 100k -bt 48k -bufsize 768k -maxrate 1500k -coder 1 -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -s 320x240 -aspect 4:3 -qmin 24 -qmax 49 -qdiff 7 -subq 7 "<%OutputFile%>.MP4""
Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 5 -vframes 1 -s 160x120 -an "<%OutputFile%>.jpg""

[Item1]
Title=【低画質】AVC 480x272 2MB/分
TitleE=[low]AVC 480x272 2MB/min
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%TemporaryFile%>.wav""
Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%TemporaryFile%>.wav" -lc -br 80000 -of "<%TemporaryFile%>.mp4"
Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%TemporaryFile%>.mp4" -acodec copy -i "<%InputFile%>" -r 29.97 -vcodec libx264 -g 250 -level 21 -b 216k -bt 64k -bufsize 768k -maxrate 1500k -coder 1 -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -s 480x272 -aspect 30:17 -qmin 24 -qmax 49 -qdiff 7 -subq 7 "<%OutputFile%>.MP4""
Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 5 -vframes 1 -s 160x120 -an "<%OutputFile%>.jpg""

[Item2]
Title=【中画質】AVC 480x272 3MB/分
TitleE=[middle]AVC 480x272 3MB/min
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%TemporaryFile%>.wav""
Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%TemporaryFile%>.wav" -lc -br 80000 -of "<%TemporaryFile%>.mp4"
Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%TemporaryFile%>.mp4" -acodec copy -i "<%InputFile%>" -r 29.97 -vcodec libx264 -g 100 -level 21 -cqp 30 -bufsize 768k -maxrate 1500k -coder 1 -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -s 480x272 -aspect 30:17 -qmin 18 -qmax 49 -qdiff 7 -subq 7 "<%OutputFile%>.MP4""
Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 5 -vframes 1 -s 160x120 -an "<%OutputFile%>.jpg""

[Item3]
Title=【高画質】AVC 480x272 4MB/分
TitleE=[high]AVC 480x272 4MB/min
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%TemporaryFile%>.wav""
Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%TemporaryFile%>.wav" -lc -br 96000 -of "<%TemporaryFile%>.mp4"
Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%TemporaryFile%>.mp4" -acodec copy -i "<%InputFile%>" -r 29.97 -vcodec libx264 -g 100 -level 21 -cqp 26 -bufsize 768k -maxrate 1500k -coder 1 -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -s 480x272 -aspect 30:17 -qmin 13 -qmax 49 -qdiff 7 -subq 7 "<%OutputFile%>.MP4""
Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 5 -vframes 1 -s 160x120 -an "<%OutputFile%>.jpg""

[Item4]
Title=【最高画質】AVC 720x480 8MB/分
TitleE=[excellent]AVC 720x480 8MB/min
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%TemporaryFile%>.wav""
Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%TemporaryFile%>.wav" -lc -cbr 144000 -of "<%TemporaryFile%>.mp4"
Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%TemporaryFile%>.mp4" -acodec copy -i "<%InputFile%>" -r 29.97 -vcodec libx264 -g 100 -level 30 -b 1024k -bt 300k -bufsize 768k -maxrate 1500k -coder 1 -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -s 720x480 -aspect 3:2 -qmin 13 -qmax 49 -qdiff 7 -subq 7 "<%OutputFile%>.MP4"
Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 5 -vframes 1 -s 160x120 -an "<%OutputFile%>.jpg""

成功した環境はPentium Dの3.4GHz、ffmpegPentium4最適化版。PSPはFW6.20。flv、H.264divx、MPEG2 tsファイル、movやYoutubeのHD画質であるmp4は難なく変換できた。wmv、可変ビットレート音声、24fps動画では、まれに変換できないかもしれない。

旧版(安定版)

エラーが発生する場合は、2010年10月版の安定したほうを使ってください。
PSPファームウェア4.20と5.50のVIDEOフォルダで動作を確認した。(id:KMYに感謝!)

  1. http://blog.k-tai-douga.com/article/41051685.htmlから、ffmpeg_bin-25287.zipまたは各自のCPUごとの最適化版をダウンロードして解凍したffmpeg.exeをcoresフォルダの中へ上書き。
  2. ftp://ftp6.nero.com/tools/NeroAACCodec-1.5.1.zipから、NeroAACCodec-1.5.1.zipをダウンロードして、win32フォルダに入っているneroAacEnc.exeなど3つをcoresフォルダの中へ。
  3. Transcoding.iniを以下のように書き換え。
[Info][Info]
Title=FFmpeg rev.25287 for PSP
TitleE=FFmpeg rev.25287 for PSP


Description=FFmpeg rev.25287用の設定。PSP用。
DescriptionE=for FFmpeg rev.25287 configuration.for PSP

[Item0]
Title=【低画質】AVC 480x272/240kbps ステレオ/80kbps 2.5M/分
TitleE=[low]AVC 480x272/240kbps Stereo/80kbps 2.5M/min
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%TemporaryFile%>.wav""
Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%TemporaryFile%>.wav" -lc -br 80000 -of "<%TemporaryFile%>.aac"
Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%TemporaryFile%>.aac" -acodec copy -i "<%InputFile%>" -r 29.97 -vcodec libx264 -g 250 -level 21 -b 240k -bt 80k -bufsize 768k -maxrate 1500k -coder 1 -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -s 480x272 -aspect 30:17 -qmin 24 -qmax 49 -qdiff 7 -subq 7 "<%OutputFile%>.MP4""
Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 5 -vframes 1 -s 160x120 -an "<%OutputFile%>.jpg""

[Item1]
Title=【中画質】AVC 480x272/cqp31 ステレオ/80kbps 3.5M/分
TitleE=[middle]AVC 480x272/cqp31 Stereo/80kbps 3.5M/min
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%TemporaryFile%>.wav""
Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%TemporaryFile%>.wav" -lc -br 80000 -of "<%TemporaryFile%>.aac"
Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%TemporaryFile%>.aac" -acodec copy -i "<%InputFile%>" -r 29.97 -vcodec libx264 -g 100 -level 21 -cqp 31 -bufsize 768k -maxrate 1500k -coder 1 -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -s 480x272 -aspect 30:17 -qmin 18 -qmax 49 -qdiff 7 -subq 7 "<%OutputFile%>.MP4""
Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 5 -vframes 1 -s 160x120 -an "<%OutputFile%>.jpg""

[Item2]
Title=【高画質】AVC 480x272/cqp27 ステレオ/96kbps 5MB/分
TitleE=[high]AVC 480x272/cqp27 Stereo/96kbps 5MB/min
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%TemporaryFile%>.wav""
Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%TemporaryFile%>.wav" -lc -br 96000 -of "<%TemporaryFile%>.aac"
Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%TemporaryFile%>.aac" -acodec copy -i "<%InputFile%>" -r 29.97 -vcodec libx264 -g 100 -level 21 -cqp 27 -bufsize 768k -maxrate 1500k -coder 1 -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -s 480x272 -aspect 30:17 -qmin 13 -qmax 49 -qdiff 7 -subq 7 "<%OutputFile%>.MP4""
Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 5 -vframes 1 -s 160x120 -an "<%OutputFile%>.jpg""

[Item3]
Title=【最高画質】AVC 480x272/1072kbps ステレオ/128kbps 8MB/分
TitleE=[excellent]AVC 480x272/1072kbps Stereo/128kbps 8MB/min
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%TemporaryFile%>.wav""
Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%TemporaryFile%>.wav" -lc -cbr 128000 -of "<%TemporaryFile%>.aac"
Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%TemporaryFile%>.aac" -acodec copy -i "<%InputFile%>" -r 29.97 -vcodec libx264 -g 100 -level 21 -b 1056k -bt 300k -bufsize 768k -maxrate 1500k -coder 1 -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -s 480x272 -aspect 30:17 -qmin 13 -qmax 49 -qdiff 7 -subq 7 "<%OutputFile%>.MP4""
Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 5 -vframes 1 -s 160x120 -an "<%OutputFile%>.jpg""

画質

http://www.nasa.gov/multimedia/hd/
より、Avatar Director Cameron Shares NASA's Exploration of Earthから、
Avatar Director Cameron: NASA Sees Earth Connections(Avatar_1.mov)を引用。1分15秒。

【低画質】AVC 480x272/240kbps 2691KB



【中画質】AVC 480x272/cqp31 3097KB



【高画質】AVC 480x272/cqp27 4870KB



【最高画質】AVC 480x272/1072kbps 9891KB

音質

ffmpeg内蔵のAAC出力はrev.27045では実験段階で、音質と右から鳴る音声に問題がある。(AAC128k≒MP3 80kbpsくらい。ゴリョッという音が鳴ることがある。)。
そのため、2011年1月30日現在のところ、rev18715以降のffmpegPSP用動画を作成する場合、外部のAACエンコーダを使わないとバグは避けられないが、一旦音声をWaveファイルとして抽出するため、処理が複雑になる。(すでに圧縮された音の再圧縮や-cutoffオプション使用の場合の音質は、若干良くなるが、バグはそのまま。)
neroAacEnc.exeのAAC出力は、AAC64k≒MP3 80k、AAC80k≒MP3 104kくらい。64kはひどい。80kbpsからは明らかな劣化をしなくなる。
また、AACの96kbps以上では、iTunes 10.0の方がneroよりも高音質になる。そのため、さらに一手間かけて効率を上げたい場合、qtaacencを導入してiTunesAACエンコーダを借りてエンコードすれば、さらに高品質になると思います。