使用 ffmpeg 将.flac 转换为.mp3,保留所有元数据

如何使用 ffmpeg 转换 .flc 到.mp3,同时保留所有元数据(即在。的 ID3v2元数据的 flac 文件。MP3) ?

112967 次浏览

以下命令保持高质量。Mp3(320kbps) ,以及来自。Flac 文件转换为 ID3v2格式,可以包含在。Mp3档案:

ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3

完美的答案在上面。我使用这个命令将它和 find 一起添加子树中的所有 FLAC 文件到 iTunes

find . -name "*.flac" -exec ffmpeg -i {} -ab 160k -map_metadata 0 -id3v2_version 3 {}.mp3 \;

要自动将生成的文件添加到 iTunes,请使用

find ~/Music/ -name "Automatically Add*"

结果。

/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized

然后运行例如。

find . -name "*.mp3" -exec mv {} "/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized/" \;

自动将所有转换后的曲目添加到 iTunes。

如果你想节省一点空间,试试 氢声的建议:

非常高的质量: HiFi,家庭,或安静的听,以最好的文件大小 建议使用 -V0 (~245 kbps)-V1 (~225 kbps)-V2 (~190 kbps)-V3 (~175 kbps)。 这些 VBR 设置通常会产生透明的结果。这些预置之间可能存在听觉差异,但很少。

资料来源: http://wiki.hydrogenaud.io/index.php?title=LAME

如果希望在 ffmpeg 中使用此选项,则应使用 -q:a 0别名。

-qscale:a(或别名 -q:a)控制质量。值是特定于编码器的,因此对于 libmp3lam,范围是0-9,其中较低的值是较高的质量。0-3通常会产生透明的结果,4(默认)应该接近感知透明,6产生一个“可接受”的质量。在独立的跛脚命令行界面工具中,选项 -qscale:a被映射到选项 -V

资料来源: https://trac.ffmpeg.org/wiki/Encode/MP3

如果您也想要 ID3v1元标签,您应该添加 -write_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

我正在测试以下命令将 infile.flac文件转换为 outfile.mp3:

ffmpeg  -i infile.flac  -q:a 0  outfile.mp3

从 Ubuntu 16.04开始,上面的命令似乎复制了元数据(大部分? 全部?)。

-q:a 0告诉 ffmpeg使用最高质量的 VBR。

然而,ffmpeg是转码我的专辑艺术从 jpegpng,这增加了封面艺术的大小。

Stream mapping:
Stream #0:1 -> #0:0 (mjpeg (native) -> png (native))
Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))

(我想上面的转换是有意义的 考虑到 ffmpeg的工作原理。)

深入研究之后,我找到了 -c:v copy选项,它指定应该复制视频流,而不是转码。完整的命令是:

ffmpeg  -i infile.flac  -c:v copy  -q:a 0  outfile.mp3

上述命令的结果是:

Stream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))

我知道这并没有被要求,但考虑到这样做的原因之一(至少这是我想做的)是为了音乐可以导入到苹果 iTunes,而不支持 FLAC。在这种情况下,将 FLAC 转换成苹果自己的无损格式 m4a 更有意义。我使用此命令转换当前文件夹中的所有文件,同时保留相似的文件大小。

find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;

要在 mp3中递归地转换嵌套文件夹中的所有 flac 文件,我使用以下命令:

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文件转换为单个目录中的 .mp3,同时保持 大部分元数据:

for file in *.flac; do ffmpeg -i $file -q:a 0 ${file:r}.mp3; done

(注意: ${file:r}删除给定文件路径的扩展名)

ffmpeg: flac to mp3

这个 Flac2mp3.sh脚本使用 ffmpeg将 FLAC 文件的文件夹树转换成另一个 MP3文件的文件夹树。包括封面艺术,当存在。可以设置 CORES变量来创建后台作业,以便一次转换多个文件。