Linux 命令行工具根据 ID3 标签信息批量重命名 MP3 文件,如果没有 ID3 信息则随机命名

Linux 命令行工具根据 ID3 标签信息批量重命名 MP3 文件,如果没有 ID3 信息则随机命名

我有一堆恢复的 mp3 文件,这些文件的文件名都是系统生成的。我想使用文件中嵌入的 ID3 标签信息将每个文件重命名为人类可读的名称。

我尝试过 debian apt repo 中的“mp3rename”,但它无法自动处理没有 id3 标记的 mp3 文件。有没有可行的替代方案?

答案1

id3v2一些脚本应该可以实现这一点。我将查看手册页并尝试编写一个示例,但id3v2 -l file会列出该文件中的标签。从那里,您可以通过 awk/sed/whatever 管道来获得重命名文件的命令。

答案2

您可以尝试使用以下kid3-cli工具命令儿童3

例子 :

kid3-cli -c 'fromtag "%{track}__%{album}__%{title}" 1' *.mp3

答案3

更具体地说,请查看exiftool标题为重命名示例

它不仅限于 MP3 文件。

答案4

如果你喜欢 Perl,获取标签的简单方法是这样的:


#!/usr/bin/env perl
use File::Find;
use MP3::Tag;
use Cwd;

$dir = ".";
open(OUTFILE,">tags.txt") || die "Can't open: $!\n";
print OUTFILE 'Output for "'.getcwd().'"'." and subdirectories\n";
print OUTFILE "Path;Artist;Title;Track;Album;Year;Genre;File Size\n";

find(\&edits, $dir);
close(OUTFILE);
print "Done\n";

sub edits() 
{
$fn=$_;
$not_shown=1;
if ( -f and $fn=~m/.+\.mp3$/ig)
{
$mp3 = MP3::Tag->new($fn);
($title, $track, $artist, $album, $comment, $year, $genre) = $mp3->autoinfo();
$fs= -s $fn;
print OUTFILE "$File::Find::name\\$fn;$artist;$title;$track;$album;$year;$genre;$fs\n";
}
if ( -f and $fn=~m/.+\.wav$|\.m4a$/ig)
{
$fs= -s $fn;
print OUTFILE "$File::Find::name\\$fn;;;;;;;$fs\n";
}
}

从那里开始,只需编写一点脚本,您就能得到您想要的东西。

相关内容