WALKMANやPSP用に動画を変換してみよう
WALKMANやPSPで視聴可能な動画へ変換する手順をまとめてみました。
人によって様々な方法で動画を変換していると思いますが、私は携帯動画変換君を使っています。
このソフトウェアに同梱のFFmpegは古いので、最新のものへ差し替えて使いましょう。
それに伴いFFmpegの記述方法が変わってしまいますので、それに対応しなければなりません。
そういったことも踏まえて解説していきます。
PSP-3000, NW-A847, HD238 |
携帯動画変換君
公式サイトから「携帯動画変換君 Version 0.34」をダウンロードして展開して下さい。
「3GP_Converter034」の展開 | ||||
cores | default_setting | languages | 3GP_Converter.exe | Setup.exe |
ATOMChanger.exe avscheck.exe AVSredirect.dll cygwin1.dll cygz.dll ffmpeg.exe neroAacEnc.exe | English.ini Japanese.ini |
表は「3GP_Converter034」を展開し、必要なディレクトリとファイルを抜き出したものです。 展開したディレクトリにはファイルが沢山入っていますが、殆ど必要ないので指定されたファイル以外は全て削除して下さい。 同梱の「about_cores.txt」に記述されているものだけを残したので、これで最小構成のはずです。 別に削除しなくても動作に問題はありませんが、必要の無いものが雑然と入っているのを私は良しとしません。 全く気にならない方はそのまま先へ進んで下さい。 また、「ffmpeg.exe」と「neroAacEnc.exe」については後述します。
最新版FFmpeg
最新のFFmpegを用意します。ソースからコンパイルしても良し、バイナリを何処かからダウンロードしても良し……これではあまりに不親切なので、私が使わせていただいているものを紹介します。 「お気に入りの動画を携帯で見よう」で、新しいFFmpegのソースからコンパイル済みのバイナリが配布されています。 好きなバージョンをダウンロードして下さい。展開すると「ffmpeg.exe」というファイルがあるので、前述の「cores」ディレクトリに入っている同名のファイルと差し替えます。 私は「FFmpeg rev.25017」を使ってこの記事を書いてます。
Nero AAC コーデック
Neroの公式サイトから「Nero AAC コーデック」をダウンロードして展開します。 展開すると「win32」というディレクトリに「neroAacEnc.exe」というファイルが入っているので、前述の「cores」ディレクトリに配置して下さい。
WALKMANとPSP用の設定ファイル
WALKMANとPSP用の設定ファイルを用意します。「default_setting」というディレクトリ配下に設定ファイルを書いていきます。
それでは私が書いた設定ファイルを紹介します。
「Transcoding_NW-A840_v105.ini」
[Info] Title=NW-A840 Ver.1.05 Description=Sony Walkman NW-A840 Series [Item0] Title=[04:03] AVC Baseline Profile 480x360 3072kbps AAC 192kbps 44.1kHz Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%OutputFile%>_temp.wav"" Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%OutputFile%>_temp.wav" -le -br 192000 -of "<%OutputFile%>_temp.aac" Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 1 -passlogfile "x264_2pass" -threads 0 -s 480x360 -aspect 4:3 -vcodec libx264 -coder 0 -level 30 -b 3072k -g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -an "<%OutputFile%>_temp.mp4"" Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 2 -passlogfile "x264_2pass" -threads 0 -s 480x360 -aspect 4:3 -vcodec libx264 -coder 0 -level 30 -b 3072k -g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -an "<%OutputFile%>_temp.mp4"" Command4=""<%AppPath%>\cores\ffmpeg" -y -i "<%OutputFile%>_temp.aac" -acodec copy -i "<%OutputFile%>_temp.mp4" -vcodec copy -f mp4 "<%OutputFile%>.mp4"" Command5=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 10 -vframes 1 -s 160x120 -aspect 4:3 -an "<%OutputFile%>.jpg"" Command6="rm "<%OutputFile%>_temp.wav"" Command7="rm "<%OutputFile%>_temp.aac"" Command8="rm "<%OutputFile%>_temp.mp4"" Command9="rm "<%AppPath%>\x264_2pass.log"" Command10="rm "<%AppPath%>\x264_2pass.log.mbtree"" Command11="rm "<%AppPath%>\x264_2pass-0.log"" [Item1] Title=[16:09] AVC Baseline Profile 640x360 4096kbps AAC 192kbps 44.1kHz Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%OutputFile%>_temp.wav"" Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%OutputFile%>_temp.wav" -le -br 192000 -of "<%OutputFile%>_temp.aac" Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 1 -passlogfile "x264_2pass" -threads 0 -s 640x360 -aspect 16:9 -vcodec libx264 -coder 0 -level 30 -b 4096k -g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -an "<%OutputFile%>_temp.mp4"" Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 2 -passlogfile "x264_2pass" -threads 0 -s 640x360 -aspect 16:9 -vcodec libx264 -coder 0 -level 30 -b 4096k -g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -an "<%OutputFile%>_temp.mp4"" Command4=""<%AppPath%>\cores\ffmpeg" -y -i "<%OutputFile%>_temp.aac" -acodec copy -i "<%OutputFile%>_temp.mp4" -vcodec copy -f mp4 "<%OutputFile%>.mp4"" Command5=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 10 -vframes 1 -s 160x90 -aspect 16:9 -an "<%OutputFile%>.jpg"" Command6="rm "<%OutputFile%>_temp.wav"" Command7="rm "<%OutputFile%>_temp.aac"" Command8="rm "<%OutputFile%>_temp.mp4"" Command9="rm "<%AppPath%>\x264_2pass.log"" Command10="rm "<%AppPath%>\x264_2pass.log.mbtree"" Command11="rm "<%AppPath%>\x264_2pass-0.log"" [Item2] Title=[16:10] AVC Baseline Profile 640x400 4552kbps AAC 192kbps 44.1kHz Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%OutputFile%>_temp.wav"" Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%OutputFile%>_temp.wav" -le -br 192000 -of "<%OutputFile%>_temp.aac" Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 1 -passlogfile "x264_2pass" -threads 0 -s 640x400 -aspect 16:10 -vcodec libx264 -coder 0 -level 30 -b 4552k -g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -an "<%OutputFile%>_temp.mp4"" Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 2 -passlogfile "x264_2pass" -threads 0 -s 640x400 -aspect 16:10 -vcodec libx264 -coder 0 -level 30 -b 4552k -g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -an "<%OutputFile%>_temp.mp4"" Command4=""<%AppPath%>\cores\ffmpeg" -y -i "<%OutputFile%>_temp.aac" -acodec copy -i "<%OutputFile%>_temp.mp4" -vcodec copy -f mp4 "<%OutputFile%>.mp4"" Command5=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 10 -vframes 1 -s 160x100 -aspect 16:10 -an "<%OutputFile%>.jpg"" Command6="rm "<%OutputFile%>_temp.wav"" Command7="rm "<%OutputFile%>_temp.aac"" Command8="rm "<%OutputFile%>_temp.mp4"" Command9="rm "<%AppPath%>\x264_2pass.log"" Command10="rm "<%AppPath%>\x264_2pass.log.mbtree"" Command11="rm "<%AppPath%>\x264_2pass-0.log"" [Item3] Title=[04:03] Generate Thumbnail 160x120 Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 10 -vframes 1 -s 160x120 -aspect 4:3 -an "<%OutputFile%>.jpg"" [Item4] Title=[16:09] Generate Thumbnail 160x90 Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 10 -vframes 1 -s 160x90 -aspect 16:9 -an "<%OutputFile%>.jpg"" [Item5] Title=[16:10] Generate Thumbnail 160x100 Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 10 -vframes 1 -s 160x100 -aspect 16:10 -an "<%OutputFile%>.jpg""
「Transcoding_PSP_v101.ini」
[Info] Title=PSP Ver.1.01 Description=Sony Play Station Portable [Item0] Title=[04:03] AVC Baseline Profile 360x270 3072kbps AAC 192kbps 44.1kHz Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%OutputFile%>_temp.wav"" Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%OutputFile%>_temp.wav" -le -br 192000 -of "<%OutputFile%>_temp.aac" Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 1 -passlogfile "x264_2pass" -threads 0 -s 360x270 -aspect 4:3 -vcodec libx264 -coder 1 -level 30 -b 3072k -g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -an "<%OutputFile%>_temp.mp4"" Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 2 -passlogfile "x264_2pass" -threads 0 -s 360x270 -aspect 4:3 -vcodec libx264 -coder 1 -level 30 -b 3072k -g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -an "<%OutputFile%>_temp.mp4"" Command4=""<%AppPath%>\cores\ffmpeg" -y -i "<%OutputFile%>_temp.aac" -acodec copy -i "<%OutputFile%>_temp.mp4" -vcodec copy -f mp4 "<%OutputFile%>.mp4"" Command5=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 10 -vframes 1 -s 160x120 -aspect 4:3 -an "<%OutputFile%>.jpg"" Command6="rm "<%OutputFile%>_temp.wav"" Command7="rm "<%OutputFile%>_temp.aac"" Command8="rm "<%OutputFile%>_temp.mp4"" Command9="rm "<%AppPath%>\x264_2pass.log"" Command10="rm "<%AppPath%>\x264_2pass.log.mbtree"" Command11="rm "<%AppPath%>\x264_2pass-0.log"" [Item1] Title=[16:09] AVC Baseline Profile 480x270 4096kbps AAC 192kbps 44.1kHz Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%OutputFile%>_temp.wav"" Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%OutputFile%>_temp.wav" -le -br 192000 -of "<%OutputFile%>_temp.aac" Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 1 -passlogfile "x264_2pass" -threads 0 -s 480x270 -aspect 16:9 -vcodec libx264 -coder 1 -level 30 -b 4096k -g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -an "<%OutputFile%>_temp.mp4"" Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 2 -passlogfile "x264_2pass" -threads 0 -s 480x270 -aspect 16:9 -vcodec libx264 -coder 1 -level 30 -b 4096k -g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -an "<%OutputFile%>_temp.mp4"" Command4=""<%AppPath%>\cores\ffmpeg" -y -i "<%OutputFile%>_temp.aac" -acodec copy -i "<%OutputFile%>_temp.mp4" -vcodec copy -f mp4 "<%OutputFile%>.mp4"" Command5=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 10 -vframes 1 -s 160x120 -aspect 4:3 -an "<%OutputFile%>.jpg"" Command6="rm "<%OutputFile%>_temp.wav"" Command7="rm "<%OutputFile%>_temp.aac"" Command8="rm "<%OutputFile%>_temp.mp4"" Command9="rm "<%AppPath%>\x264_2pass.log"" Command10="rm "<%AppPath%>\x264_2pass.log.mbtree"" Command11="rm "<%AppPath%>\x264_2pass-0.log"" [Item2] Title=[16:10] AVC Baseline Profile 432x270 3686kbps AAC 192kbps 44.1kHz Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec pcm_s16le -ac 2 -ar 44100 "<%OutputFile%>_temp.wav"" Command1=""<%AppPath%>\cores\neroAacEnc" -if "<%OutputFile%>_temp.wav" -le -br 192000 -of "<%OutputFile%>_temp.aac" Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 1 -passlogfile "x264_2pass" -threads 0 -s 432x270 -aspect 16:10 -vcodec libx264 -coder 1 -level 30 -b 3686k -g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -an "<%OutputFile%>_temp.mp4"" Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 2 -passlogfile "x264_2pass" -threads 0 -s 432x270 -aspect 16:10 -vcodec libx264 -coder 1 -level 30 -b 3686k -g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -an "<%OutputFile%>_temp.mp4"" Command4=""<%AppPath%>\cores\ffmpeg" -y -i "<%OutputFile%>_temp.aac" -acodec copy -i "<%OutputFile%>_temp.mp4" -vcodec copy -f mp4 "<%OutputFile%>.mp4"" Command5=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 10 -vframes 1 -s 160x120 -aspect 4:3 -an "<%OutputFile%>.jpg"" Command6="rm "<%OutputFile%>_temp.wav"" Command7="rm "<%OutputFile%>_temp.aac"" Command8="rm "<%OutputFile%>_temp.mp4"" Command9="rm "<%AppPath%>\x264_2pass.log"" Command10="rm "<%AppPath%>\x264_2pass.log.mbtree"" Command11="rm "<%AppPath%>\x264_2pass-0.log"" [Item3] Title=[04:03] Generate Thumbnail 160x120 Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 10 -vframes 1 -s 160x120 -aspect 4:3 -an "<%OutputFile%>.jpg""
解説
まずはWALKMANとPSPで再生可能な動画の仕様について確認します。
WALKMANとPSPで再生可能な動画仕様 | |||||
動画圧縮規格 | プロファイル | レベル | ビットレート | フレームレート | |
WALKMAN NW-A840シリーズ | H.264/AVC | Baseline Profile | 3.0以下 | 10Mbps以下 | 30fps以下 |
PSP-1000, PSP-2000, PSP-3000 | H.264/AVC | Main Profile | 3.0以下 | 10Mbps以下 | 30fps以下 |
ビットレートの算出(WALKMAN) | ||||
アスペクト比 | 画素数 | 比率 | ビットレート(kbps) | |
04:03 | 480 x 360 = 172,800 | 1.33… | 3072 | |
16:09 | 640 x 360 = 230,400 | 1 | 4096(基準値) | |
16:10 | 640 x 400 = 256,000 | 1.11… | 4552 |
ビットレートの算出(PSP) | ||||
アスペクト比 | 画素数 | 比率 | ビットレート(kbps) | |
04:03 | 360 x 270 = 97,200 | 0.75 | 3072 | |
16:09 | 480 x 270 = 129,600 | 1 | 4096(基準値) | |
16:10 | 432 x 270 = 116,640 | 0.9 | 3686 |
動画変換時にサムネイルを生成する処理を入れています。動画を変換せずにサムネイルのみを生成する処理も入れています。 これは「-ss 10」の部分の数字を変えて、好みの箇所のサムネイルになるように調整するためです。 全ての準備が終われば、携帯動画変換君に動画を放り込むだけです。 あとは指定したディレクトリに変換されます。とっても簡単です。 ようは最新のFFmpegに対応した処理を記述できるかどうかなのです。 それでは素敵な動画ライフを―。