Инструмент командной строки Linux для пакетного переименования файлов MP3 на основе информации тега ID3 или присвоения произвольного имени, если информация ID3 отсутствует
У меня есть куча восстановленных mp3-файлов, которые имеют сгенерированные системой имена файлов. Я хочу использовать любую встроенную информацию тегов ID3 в файлах, чтобы переименовать каждый файл в нечто, удобное для чтения.
Я попробовал 'mp3rename' из репозитория Debian apt, но он не обрабатывает mp3-файлы без автоматической пометки id3. Есть ли работоспособная альтернатива?
5 ответов
id3v2
и некоторые сценарии должны сделать это возможным. Я посмотрю справочные страницы и попытаюсь написать пример, но id3v2 -l file
будет перечислять теги из этого файла. Оттуда вы можете передать через awk/sed/what, чтобы получить команду для переименования файла.
Вы можете попробовать kid3-cli
инструментальная команда от Kid3
Пример:
kid3-cli -c 'fromtag "%{track}__%{album}__%{title}" 1' *.mp3
Посмотри на exiftool
более конкретно, раздел руководства, озаглавленный ПРИМЕРЫ ПЕРЕИМЕНОВАНИЯ.
Это не ограничено только файлами MP3.
Если вам нравится 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";
}
}
Оттуда немного сценариев, и вы получаете то, что хотите.
Это не командная строка, но я всегда использовал EasyTag. Это позволяет мне добавлять обложки и обложки CD к файлам.