Skript pro práci id3 tagy - taguj (mp3)

Obrázek uživatele HFechs

Narazil jsem na dobrý blog o skriptech pro práci s mp3 na abíčku http://www.abclinuxu.cz/blog/FluxBlog/2008/12/jednoduche-skripty-pro-upr.... Přímo skript pro práci s id3 tagy tam nenajdete, nicméně skript pro snižování bitrate úpravu id3 tagy potřeboval a byla tam pěkně užita ulitka id3v2. Tuto ulitku samozřejmě potřebuje i můj skript.

Něco takového jsem už dlouho potřeboval a dneska jsem se konenečně dokopal to napast (last.fm si furt stěžuje, jak mám všechno prasácky otagováne a je to pravda ;-)). Nějakou masivní gui aplikaci jsem instalovat nechtěl a je ve hvězdách, jestli by splnila přesně to co chci...

Konečně k věci, program taguj vytáhne při parametru --generate ze všech mp3 v aktuálním adresáři id3 tagy do souboru out.tag. Ten nyní můžete jakkoliv upravit (třeba použít program iconv, přepsat tagy bez diakritiky na diagritiku, tagy doplnit). A nakonec se spustí taguj --sign, který tagy ze souboru zpět uloží do mp3jek.

PS: Je to prasácké, bash neovládám a sem rád že jsem to nějak zkutil...

PPS: id3v2 možná umí i jiné formáty než mp3, nicméně jsem to nezkoušel a skript by ve foru potřeboval úpravu.

Skript je zde: http://hfechs.cz/taguj, případně nakopírovaný sem. Good luck.

UPDATE: Přidal sem podporu i pro editaci pořadí tracku
UPDATE2: Podpora pro editaci tracku byla rozbitá, nyní je to již OK. Doporučuji updatovat.

#!/bin/bash
# Author: HFechs
#
#
# Dekuji pushkinovi, jeho skripty mi byly vzorem
# ( http://www.abclinuxu.cz/blog/FluxBlog/2008/12/jednoduche-skripty-pro-upr... )


if [ "$1" == "--generate" ]; then
	num=0;
	
	if [ -e out.tag ]; then
		echo "File out.tag exist!"
		exit
	fi
	
	for file in *.[Mm][Pp][3]
	do
		num=$((num+1))
		if [ "`id3v2 -l \"$file\" | grep id3v2`" == "" ]; then
			title=`id3v2 -l "$file" | grep Title | sed 's/Title  : //' | sed 's/  [[:print:]]*//'`
			artist=`id3v2 -l "$file" | grep Title | sed 's/[[:print:]]*Artist: //' | sed 's/  [[:print:]]*//'`
			album=`id3v2 -l "$file" | grep Album | sed 's/Album  : //' | sed 's/  [[:print:]]*//'`
			year=`id3v2 -l "$file" | grep Album | sed 's/[[:print:]]*Year: //' | sed 's/,[[:print:]]*//'`
			genre=`id3v2 -l "$file" | grep Album | sed 's/[[:print:]]*(//' | sed 's/)//'`
			track=`id3v2 -l "$file" | grep Comment | sed 's/[[:print:]]*Track: //' | sed 's/,[[:print:]]*//'`
		else
			title=`id3v2 -l "$file" | grep TIT2 | sed 's/[[:print:]]*: //'`
			artist=`id3v2 -l "$file" | grep TPE1 | sed 's/[[:print:]]*: //'`
			album=`id3v2 -l "$file" | grep TALB | sed 's/[[:print:]]*: //'`
			year=`id3v2 -l "$file" | grep TYER | sed 's/[[:print:]]*: //'`
			genre=`id3v2 -l "$file" | grep TCON | sed 's/[[:print:]]*(//' | sed 's/)//'`
			track=`id3v2 -l "$file" | grep TRCK | sed 's/[[:print:]]*: //'`
		fi
		
		echo "title[${num}]=\"$title\"" >> out.tag
		echo "artist[${num}]=\"$artist\"" >> out.tag
		echo "album[${num}]=\"$album\"" >> out.tag
		echo "year[${num}]=\"$year\"" >> out.tag
		echo "genre[${num}]=\"$genre\"" >> out.tag
		echo "track[${num}]=\"$track\"" >> out.tag
		echo "" >> out.tag
	done

elif [ "$1" == "--sign" ]; then
	
	if [ ! -e out.tag ]; then
		echo "File out.tag not found!"
		exit
	fi
	
	source out.tag
	
	for file in *.[Mm][Pp][3]
	do
		num=$((num+1))
		id3v2 -t "${title[$num]}" -a "${artist[$num]}" -A "${album[$num]}" -y "${year[${num}]}" -g "${genre[$num]}" "$file" -T "${track[$num]}"
	done
else
	echo "Usage: taguj [--generate | --sign]"
	echo ""
	echo "  --generate		Create file out.tag in actual directory with tags"
	echo "  			from all mp3 files in actual directory"
	echo "  --sign		Set tags from out.tag in actual directory to all"
	echo "  			mp3 in actual directory"
fi

A ano, sem krutor! Fuck off...