我如何使用ffmpeg将.flac转换为.mp3,并保留所有元数据(即将.flac文件中的Vorbis注释转换为.mp3的ID3v2元数据)?
我如何使用ffmpeg将.flac转换为.mp3,并保留所有元数据(即将.flac文件中的Vorbis注释转换为.mp3的ID3v2元数据)?
ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
ffmpeg
3.2 版本会自动将元数据从 FLAC 复制到 ID3v2 中,无需指定 -map_metadata 0 -id3v2_version 3
参数,但不会复制到 ID3v1 标签中。我使用另外一个工具来完成该操作。 - Daifor %%f in (*.flac) do (ffmpeg -i "%%f" -ab 320k -map_metadata 0 -id3v2_version 3 "%%f.mp3")
- deadfishdir *.flac | foreach {ffmpeg -i $_.FullName -ab 320k -map_metadata 0 -id3v2_version 3 $_.FullName.Replace('flac', 'mp3')}
- Jared Beach上面的回答非常完美。我使用它和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中。非常高的质量:适用于HiFi、家庭或安静的听音乐,最佳文件大小为
-V0 (~245 kbps)
、-V1 (~225 kbps)
、-V2 (~190 kbps)
或-V3 (~175 kbps)
。建议使用这些可变比特率设置,通常会产生无损效果。这些预设之间可能存在听得出的差异,但是很少见。
来源: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
我正在测试以下命令,将infile.flac
文件转换为outfile.mp3
:
ffmpeg -i infile.flac -q:a 0 outfile.mp3
截至Ubuntu 16.04,上述命令似乎复制了(大部分?全部?)元数据。
-q:a 0
告诉ffmpeg
使用最高质量的可变比特率。
然而,ffmpeg
将我的专辑封面从jpeg
转换为png
,这增加了封面艺术品的大小。
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))
-q:a 0
和 -c:v copy
确实非常有帮助.. 谢谢。 :) - Andre Greeff(为了方便理解,此处不翻译程序代码中的关键字)
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"' \;
"$file"
这样引用变量 $file
。 - Chazy Chaz${file%.*}
。 - Evhzffmpeg
将一个文件夹中的FLAC文件转换为另一个文件夹中的MP3文件。如果有封面图片,也会被包括在内。你可以设置一个 CORES
变量来创建后台任务,以一次转换多个文件。我知道这并不是被要求的,但考虑到这样做的一个原因(至少是我想要做的)是为了将音乐导入到不支持FLAC格式的苹果iTunes中。在这种情况下,将FLAC转换为苹果自己的无损格式m4a更有意义。我使用了以下命令来转换当前文件夹中的所有文件,同时保留类似的文件大小。
find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;
ffmpeg
命令行使用问题。[so]只用于涉及编程的问题。此外,FLAC官方仅支持Vorbis注释格式(http://xiph.org/flac/format.html#format_overview),因此我假设您希望转换为ID3v2而不是“保留”。 - llogan