WALKMANやPSP用に動画を変換してみよう

WALKMANPSPで視聴可能な動画へ変換する手順をまとめてみました。 人によって様々な方法で動画を変換していると思いますが、私は携帯動画変換君を使っています。 このソフトウェアに同梱のFFmpegは古いので、最新のものへ差し替えて使いましょう。 それに伴いFFmpegの記述方法が変わってしまいますので、それに対応しなければなりません。 そういったことも踏まえて解説していきます。

PSP-3000, NW-A847, HD238
PSP-3000, NW-A847, HD238

携帯動画変換君

公式サイトから「携帯動画変換君 Version 0.34」をダウンロードして展開して下さい。

「3GP_Converter034」の展開
coresdefault_settinglanguages3GP_Converter.exeSetup.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」ディレクトリに配置して下さい。

WALKMANPSP用の設定ファイル

WALKMANPSP用の設定ファイルを用意します。「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""

解説

まずはWALKMANPSPで再生可能な動画の仕様について確認します。

WALKMANPSPで再生可能な動画仕様
 動画圧縮規格プロファイルレベルビットレートフレームレート
WALKMAN NW-A840シリーズH.264/AVCBaseline Profile3.0以下10Mbps以下30fps以下
PSP-1000, PSP-2000, PSP-3000H.264/AVCMain Profile3.0以下10Mbps以下30fps以下
記述した設定ファイルは、それぞれのハードウェアの仕様に収まるようになっています。 私の好みで少々ビットレートが高めですが、両者共にハードウェア性能が高いので余裕で再生できます。 それぞれ3つのアスペクト比に対応しています。 WALKMANPSPは共に16:09を基準値(4096kbps)として他のアスペクト比の場合のビットレートを算出しました。

ビットレートの算出(WALKMAN
アスペクト比素数比率ビットレート(kbps)
04:03480 x 360 = 172,8001.33…3072
16:09640 x 360 = 230,40014096(基準値)
16:10640 x 400 = 256,0001.11…4552
ビットレートの算出(PSP
アスペクト比素数比率ビットレート(kbps)
04:03360 x 270 = 97,2000.753072
16:09480 x 270 = 129,60014096(基準値)
16:10432 x 270 = 116,6400.93686

動画変換時にサムネイルを生成する処理を入れています。動画を変換せずにサムネイルのみを生成する処理も入れています。 これは「-ss 10」の部分の数字を変えて、好みの箇所のサムネイルになるように調整するためです。 全ての準備が終われば、携帯動画変換君に動画を放り込むだけです。 あとは指定したディレクトリに変換されます。とっても簡単です。 ようは最新のFFmpegに対応した処理を記述できるかどうかなのです。 それでは素敵な動画ライフを―。