2014-09-29 43 views
46

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

+4

请注意,下一次,你应该问在[苏]'ffmpeg' CLI使用的问题。 [so]仅适用于涉及编程的问题。另外,FLAC [官方支持Vorbis评论](http://xiph.org/flac/format.html#format_overview),所以我假设你想转换为ID3v2而不是“保持”。 – LordNeckbeard 2014-09-29 23:31:12

+0

好的,我解决了我的问题。我在这里问,因为我在StackOverflow上看到这样的问题(例如[this](http://stackoverflow.com/questions/24840708/ffmpeg-convert-flac-to-mp3-and-add-album-art-in-one一步)或[这](http://stackoverflow.com/questions/15294844/with-ffmpeg-trying-to-change-a-container-from-mpeg-ts-to-mp4-fps-became-twice) ),并认为分享我的知识可能很有趣。另外,我看到有一个[ffmpeg标签](http://stackoverflow.com/questions/tagged/ffmpeg),那么为什么不在这里分享我的解决方案?许多开发人员在很多应用程序中使用ffmpeg。 – 2014-09-30 09:33:13

+2

[tag:ffmpeg]标签说:“关于交互式使用FFmpeg命令行工具的问题应该在超级用户上提出。”这不是什么大问题,但我只想指出,因为在我看来,这里有太多的离题问题。 – LordNeckbeard 2014-09-30 17:09:21

回答

83

以下命令继续.MP3高质量(320 kbps的),和元数据从文件.FLAC被转换为的ID3v2格式,其可以被包括在.mp3文件:

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

值得注意的是,“ffmpeg”可能需要替换为“avconv”。 – shockburner 2016-04-25 22:28:46

+2

FWIW'ffmpeg' 3.2自动将元数据从FLAC中复制到ID3v2中,无需指定'-map_metadata 0 -id3v2_version 3',尽管它不会复制到ID3v1标签中。我为此使用了一个单独的工具。 – Dai 2016-11-26 23:43:52

+0

歌词仍然没有得到复制虽然 – user151496 2017-10-14 23:22:48

25

完美以上回答。我结合使用它查找到一个子树添加所有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。

8

如果你想节省一点空间,尝试hydrogenaud.io推荐:

质量很高:高保真音响,家中或安静的听,用最好的文件大小 -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)。值是编码器特定的,因此对于libmp3lame,范围是0-9,其中较低的值是较高的质量。 0-3通常会产生透明的结果,4(默认)应该接近知觉透明度,6产生“可接受”的质量。选项-qscale:a映射到独立lame命令行界面工具中的-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 
5

我测试下面的命令来转换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)) 
相关问题