3 个版本
0.4.2 | 2022年10月1日 |
---|---|
0.4.1 | 2022年6月5日 |
0.4.0 | 2022年3月22日 |
#379 in 多媒体
10MB
192 行
id3-image-rs
该项目是 id3_image 库的分支,具有扩展API和更新的依赖关系。
对于这项工作,99.9%的功劳应该归功于 此库的初始作者。
此工具封装了 rust-id3 库,以提供一种简单的方法来操作MP3文件中嵌入的封面图像。嵌入的图像通常会被音乐播放器和缩略图生成器识别。
该项目是为个人使用而制作的,因此它可能做出了不是所有情况都理想的假设。如果它不适合您,请打开 GitHub 问题。
它包含三个可执行文件
id3-image-embed
id3-image-extract
id3-image-remove
以下是它们的用法总结。您也可以通过执行 --help
获取更多信息。
嵌入
要将图像嵌入MP3文件,请使用 id3-image-embed
id3-image-embed <music-file.mp3> [image-file.jpg]
图像不一定是JPEG,任何 image 库接受的格式都可以工作。然而,它将被嵌入为JPEG,原因仅仅是似乎是一个合理的默认选择。
ID3标签将以ID3v2.3格式存储,并在音乐文件中原地写入。
图像文件路径是可选的——如果省略,程序将寻找具有相同名称但扩展名为"jpg"的图像。这有点具体,但与默认提取文件名相符,使其易于提取→编辑→嵌入。
提取
要从MP3中提取嵌入的图像文件,请使用 id3-image-extract
id3-image-extract <music-file.mp3> [image-file.jpg]
图像文件路径是可选的——如果省略,则图像将以与音乐文件相同的名称命名,并带有jpg
扩展名。如果已存在同名图像文件,它将被静默覆盖。如果歌曲文件没有嵌入图像,则会显示错误消息。
您可以通过添加-v
或--verbose
标志将图像文件名输出到stdout,以便于脚本使用。
移除
使用id3-image-remove
从mp3文件中移除所有嵌入的图像
id3-image-remove <music-file.mp3>
如果您不喜欢封面艺术并希望“清理”您的mp3文件,这可能很有用。在删除之前,工具会要求确认,以防误操作。如果您正在脚本中使用它,可以添加--no-confirm
以避免此操作。
附加脚本
您可以使用id3-image-extract
构建一个“预览”工具,快速查看图像的封面艺术。您只需提供一个临时文件名以提取到即可。
#! /bin/sh
set -e
if [ $# -lt 1 ]; then
echo "USAGE: id3-image-preview <music-file.mp3>"
exit 1
fi
music_file=$1
# Create an auto-removed file when script exits
image_file=$(mktemp --suffix='.jpg')
exec 3>"$image_file"
rm "$image_file"
id3-image-extract "$music_file" "$image_file"
// Would probably work with `open` on a mac, but hasn't been tested:
xdg-open "$image_file"
您还可以创建一个脚本,使用GUI文件选择器选择要嵌入的图像。您需要使用zenity
来完成此操作。
#! /bin/sh
set -e
if [ $# -lt 1 ]; then
echo "USAGE: id3-image-gui-embed <music-file.mp3>"
exit 1
fi
music_file=$1
# Pick the image file with a file chooser
image_file=$(zenity --file-selection --filename="$(pwd)/" --title="Select Cover Art")
id3-image-embed "$music_file" "$image_file"
这个特定的弹出窗口不会仅过滤图像,因为我无法弄清楚如何在zenity中创建一个通用的“图像”过滤器。您可以通过向zenity添加--file-filter='*.jpg'
来显示仅JPEG文件。
当与GUI文件管理器结合使用时,这些脚本特别方便。我首选的一个是Thunar,它允许“自定义操作”,这两个可以插入。
测试中使用的音乐
Christian Bakker的Elevator Music Attempt 1: http://www.jamendo.com/en/list/a98147/echoes-from-the-past
可能未来的工作
- 在提取时不静默覆盖图像
- 允许不同的输出格式
- 允许不同的ID3版本
- 允许嵌入/提取多个图像(目前,只能提取第一个)
- 用更简单的CLI解决方案替换structopt + clap —— 对于一个简单的项目来说,有很多依赖关系
依赖关系
~16MB
~117K SLoC