ffmpeg を使うと以下のようなメッセージが流れる。avconv を使えということ。avconv は libav-tools パッケージに含まれる。
$ ffmpeg ffmpeg version 0.8.6-6:0.8.6-1, Copyright (c) 2000-2013 the Libav developers built on Mar 24 2013 07:20:17 with gcc 4.7.2 *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... Use -h to get full help or, even better, run 'man ffmpeg'
ffmpeg 改め avconv を使って mp4 ファイルから音声ストリームを取り出して CBR 64kbit/sec のビットレートで mp3 に変換する例。
$ avconv -vn -i hoge.mp4 -f mp3 -b:a 64k hoge.mp4.mp3 avconv version 0.8.16-6:0.8.16-1, Copyright (c) 2000-2014 the Libav developers built on Sep 17 2014 13:32:57 with gcc 4.7.2 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'hoge.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2014-12-08 15:44:22 Duration: 00:08:30.00, start: 0.000000, bitrate: 177 kb/s Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 640x360 [PAR 1:1 DAR 16:9], 79 kb/s, 6 fps, 6 tbr, 6 tbn, 12 tbc Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 96 kb/s Metadata: creation_time : 2014-12-08 15:44:23 Output #0, mp3, to 'hoge.mp4.mp3': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 TDEN : 2014-12-08 15:44:22 TSSE : Lavf53.21.1 Stream #0.0(und): Audio: libmp3lame, 44100 Hz, stereo, s16, 64 kb/s Metadata: creation_time : 2014-12-08 15:44:23 Stream mapping: Stream #0:1 -> #0:0 (aac -> libmp3lame) Press ctrl-c to stop encoding size= 3985kB time=510.04 bitrate= 64.0kbits/s video:0kB audio:3985kB global headers:0kB muxing overhead 0.006397%
できたファイルの情報を表示
$ avconv -i hoge.mp4.mp3 avconv version 0.8.16-6:0.8.16-1, Copyright (c) 2000-2014 the Libav developers built on Sep 17 2014 13:32:57 with gcc 4.7.2 [mp3 @ 0x87b6800] max_analyze_duration reached Input #0, mp3, from 'hoge.mp4.mp3': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2014-12-08 15:44:22 encoder : Lavf53.21.1 Duration: 00:08:30.04, start: 0.000000, bitrate: 64 kb/s Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 64 kb/s At least one output file must be specified
さらに avconv を使って mp4 ファイルから音声ストリームを取り出して VBR で mp3 に変換する例。
$ avconv -vn -i hoge.mp4 -f mp3 -q:a 9 hoge.mp4.mp3 avconv version 0.8.16-6:0.8.16-1, Copyright (c) 2000-2014 the Libav developers built on Sep 17 2014 13:32:57 with gcc 4.7.2 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'hoge.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2014-12-08 15:44:22 Duration: 00:08:30.00, start: 0.000000, bitrate: 177 kb/s Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 640x360 [PAR 1:1 DAR 16:9], 79 kb/s, 6 fps, 6 tbr, 6 tbn, 12 tbc Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 96 kb/s Metadata: creation_time : 2014-12-08 15:44:23 Output #0, mp3, to 'hoge.mp4.mp3': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 TDEN : 2014-12-08 15:44:22 TSSE : Lavf53.21.1 Stream #0.0(und): Audio: libmp3lame, 44100 Hz, stereo, s16, 200 kb/s Metadata: creation_time : 2014-12-08 15:44:23 Stream mapping: Stream #0:1 -> #0:0 (aac -> libmp3lame) Press ctrl-c to stop encoding size= 3008kB time=510.04 bitrate= 48.3kbits/s video:0kB audio:3007kB global headers:0kB muxing overhead 0.008476%
できたファイルの情報を表示
$ avconv -i hoge.mp4.mp3 avconv version 0.8.16-6:0.8.16-1, Copyright (c) 2000-2014 the Libav developers built on Sep 17 2014 13:32:57 with gcc 4.7.2 [mp3 @ 0x9461800] max_analyze_duration reached Input #0, mp3, from 'hoge.mp4.mp3': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2014-12-08 15:44:22 encoder : Lavf53.21.1 Duration: 00:08:30.04, start: 0.000000, bitrate: 48 kb/s Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 32 kb/s At least one output file must be specified
findを使えば以下のようにして一括で変換できる。
$ find -type f -name "*.mp4" -print0 | xargs -0 -n 1 -i avconv -vn -i {} -f mp3 -b:a 64k {}.mp3 $ find -type f -name "*.mp4" -print0 | xargs -0 -n 1 -i avconv -vn -i {} -f mp3 -q:a 9 {}.mp3
VBR とファイルサイズ
以下のようにして hoge.mp4 からさまざまな VBR の品質指定を行ってみた。libmp3lame を使う場合には lame の -V オプションの引数を avconv の -q:a の引数に与えることができる。つまり、0から9までを与えられるはずだけど、この範囲を超えた場合どうなるか (ビットレートは低くなるか)。
$ avconv -i hoge.mp4 avconv version 0.8.16-6:0.8.16-1, Copyright (c) 2000-2014 the Libav developers built on Sep 17 2014 13:32:57 with gcc 4.7.2 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'hoge.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2014-12-08 15:44:22 Duration: 00:08:30.00, start: 0.000000, bitrate: 177 kb/s Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 640x360 [PAR 1:1 DAR 16:9], 79 kb/s, 6 fps, 6 tbr, 6 tbn, 12 tbc Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 96 kb/s Metadata: creation_time : 2014-12-08 15:44:23 At least one output file must be specified $ for i in `seq -w 00 30`; do avconv -y -vn -i hoge.mp4 -t 10 -f mp3 -q:a ${i} hoge.mp4.${i}.mp3; done
以下は結果。ファイルサイズでみると、0から10までは違いがあり、11以降は10と同じ。実際0から10はビットレートが変わっており、11以降は10と同じビットレートになっていることが分かる。聞いた感じでは、9と10の間には明らかな差が感じられる。
$ ls -la hoge.mp4.*.mp3 -rwxr-xr-x 0 ***** ***** 149544 Dec 22 00:26 hoge.mp4.00.mp3 -rwxr-xr-x 0 ***** ***** 134014 Dec 22 00:26 hoge.mp4.01.mp3 -rwxr-xr-x 0 ***** ***** 117307 Dec 22 00:26 hoge.mp4.02.mp3 -rwxr-xr-x 0 ***** ***** 108409 Dec 22 00:26 hoge.mp4.03.mp3 -rwxr-xr-x 0 ***** ***** 97140 Dec 22 00:26 hoge.mp4.04.mp3 -rwxr-xr-x 0 ***** ***** 85279 Dec 22 00:26 hoge.mp4.05.mp3 -rwxr-xr-x 0 ***** ***** 76702 Dec 22 00:27 hoge.mp4.06.mp3 -rwxr-xr-x 0 ***** ***** 69318 Dec 22 00:27 hoge.mp4.07.mp3 -rwxr-xr-x 0 ***** ***** 66732 Dec 22 00:27 hoge.mp4.08.mp3 -rwxr-xr-x 0 ***** ***** 57515 Dec 22 00:27 hoge.mp4.09.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.10.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.11.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.12.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.13.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.14.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.15.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.16.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.17.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.18.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.19.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.20.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.21.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.22.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.23.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:27 hoge.mp4.24.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:28 hoge.mp4.25.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:28 hoge.mp4.26.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:28 hoge.mp4.27.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:28 hoge.mp4.28.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:28 hoge.mp4.29.mp3 -rwxr-xr-x 0 ***** ***** 46360 Dec 22 00:28 hoge.mp4.30.mp3 $ md5sum hoge.mp4.*.mp3 6fef6aa8a907ebc37de8858c4f141f76 hoge.mp4.00.mp3 7dc9edc4b36a683d6a7535e08a1b7041 hoge.mp4.01.mp3 0b4c5f76a0afe86b1797e25138ace37f hoge.mp4.02.mp3 45970356596c46971223efaa9a747214 hoge.mp4.03.mp3 b610fd2aa6e8a0cb1f315621d9632e30 hoge.mp4.04.mp3 e57b6b26b4c161646eb7bf952918b6aa hoge.mp4.05.mp3 2905e63dc597e59775972bbec1116e17 hoge.mp4.06.mp3 806b12357736ba2f89b3c417fd70d283 hoge.mp4.07.mp3 c062e908b21450ce3e1c739f3658588e hoge.mp4.08.mp3 aa907226abf5087bee1df6fd01ef9951 hoge.mp4.09.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.10.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.11.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.12.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.13.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.14.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.15.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.16.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.17.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.18.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.19.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.20.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.21.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.22.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.23.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.24.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.25.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.26.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.27.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.28.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.29.mp3 7a7f44fe7e3e543361a532763556c16e hoge.mp4.30.mp3
サンプリングレートによる違いも比較してみる。8000, 11025, 16000, 22050 については"Unsupported sample rate."というメッセージが出て、VBRにならなかった。音源にもよると思うけど、32000 44100 48000 のビットレートはあまり変わらない感じ。
$ for i in 8000 11025 16000 22050 32000 44100 48000; do avconv -y -vn -i hoge.mp4 -t 10 -f mp3 -ar ${i} -q:a 9 hoge.mp4.${i}.mp3 ; done $ ls -la hoge.mp4.*.mp3 -rwxr-xr-x 0 ***** ***** 18445 Dec 22 00:51 hoge.mp4.08000.mp3 -rwxr-xr-x 0 ***** ***** 24663 Dec 22 00:51 hoge.mp4.11025.mp3 -rwxr-xr-x 0 ***** ***** 32773 Dec 22 00:51 hoge.mp4.16000.mp3 -rwxr-xr-x 0 ***** ***** 36896 Dec 22 00:51 hoge.mp4.22050.mp3 -rwxr-xr-x 0 ***** ***** 45877 Dec 22 00:51 hoge.mp4.32000.mp3 -rwxr-xr-x 0 ***** ***** 57515 Dec 22 00:51 hoge.mp4.44100.mp3 -rwxr-xr-x 0 ***** ***** 58405 Dec 22 00:51 hoge.mp4.48000.mp3 $ md5sum hoge.mp4.*.mp3 46f126e08512670938112540a5b57755 hoge.mp4.08000.mp3 9f054ec8344aa05632f0f2368fbd0063 hoge.mp4.11025.mp3 e2f187cac8ac3652591fe6e60886096c hoge.mp4.16000.mp3 c5ebac892094b9bc7ee7255522d78d7c hoge.mp4.22050.mp3 41100e8a6bed637c8a76d3e37c63677f hoge.mp4.32000.mp3 aa907226abf5087bee1df6fd01ef9951 hoge.mp4.44100.mp3 fb050cc853b797c65f43666a862bce0c hoge.mp4.48000.mp3
ということで、この音源に類似した音源ではビットレートを 32000 kbit/sec、VBR 9 の品質でエンコードしてみる。また気になったらいろいろ変えてみよう。
$ find -type f -name "*.mp4" -print0 | xargs -0 -n 1 -i avconv -vn -i {} -f mp3 -ar 32000 -q:a 9 {}.mp3
$ for i in `seq -w 24 32`; do avconv -y -vn -i hoge.mp4 -vn -t 10 -ab ${i}k -c:a libmp3lame hoge.mp4.${i}.mp3; done $ for i in `seq -w 24 32`; do avconv -y -vn -i hoge.mp4 -vn -t 10 -ab ${i}k -c:a wmav2 hoge.mp4.${i}.wma; done $ for i in `seq -w 00 10`; do avconv -y -vn -i hoge.mp4 -vn -t 10 -qscale:a ${i} -c:a libmp3lame hoge.mp4.${i}.mp3; done $ for i in `seq -w 00 10`; do avconv -y -vn -i hoge.mp4 -vn -t 10 -qscale:a ${i} -c:a wmav2 hoge.mp4.${i}.wma; done $ for i in `seq -w 00 10`; do avconv -y -vn -i hoge.mp4 -vn -t 10 -qscale:a ${i} -c:a libvorbis hoge.mp4.${i}.ogg; done