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

时间:2014-09-29 22:20:29

标签: ffmpeg converter

如何使用ffmpeg将 .flac转换为.mp3 ,保留所有元数据(即将.flac文件中的Vorbis注释转换为.mp3的ID3v2元数据)?

8 个答案:

答案 0 :(得分:114)

以下命令在.mp3(320 kbps)上保持高质量,并且.flac文件中的元数据转换为ID3v2格式,可以包含在.mp3文件中:

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

答案 1 :(得分:39)

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

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

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

获取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。

答案 2 :(得分:11)

如果您想节省一点空间,请尝试hydrogenaud.io

的建议
  

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

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

如果要在ffmpeg中使用此选项,则应使用-V3 (~175 kbps)别名。

  

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

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

如果您也想要ID3v1元标记,则应添加-V参数。

所以我最后的命令是:

-write_id3v1 1

答案 3 :(得分:7)

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

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

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

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

但是,ffmpeg将我的专辑封面从jpeg转码为png,这增加了封面艺术的大小。

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

(我猜上面的转换类型有意义given how ffmpeg works。)

经过一番挖掘,我找到了-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))

答案 4 :(得分:3)

要在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"' \;

它将创建一个名为&#34; mp3&#34;的文件夹。在带有flac文件的文件中,在mp3文件夹中,它将保存比特率为320kbps的相对mp3文件,而不保留名称中的旧文件扩展名。

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

单行将所有.flac文件转换为单个目录中的.mp3,并保留最多个元数据:

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

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

ffmpeg: flac to mp3

答案 7 :(得分:0)

flac2mp3.sh脚本使用ffmpeg将FLAC文件的文件夹树转换为MP3文件的另一个文件夹树。如果有的话,包括封面。您可以设置CORES变量来创建后台作业,以一次转换多个文件。

相关问题