我想删除嵌入在一堆 MP3(数千个)中的专辑封面,但找不到命令行方法来执行此操作。我可以通过添加艺术lame
,我可以添加或删除几乎任何其他标签,id3tag
但我找不到一种方法来执行以下操作:
for file in **/*.mp3 do <remove image command> $file; done
有人知道我可能会投入什么吗<remove image command>
?
答案1
似乎没有一个好的解决方案,我想出的最好的解决方案是使用 ffmpeg 快速创建一个新文件。 @awesome14 提供的命令在我的系统上对我不起作用(大部分情况下是有效的,但它产生了许多错误,导致歌曲未被复制)。这是我想出的命令。
for song in **/*.mp3
do NAME=$(echo ${song%/*} | sed -e 's|[/ ]|-|g’)
ffmpeg -y -i $song -vn -c copy /path/NOART/"$NAME-"${song##*/};
done
这适用于 bash5 或 zsh shell。
**/*.mp3
当前目录下每个目录中与 .mp3 匹配的每个文件echo ${song%/*} | sed -e 's|[/ ]|-|g’
将路径部分(不在文件名中)中的所有斜杠和空格转换为破折号—vn -c copy
请勿复制视频(视频号),否则复制未修改的文件/path/NOART/"$NAME-"${song##*/}
保存到路径,文件名设置为 NAME 变量和 $song 的基本名称。输出文件名将类似于“10Cc-Look-Hear-Dressed To Kill.mp3”。
这样做的另一个优点是不会删除歌曲中的所有元数据,仅删除“视频”,在本例中是专辑封面艺术。
答案2
答案3
您可以安装kid-cli
,它可用于从 CLI 更改元数据标签。在看到这个问题之前,我从未用它来删除专辑艺术,但我想我已经弄清楚了如何:
for file in **/*.mp3 do (sleep 2; printf %s\\n 'set "Picture:" ""' save exit) | kid3-cli $file; done
尽管它是一个 cli 程序,但kid3-cli 旨在交互式使用。因此,命令应该以交互方式输入。另外,由于某种原因,除非有延迟,否则上述命令不起作用。如果您有一大堆文件需要处理,也许您可以通过在多个文件上并行运行该命令来缓解这种情况。
for file in **/*.mp3 do (:; (sleep 2; printf %s\\n 'set "Picture:" ""' save exit) | kid3-cli $file)&; done; wait
或者:
(sleep 2; printf %s\\n 'set "Picture:" ""' save exit; sleep 2) | kid3-cli *.mp3; done
在后一种情况下,kid3-cli 需要延迟后命令也已通过管道输入。我不知道为什么,但至少您可以一次处理所有文件。
PS:我没有任何 mp3 文件来测试这个,所以我使用了一些 ogg/vorbis 文件。由于 ogg 使用与 mp3 (id3) 不同的标记系统(vorbis 注释),因此这在两种格式上可能效果相同。然而,无论如何,这*应该*适用于 mp3。
答案4
安装孩子3
$ pacman -Ss kid3
community/kid3 3.9.1-2 [installed]
An MP3, Ogg/Vorbis and FLAC tag editor, KDE version
并运行脚本:
#!/bin/bash
for filename in ./*.mp3; do
echo $filename
kid3-cli -c 'set Picture ""' $filename
done