LINUX.ORG.RU

Как разбить flac на треки

 ,


0

1

Всем привет! Дано: есть альбом в формате flac + cue файл, flac одним файлом. Нужно готовое решение под linux, чтобы разбить большой файл на маленькие, прописав в тэги инфу из cue файла. Кто-нибудь знает такое?

UPD: для потомков, пришедших из поисковика - Flacon то, что нужно.

★★★

Последнее исправление: hobbit (всего исправлений: 3)

На задворках винта нашлось такое. Раньше работало, сейчас не проверял, так как нет под рукой ни одного flac'а, а качать лень. Попробуй, если что допили под себя. На вид всё просто.

cuebreakpoints ${CUEFILE} | shnsplit -o flac ${FLACFILE}
#! /bin/sh

# cuetag.sh - tag files based on cue/toc file information
# uses cueprint output
# usage: cuetag.sh <cuefile|tocfile> [file]...

CUEPRINT=cueprint
cue_file=""

usage()
{
	echo "usage: cuetag.sh <cuefile|tocfile> [file]..."
}

# Vorbis Comments
# for FLAC and Ogg Vorbis files
vorbis()
{
	# FLAC tagging
	# --remove-vc-all overwrites existing comments
	METAFLAC="metaflac --remove-vc-all --import-vc-from=-"

	# Ogg Vorbis tagging
	# -w overwrites existing comments
	# -a appends to existing comments
	VORBISCOMMENT="vorbiscomment -w -c -"

	case "$2" in
	*.[Ff][Ll][Aa][Cc])
		VORBISTAG=$METAFLAC
		;;
	*.[Oo][Gg][Gg])
		VORBISTAG=$VORBISCOMMENT
		;;
	esac

	# space seperated list of recomended stardard field names
	# see http://www.xiph.org/ogg/vorbis/doc/v-comment.html
	# TRACKTOTAL is not in the Xiph recomendation, but is in common use
	
	fields='TITLE VERSION ALBUM TRACKNUMBER TRACKTOTAL ARTIST PERFORMER COPYRIGHT LICENSE ORGANIZATION DESCRIPTION GENRE DATE LOCATION CONTACT ISRC'

	# fields' corresponding cueprint conversion characters
	# seperate alternates with a space

	TITLE='%t'
	VERSION=''
	ALBUM='%T'
	TRACKNUMBER='%n'
	TRACKTOTAL='%N'
	ARTIST='%c %p'
	PERFORMER='%p'
	COPYRIGHT=''
	LICENSE=''
	ORGANIZATION=''
	DESCRIPTION='%m'
	GENRE='%g'
	DATE=''
	LOCATION=''
	CONTACT=''
	ISRC='%i %u'

	(for field in $fields; do
		value=""
		for conv in `eval echo \\$$field`; do
			value=`$CUEPRINT -n $1 -t "$conv\n" $cue_file`

			if [ -n "$value" ]; then
				echo "$field=$value"
				break
			fi
		done
	done) | $VORBISTAG "$2"
}

id3()
{
	MP3INFO=mp3info

	# space seperated list of ID3 v1.1 tags
	# see http://id3lib.sourceforge.net/id3/idev1.html

	fields="TITLE ALBUM ARTIST YEAR COMMENT GENRE TRACKNUMBER"

	# fields' corresponding cueprint conversion characters
	# seperate alternates with a space

	TITLE='%t'
	ALBUM='%T'
	ARTIST='%p'
	YEAR=''
	COMMENT='%c'
	GENRE='%g'
	TRACKNUMBER='%n'

	for field in $fields; do
		value=""
		for conv in `eval echo \\$$field`; do
			value=`$CUEPRINT -n $1 -t "$conv\n" $cue_file`

			if [ -n "$value" ]; then
				break
			fi
		done

		if [ -n "$value" ]; then
			case $field in
			TITLE)
				$MP3INFO -t "$value" "$2"
				;;
			ALBUM)
				$MP3INFO -l "$value" "$2"
				;;
			ARTIST)
				$MP3INFO -a "$value" "$2"
				;;
			YEAR)
				$MP3INFO -y "$value" "$2"
				;;
			COMMENT)
				$MP3INFO -c "$value" "$2"
				;;
			GENRE)
				$MP3INFO -g "$value" "$2"
				;;
			TRACKNUMBER)
				$MP3INFO -n "$value" "$2"
				;;
			esac
		fi
	done
}

main()
{
	if [ $# -lt 1 ]; then
		usage
		exit
	fi

	cue_file=$1
	shift

	ntrack=`cueprint -d '%N' $cue_file`
	trackno=1

	if [ $# -ne $ntrack ]; then
		echo "warning: number of files does not match number of tracks"
	fi

	for file in $@; do
		case $file in
		*.[Ff][Ll][Aa][Cc])
			vorbis $trackno "$file"
			;;
		*.[Oo][Gg][Gg])
			vorbis $trackno "$file"
			;;
		*.[Mm][Pp]3)
			id3 $trackno "$file"
			;;
		*)
			echo "$file: uknown file type"
			;;
		esac
		trackno=$(($trackno + 1))
	done
}

main "$@"
shell-script ★★★★★
()

В мертвое мясо загрузи, потом конвертни. Ещё и ужмёшь дополнительно если тот кто исходник делал времени пожалел

DumLemming ★★★
()
Ответ на: комментарий от Taetricus

Спасибо, именно то, что искал!

Dog ★★★
() автор топика
Ответ на: комментарий от shell-script

Спасибо, сохранил на всякий случай. А конвертнул Flacon’ом в итоге.

Dog ★★★
() автор топика
Ответ на: комментарий от DumLemming

Deadbeef ты имеешь ввиду? Так это корова или говядина тогда, а не просто мясо =) Не знал, что он так умеет, давно не пользовался.

Dog ★★★
() автор топика
Последнее исправление: Dog (всего исправлений: 1)
Ответ на: комментарий от kostik87

Понятно, что можно разобраться и написать скрипт, но мне лень, поэтому и искал готовое решение :)

Dog ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.