Перекодирование аудиокниг

Здесь собрал несколько полезных скриптов для работы с mp3-файлами

Перевод имени файла в транслит

#!/bin/bash
# totranslit.sh
# Из русского в транслит
name="$1"
newname=`echo ${name} | tr "абвгдезийклмнопрстуфхцьыАБВГДЕЗИЙКЛМНОПРСТУФХЦЬЫ" "abvgdezijklmnoprstufhc'yABVGDEZIJKLMNOPRSTUFHC'Y" | \
    sed -e 's/ё/io/g; s/ж/zh/g; s/ч/ch/g; s/ш/sh/g; s/щ/sch/g; s/э/\`e/g; s/ю/yu/g; s/я/ya/g; s/ъ/"/g; s/Ё/Io/g; s/Ж/Zh/g; s/Ч/Ch/g; s/Ш/Sh/g; s/Щ/Sch/g; s/Э/\`Е/g; s/Ю/Yu/g; s/Я/Ya/g; s/Ъ/"/g;'`
if [ "${name}" -ne "${newname}" ]
then
        mv "${name}" "${newname}"
fi

Пережатие mp3

Есть аудиокнига в стерео-варианте с высоким битрейтом, нужен моно 32kbps.
Для этого устанавливаем lame, id3tool и id3v2. Последние два нужны для сохранения оригинальных id3-тегов - lame при пережатии их уничтожает, о чём выводит предупреждение.

#!/bin/sh

read mp3name
while [ -n "$mp3name" ]
do
        newmp3name="32kbps/"`basename "$mp3name"`
        lame -b 32 -h -m m --mp3input "$mp3name" "$newmp3name"
        echo "Set ID-tags for \"$newmp3name\""
        perl rec5.pl "$mp3name"
        if [ $? -ne 0 ]
        then
                exit
        fi
        echo "Move \"$newmp3name\" to \"$mp3name\""
        mv "$newmp3name" "$mp3name"
        echo "$mp3name" >> done-list.txt
        read mp3name
done
for i in `seq 1 3` ; do echo -en "\a" ; sleep 0.1 ; done

И здесь же нам необходима программа, которая будет корректировать ID3-теги:

#!/usr/bin/perl

$ifile = $ARGV[0];
$ifile =~ /\/([-A-Za-z0-9\x80-\xff.!)"(,_ ]+)$/;
$bname = $1;
print "Try to read data from file - call for id3v2 ($ifile => $bname)\n";
open(INFILE, "id3v2 -l \"$ifile\" |");
while(defined($_ = <INFILE>)) {
        chomp;
        if(/^Title/) { $title = substr($_, 9, 30); $title =~ s/ +$//g;
                $artist = substr($_, 49); $artist =~ s/ +$//g; }
        if(/^Album/) { $album = substr($_, 9, 30); $album =~ s/ +$//g;
                $year = substr($_, 47, 4);
                # Speech (101)
                }
        if(/^Comment/) { $comm = substr($_, 9, 30); $comm =~ s/ +$//g;; }


        if(/^TIT2/) { $title2 = substr($_, 43); }
        if(/^TPE1/) { $artist2 = substr($_, 37); }
        if(/^TALB/) { $album2 = substr($_, 31); }
        if(/^TYER/) { $year2 = substr($_, 13); }
        #if(/^TCON/) { $_ =~ /\(([0-9]+)\)$/; $genre2 = $1; }
        if(/^TCON/) { $genre2 = substr($_, 21, 10); }
        if(/^TCOP/) { $cpr = substr($_, 26); }
        if(/^WXXX/) { $wl = substr($_, 34); }
        #if(/^COMM/) { $comm2 = substr($_, 26); }
        if(/^COMM/) { $comm2 = substr($_, 26); }
}
close(INFILE);

print "Try to set data - call for id3v2 (32kbps/$bname)\n";
$cmd1 = "/usr/bin/id3v2";
@args1 = ("--TIT2", $title2, "--TPE1", $artist2,
              "--TALB", $album2, "--TYER", $year2,
                  "--TCON", $genre2, "--TCOP", $cpr,
                  "--WXXX", "[$wl]", "--COMM", ":$comm2:eng",
                  "32kbps/$bname");
system($cmd1, @args1) == 0
        or die "system $cmd1 @args1 failed: $?";

print "Try to set data - call for id3tool (32kbps/$bname)\n";
$cmd2 = "/usr/bin/id3tool";
@args2 = ("--set-artist", $artist, "--set-album", $album,
                  "--set-title", $title, "--set-year", $year,
                  "--set-genre", "101", "--set-note", $comm,
                  "32kbps/$bname");
system($cmd2, @args2) == 0
        or die "system $cmd2 @args2 failed: $?";
( categories: )