![从命令行以批处理模式将专辑封面添加到 mp3/ogg 文件?](https://linux22.com/image/45487/%E4%BB%8E%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%BB%A5%E6%89%B9%E5%A4%84%E7%90%86%E6%A8%A1%E5%BC%8F%E5%B0%86%E4%B8%93%E8%BE%91%E5%B0%81%E9%9D%A2%E6%B7%BB%E5%8A%A0%E5%88%B0%20mp3%2Fogg%20%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我正在 Linux 中寻找一个软件,它将以批处理模式将专辑封面/封面添加到每个选定的文件中。专辑封面是存储在我的电脑中的 jpg/png 格式。如果能从网上导入那就太好了。
目前我已经尝试了 Rhythmbox 和 Banshee。我也尝试过lame
和easytag
,但似乎它们不支持批处理模式。lame
是不是添加属性,但覆盖。 (我知道蹩脚的是仅有的到目前为止已经使用过命令行 s/wi)。
所以,基本上我正在寻找:
<some magic s/w> --picture=<my chosen picture> Music/Artist/*.mp3
这会将图片永久添加到文件的元数据中。
你能给我推荐一些这样的软件吗?
答案1
瘸
您可以lame
使用一些脚本来完成此操作:
$ lame --ti /path/to/file.jpg audio.mp3
如果文件的命名类似于这样,您可以创建一个 shell 脚本来执行您想要的操作:
for i in file1.mp3 file2.mp3 file3.mp3; do
albart=$(echo $i | sed 's/.mp3/.jpg/')
lame --ti /path/to/$albart $i
done
sed
您可以使上面的内容稍微更紧凑,并通过使用bash
删除匹配的后缀来消除需要:
...
albart="${i%.mp3}.jpg"
...
皮卡德/音乐大脑
如果您想大规模执行此操作,我建议使用 Picard,它是使用 MusicBrainz 数据库的前端工具。 Picard 有一个名为“封面艺术下载器”的插件,它可以对您的批量收藏执行此操作。
然而,上面的内容似乎不是命令行驱动的。
甜菜
另一种选择是使用beets
.这可以从命令行驱动,并利用 MusicBrainz 数据库来获取专辑封面。
您可以使用以下方式获取专辑封面FetchArt 插件或使用嵌入它嵌入艺术插件。
其他选择?
另请查看之前提出的 U&L 问答,标题为:哪款适用于 Linux 的 mp3 标记工具?。此线程中列出了几种替代工具。
答案2
一种解决方案是使用 ffmpeg:
ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3
您可以将其放入 for 循环中以执行目录中的每个 MP3:
for f in ./*.mp3; do ffmpeg -i "$f" -i cover.jpg -map_metadata 0 -map 0 -map 1 out-"${f#./}"; done
这将创建一个单独的输出文件(因此,如果您有一个名为 的文件foo.mp3
,则最终将得到foo.mp3
和out-foo.mp3
);这是因为 ffmpeg 无法覆盖其输入。您可以使用以下方法修复此问题:
for f in ./*.mp3; do \
ffmpeg -i "$f" -i cover.jpg -map_metadata 0 -map 0 -map 1 out-"${f#./}" \
&& mv out-"${f#./}" "$f"; done
使用 ffmpeg 解决这个问题有点像使用巡航导弹来破解坚果。更专业的元数据操作工具肯定能够通过更干净、更短的命令来完成此操作。
答案3
对于 MP3:
eyeD3 --add-image="cover.jpg":FRONT_COVER "file.mp3"
对于 FLAC:
metaflac --import-picture-from="cover.jpg" "file.flac"
OGG/Vorbis 似乎是更复杂。