Convert .flac to .mp3 with ffmpeg, keeping all metadata
如何使用ffmpeg将.flac转换为.mp3,同时保留所有元数据(即将.flac文件中的Vorbis注释转换为.mp3的ID3v2元数据)?
以下命令可确保.mp3(320 kbps)上的高质量,并将.flac文件中的元数据转换为ID3v2格式,该格式可包含在.mp3文件中:
1 | ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3 |
上面的完美答案。我将其与find一起使用,使用此命令将子树中的所有FLAC文件添加到iTunes
1 | find . -name"*.flac" -exec ffmpeg -i {} -ab 160k -map_metadata 0 -id3v2_version 3 {}.mp3 \\; |
要将结果文件自动添加到iTunes,请使用以下命令获取iTunes导入目录
1 | find ~/Music/ -name"Automatically Add*" |
结果例如
1 | /Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized |
然后运行例如
1 | find . -name"*.mp3" -exec mv {}"/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized/" \\; |
自动将所有转换后的曲目添加到iTunes。
如果您想节省一点空间,请尝试hydrogenaud.io的建议:
Very high quality: HiFi, home, or quiet listening, with best file size
-V0 (~245 kbps) ,-V1 (~225 kbps) ,-V2 (~190 kbps) or-V3 (~175 kbps) are recommended.
These VBR settings will normally produce transparent results. Audible differences between these presets may exist, but are rare.
资料来源:http://wiki.hydrogenaud.io/index.php?title=LAME
如果要在ffmpeg中使用此选项,则应使用
Control quality with
-qscale:a (or the alias-q:a ). Values are encoder specific, so for libmp3lame the range is 0-9 where a lower value is a higher quality. 0-3 will normally produce transparent results, 4 (default) should be close to perceptual transparency, and 6 produces an"acceptable" quality. The option-qscale:a is mapped to the-V option in the standalone lame command-line interface tool.
资料来源:https://trac.ffmpeg.org/wiki/Encode/MP3
如果也需要ID3v1元标记,则应添加
所以我的最终命令是:
1 | ffmpeg.exe -y -i input.flac -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 -write_id3v1 1 output.mp3 |
我正在测试以下命令,将
1 | ffmpeg -i infile.flac -q:a 0 outfile.mp3 |
从Ubuntu 16.04开始,上述命令似乎可以复制(大部分?全部?)元数据。
但是,
1 2 3 | Stream mapping: Stream #0:1 -> #0:0 (mjpeg (native) -> png (native)) Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame)) |
(考虑到
经过一番挖掘,我发现了
1 | ffmpeg -i infile.flac -c:v copy -q:a 0 outfile.mp3 |
上面的命令导致:
1 2 3 | Stream mapping: Stream #0:1 -> #0:0 (copy) Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame)) |
一线式将所有
(注意:
为了在mp3中递归转换嵌套文件夹中的所有flac文件,我使用了以下命令:
1 | find '~/Music/' -iname '*.flac' -exec bash -c 'D=$(dirname"{}"); B=$(basename"{}"); mkdir"$D/mp3/"; ffmpeg -i"{}" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame"$D/mp3/${B%.*}.mp3"' \\; |
它将在其中包含flac文件的文件夹中创建一个名为" mp3"的文件夹,并且在mp3文件夹中,它将以320kbps的比特率保存相对的mp3文件,而无需在名称中保留旧文件扩展名。
我知道并没有要求这样做,但是考虑到这样做的原因之一(至少这是我想要做的)是为了可以将音乐导入不支持FLAC的Apple iTunes。在这种情况下,将FLAC转换为Apple自己的无损格式m4a更有意义。我使用此命令转换了当前文件夹中的所有文件,同时保留了相似的文件大小。
此flac2mp3.sh脚本使用