綾小路龍之介の素人思考

[avconv] mp3 にフォーマット変換

avconv を使ってmp3ファイルにフォーマットを変換する。

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

リファレンス

  1. Libav documentation : :
  2. Man page of XARGS
  3. Debian -- Details of package libav-tools in sid
  4. lame(1): create mp3 audio files - Linux man page
  5. Encode/MP3 – FFmpeg
  6. Encode/HighQualityAudio – FFmpeg
  7. TheoraVorbisEncodingGuide – FFmpeg
  8. LAME - Hydrogenaudio Knowledgebase

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2010-08-11T06:50:10+09:00
  2. Modified: 2010-08-11T06:50:10+09:00
  3. Generated: 2017-04-09T23:09:29+09:00