MP3 zu OGG - aber richtig

Z

Zico

Lebende Foren Legende
Hi Leute

Langsam ist es mal an der Zeit, das MP3 Format hinter sich zu lassen und auf OGG umzusteigen.
Hab ich mir zumindest mal so gedacht. 5000MP3s? Kein Thema, dafür gibts ja Shellscripte.
Nun ist aber die Frage was stell ich mit den KBpS an?
Ich habe beispielsweise ein Verzeichnis mit 50 MP3s a 192Kbps, 27 mit 128Kbps, 66 mit 160Kbps und so weiter. Nun wäre es ja unsinnig, jede Datei mit, sagen wir, 192Kbps zu codieren. Das sollte ja schon irgendwie passen, da ich keinen Platz verschwenden möchte. Gibt es da ein Programm, welche OGG Dateien anhand des vorhandenen Originalstückes erstellt? Gibt es Alternativen? Oder muss ich alles von Hand machen?


Danke im Vorraus
 
Ich habe HIER was interessantes gefunden. Habe es aber noch nicht ausprobiert.
 
amarokscripte

hi

mit transcode, lame amarok und dem entsprechenden script sollte das einfach zu machen sein.

unter http://www.kde-apps.org findest du ein entsprechendes script für den amarok player.
 
Zuletzt bearbeitet:
Zico, wenn du es zufällig umscriptest, sodass es in Unterverzeichnisse springen kann, dann poste dein Ergebnis bitte. Ich möchte es auch verwenden. ;)
 
Euch ist schon bewußt, daß die recodierung ziemlich arg die Qualität nach unten schraubt? ;-)
 
Keinesfalls hörbar.
Ich sitz hier seit Stunden und schalt zwischen MP3 und OGG Detaien hin und her.
Mag sein dass da Qualität zurückgedreht wird, aber das hörste vllt wenn dein NAme John Williams ist.

Wie auch immer, das Script hat IMHO nen kleinen Macken: es übernimmt die Bitraten der MP3s 1:1 und das auch noch VBR, was am Ende dann ggf mehr Speicherplatz ausspuckt als es die Sache Wert ist.
Daher hab ich das Teil ein wenig (wenn auch unsauber) abgeändert und über den Qualitätsschalter im oggenc gelöst:
Bei MP3 Raten bis 192 Kbps nutzt OGG nun -q 3 und ab 192 -q 5

Code:
help ()
{

ext=`echo "$file" | sed s/.*\.[Mm][Pp]3$/mp3/`

if [[ "$ext" == mp3 ]] ; then

	echo ""

	else
		
		echo ""
		echo "mp3ogg v 2.0.6 mp3 to ogg conversion script"
		echo "mp3ogg can be used in two ways, to convert one file and to convert"
		echo "whole directories of files at once."
		echo "Usage: mp3ogg [ file1.mp3 file2.mp3 \"filename with spaces.mp3\" ... ]"
		echo "Usage: mp3ogg -s -d"
		echo "Invoking mp3ogg with the -s parameter will supress error messages"
		echo "in screen output.  The -d parameter will delete all original versions"
		echo "of mp3 files without prompting first."
		echo ""
		exit 0
fi
}

### DELETION QUERY FUNCTION

delete_query ()
{
echo ""
echo "mp3ogg v 2.0.6 mp3 to ogg conversion script"

if [ "$p1" = "-d" ] || [ "$p2" = "-d" ] ; then
	mp3del=y
else
	echo -n "Delete original mp3 files after ogg conversion? [y/N]:"
	read mp3del
	mp3del=${mp3del:0:1}
	mp3del=`echo "$mp3del" | sed s/\\Y/y/`
fi
}

### DEFAULT BITRATE IF NO MP3INFO FUNCTION

detect_mp3info ()
{
if [ "$(type -t mp3info)" = file ] ; then
	echo ""
	
	else
		echo ""
		echo -n "Convert files at what bitrate? [32-192, default = 128]:"
		read bitrate
		bitrate=${bitrate:0:3}

		if [[ "$bitrate" = "" ]] ; then

			bitrate=128
			echo "Conversion bitrate set to 128"
			echo ""
		
		else

			if [[ "$bitrate" < 32 ]] || [[ "$bitrate" > 192 ]] ; then
			
			echo "Bitrate out of range. Setting to 128"
			echo ""
			bitrate=128
		
			fi

		fi

fi
}

set_qual ()
{
		if [[ "$bitrate" = "" ]] || [[ "$bitrate" < 192 ]]; then

			qual=3
			echo "Conversion quality set to 3"
			echo ""
		
		else

			echo "Conversion quality set to 5"
			echo ""
			qual=5

		fi
}

### SUPRESSION PARAMETER CHECKING FUNCTION

detect_supress()
{
if [ "$p1" = "-s" ] || [ "$p2" = "-s" ] ; then

	supress="y"

fi
}

### MP3 TO OGG CONVERSION FUNCTION

convert ()
{
# MAKE SURE FILE IS AN MP3
	ext=`echo "$file" | sed s/.*\.[Mm][Pp]3$/mp3/`

	if [[ "$ext" == mp3 ]] ; then

# FILE IS AN MP3, NOW TEST IF MP3INFO EXISTS

		if [ "$(type -t mp3info)" = file ] ; then

# MP3INFO EXISTS... GET BITRATE & ID3 INFO
			if [ "$supress" = "y" ] ; then
				bitrate=`mp3info -rm -p %r "$file" 2> /dev/null`
				title=`mp3info -p %t "$file" 2> /dev/null`
				artist=`mp3info -p %a "$file" 2> /dev/null`
				album=`mp3info -p %l "$file" 2> /dev/null`
				genre=`mp3info -p %g "$file" 2> /dev/null`
			else
				bitrate=`mp3info -rm -p %r "$file"`
				title=`mp3info -p %t "$file"`
				artist=`mp3info -p %a "$file"`
				album=`mp3info -p %l "$file"`
				genre=`mp3info -p %g "$file"`
			fi
# CONVERT MP3 TO OGG FORMAT WITH ID3 INFO

			set_qual
			if [ "$supress" = "y" ] ; then
				wavfile=`echo "$file" | sed s/\\.[Mm][Pp]3/.wav/ 2> /dev/null`
			else
				wavfile=`echo "$file" | sed s/\\.[Mm][Pp]3/.wav/`
			fi
			echo ""
			echo "** Converting \""$file"\" at quality level" $qual 
			echo ""
			mpg123 -q -w "$wavfile" "$file"
			if [ "$supress" = "y" ] ; then
				oggfile=`echo "$wavfile" | sed s/\\.wav/.ogg/ 2> /dev/null`
			else
				oggfile=`echo "$wavfile" | sed s/\\.wav/.ogg/`
			fi
			if [ "$supress" = "y" ] ; then
				oggenc "$wavfile" -o "$oggfile" -q $qual -t "$title" -a "$artist" -l "$album" -G "$genre" 2> /dev/null
			else
				oggenc "$wavfile" -o "$oggfile" -q $qual -t "$title" -a "$artist" -l "$album" -G "$genre"
			fi

		else

# MP3INFO NOT INSTALLED - CONVERT MP3 TO OGG FORMAT WITHOUT ID3 INFO

			if [ "$supress" = "y" ] ; then
				wavfile=`echo "$file" | sed s/\\.[Mm][Pp]3/.wav/ 2> /dev/null`
			else
				wavfile=`echo "$file" | sed s/\\.[Mm][Pp]3/.wav/`
			fi
			echo ""
			echo "** Converting \""$file"\" at bitrate" $bitrate
			echo ""
			mpg123 -q -w "$wavfile" "$file"
			if [ "$supress" = "y" ] ; then
				oggfile=`echo "$wavfile" | sed s/\\.wav/.ogg/ 2> /dev/null`
			else
				oggfile=`echo "$wavfile" | sed s/\\.wav/.ogg/`		
			fi	
			if [ "$supress" = "y" ] ; then	
				oggenc "$wavfile" -o "$oggfile" -q $qual 2> /dev/null
			else
				oggenc "$wavfile" -o "$oggfile" -q $qual
			fi

		fi

# CLEAN UP TEMP FILES AND OPTIONALLY DELETE ORIGINAL MP3

				if [ "$mp3del" = "y" ] ; then
					rm -f "$file" "$wavfile"
				else
					rm -f "$wavfile"					
				fi
		fi
}

##### END FUNCTIONS

##### BEGIN MAIN SCRIPT

# TEST FOR COMMAND LINE PARAMETERS

if [ "$1" ] && [ "$1" != "-d" ] && [ "$1" != "-s" ] ; then

	for file in "$@" ; do
		help
	done

	delete_query
	detect_mp3info
	
	for file in "$@" ; do
		convert
	done
	exit 0
fi

# NO COMMAND LINE PARAMETERS (BESIDES "-s" or "-d")
# CONVERT ENTIRE DIRECTORY

p1=$1
p2=$2

delete_query
detect_mp3info
detect_supress

	for file in * ; do
		convert
	done
exit 0

@FalseCAM:
Das rekursive abspeichern habe ich lediglich nur mit ein paar Spielereien im Editor gelöst --> Verzeichnisse eingelesen, "cd" vorgesetzt, mp3ogg -d dahintergesetzt und auch mit sh ausgeführt.
Vllt bau ich das noch so ähnlich in das Script direkt mit ein. mal sehn
 
Zuletzt bearbeitet:
Hallo

Ich habe das gerade mal online angesehen, deshalb ungetestet folgenden Vorschlag:
Ändere am Scriptende mal das:
detect_supress

for file in * ; do
convert
done
in
detect_supress

for file in $(find ./ -type f -printf "%p\n") ; do
convert
done

Dann sollte es in alle Unterverz. steigen.
Wie gesagt, ungetestet.

Gruß Wolfgang
 
Danke :)

Das Script hab ich ja auch nur so gezogen. Da geht bestimmt noch viel dran zu machen. Ich werd mir das mal genauer ansehn, wenn ich Lust und Zeit hab.
 
Zuletzt bearbeitet:
@Wolfgang es funktioniert nicht. Ich habe mal deinen code mit Zicos verschmolzen und er gibt mir folgende Fehler aus:
Code:
Error opening MP3: minor.mp3: No such file or directory
Error opening MP3: minor.mp3: No such file or directory
Error opening MP3: minor.mp3: No such file or directory
Error opening MP3: minor.mp3: No such file or directory
Error opening MP3: minor.mp3: No such file or directory
Conversion quality set to 3


** Converting "minor.mp3" at quality level 3

minor.mp3: No such file or directory
ERROR: Cannot open input file "minor.wav": No such file or directory
 
In dem HowTo wird ja erwähnt, das script nach /usr/bin oder ähnlichem zu kopieren. Könnte natürlich sein, dass Wolfgangs Änderung in dem Moment nicht funktioniert.
 
Hallo
Jo, mag sein, hab es halt weder installiert noch getestet.

Allerdings dürfte der Installpath keine Rolle spielen, da ja dort sicher keine mp3 zu finden sind.
Dann musst du halt find den absoluten Pfad mitgeben, oder vorher in das Verzeichnis wechseln.

Gruß Wolfgang
 
Zurück
Oben