转:http://archboy.org/2012/10/18/convert-ape-flac-music-to-mp3/
有时获取的音乐是 ape 或者 flac 等无损格式,如果你对音质要求不是特别高,为了便于传输以及在多种设备上播放,有时将它们转换为(高码率的) mp3 格式或者m4a(mp4 audio)格式会更方便。下面介绍在 Linux 下将 ape、flac、wav等转换成 mp3 格式的方法。
首先确认系统里有 ffmpeg 或 mac、lame、mp3splt 这几个(命令行)工具,没有的话可以到 arch linux package 搜索并安装他们。对于需要处理 flac 和 m4a 格式,还需要工具:flac 和 faac。
对于一个 ape/flac 文件是一首歌的情况
先将原始音频还原为未压缩的 wave 格式
需要先用 ffmpeg 或者 mac 或者 flac 将它转换成 wav 格式,再用 lame 将 wav 转换成 mp3 格式。
假设要转换的歌曲文件名为 song.ape/song.flac,则命令如下:
$ ffmpeg -i song.ape song.wav |
或者
$ mac -d song.ape song.wav |
或者
$ flac -d song.flac -o song.wav |
这样将会得到一个 song.wav 文件。
然后使用各种编码程序压缩 wave 为 mp3 或者 m4a
使用 lame 命令可以压缩成 mp3:
$ lame -V 0 song.wav (使用 VBR 动态码率压缩,0表示最高质量,默认为4,最低为9) |
或者
$ lame -b 320 song.wav (使用固定的 320Kbps 码率压缩) |
或者,使用 faac 编码可以得到 m4a(mp4)格式文件:
$ faac -w -q 100 song.wav -o song.m4a (100 表示最高质量,如果选择 50 则表示 50% 质量) |
当然也可以使用 ffmpeg 压缩得到 m4a 格式:
1 |
$ ffmpeg -i song.wav -strict experimental -c:a aac -b:a 320k song.m4a (这里使用的是 ffmpeg 内置 aac 编码器,设定码率为固定的 320k。注:ffmpeg 内置的 aac 编码器现在还是体验版,可能会有些问题) |
如果编译 ffmpeg 时还包含了其他编码库,比如 libfaac,则可以这样:
$ ffmpeg -i song.wav -c:a libfaac -q:a 100 song.m4a (让 ffmpeg 调用 libfaac 压缩音频,质量设置为 100) $ ffmpeg -i song.wav -c:a libfaac -b:a 320k song.m4a (让 ffmpeg 调用 libfaac 压缩音频,使用固定码率 320k 压缩,注:实际上很少用固定码率压缩 aac) |
也可以使用 ffmpeg 将解压和压缩过程简化为一个步骤,命令如下:
$ ffmpeg -i song.flac -ab 320k -map_metadata 0 song.mp3 |
其中 -map_metadata 表示保留 flac 的元数据(即歌曲名称、演唱者名称等信息)。
批量处理
如果一批 ape 需要转换,最好写一个脚本批量处理,比如:
#!/bin/bash for FILE in *.ape; do ffmpeg -i "$FILE" temp.wav; lame -b 320 temp.wav "${FILE%.*}.mp3"; rm temp.wav done |
如果是一批 flac 文件并且想保留元数据,则脚本为:
#!/bin/bash for FILE in *.flac; do ffmpeg -i "$FILE" -ab 320k -map_metadata 0 "${FILE%.*}.mp3"; done |
对于一个 ape/flac 文件是包含多首歌的情况
通常这种情况下你还会有一个 cue 文件,cue 文件包含有这个 ape/flac 文件的专辑名、演唱者名称、还有每首歌曲的名称和时间范围。我们用上面的方法将 ape/flac 文件整个转换为 mp3 格式之后,再用 mp3splt 工具来分割即可。
注:有时我们获取的 cue 文件可能包含有中文,为了避免出现乱码,可以先查看里面的内容看看是否可以正常阅读,否则可以把文件扩展名更改为 txt 然后拖入 firefox 浏览器然后尝试更改各种编码格式直到正常阅读(中文的使用 gb2312 或者 big5 编码为多),然后把可正常阅读的内容复制下来并替换文件原先的内容,再把文件扩展名更改为 cue即可。
根据 cue 文件分割 mp3 的命令如下:
$ mp3splt -c song.cue -o @n.@t song.mp3 |
其中的参数 @n.@t 表示输出的文件名的格式,常用的有下列几个代替符:
- @a: 歌手名称
- @b: 专辑名称
- @t: 歌曲标题
- @n: 音轨序号
然后就会得到一系列的 mp3 文件。这个方法同时也适合 flac 格式。
最后,如果你不想敲命令的话,还可以使用免费开源的图形界面的工具 soundconverter,只要安装好 GStreamer 插件,它几乎支持所有音频格式。
参考资料:
- FFmpeg and AAC Encoding Guide https://trac.ffmpeg.org/wiki/Encode/AAC
- 其他程序比如 faac 、flac和 lame,因为比较简单,可以直接查看他们的 manual: $ man faac 或者 $man lame