script um oggs nach mp3 zu wandeln

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Belgarad
Beiträge: 749
Registriert: 12.07.2002 02:00:44

script um oggs nach mp3 zu wandeln

Beitrag von Belgarad » 27.02.2004 11:30:29

ich moechte ein einfaches script schreiben, dass mir oggs nach mp3's wandeln kann.
idealerweise soll das script pruefen, ob die korrespondierende mp3 datei bereits besteht damit z.b. nach einem abruch weitergemacht werden kann.

als eingabeparameter soll entweder eine wildcard verwendet werden, oder gezielt eine datei.
zum konvertieren habe ich lame und ogg123 auserkoren.
da ogg123 scheinbar nicht nach stdout ausgeben kann, verwende ich keine pipe sondern eine datei temp.out
die titel koennen blanks beeinhalten, deshalb die ''

das folgende script funktioniert soweit. (allerdings gehen die mp3 tags verloren :-( )
#!/bin/bash
ogg123 -d wav -f temp.out 'my music track.ogg'
lame -h -b 192 temp.out 'my music track.mp3'

nun kommt meine frage: wie bekomme ich das automatisiert hin?
beispiel:
in /myoggs/ liegen 100 *.ogg dateien die ich automatisiert in 100 *.mp3 dateien konvertieren moechte.
sollten bereits 10 dateien konvertiert worden sein, soll das script die bereits konvertierten daten ignorieren und die restlichen 90 bearbeiten.
die dateinamen koennen auch im namen den '.' verwenden: beispiel: my.music.ogg


mit $1 etc. bekomme ich immer den ganzen namen, daher geht das folgende nicht:
#!/bin/bash
ogg123 -d wav -f temp.out $1
lame -h -b 192 temp.out $1
die originaldatei wuerde ueberschrieben und ausserdem wuerde nur eine datei bearbeitet.

p.s. spaeter mochte ich mp3's neu encoden koennen, z.b. von bitrate a auf bitrate b, und von vbr auf cbr.
Debian SID

Benutzeravatar
g-henna
Beiträge: 733
Registriert: 03.11.2003 14:59:56
Wohnort: Berlin

Beitrag von g-henna » 27.02.2004 15:13:52

Hi!

Code: Alles auswählen

#!/usr/bin/python

import os, sys, glob

for file in glob.glob(sys.argv[1]):
    if os.path.exists(file) and os.path.isfile(file):
       os.system('ogg123 -d wav -f temp.out "' +  file + '"')
       newfile = os.path.splitext(file)[0]+".mp3"
       # jetzt stimmt's
       os.system('lame -h -b 192 temp.out "' + newfile + '"')
$ python convert.py ~/myoggs

Bye
g-henna

PS. Ja, ich fühl mich schlecht dabei, jemandem dabei zu helfen, oggs in mp3s zu konvertieren *grin*
Zuletzt geändert von g-henna am 27.02.2004 19:16:37, insgesamt 1-mal geändert.
follow the penguin...

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 27.02.2004 17:04:57

g-henna hat geschrieben:PS. Ja, ich fühl mich schlecht dabei, jemandem dabei zu helfen, oggs in mp3s zu konvertieren *grin*
Leider muss ich solch eine Grausamkeit auch manchmal machen, es gibt nämlich in D noch keinen Vorbis-USB-Stick zu kaufen :(

BTW: Dein Programm scheint nicht ganz zu stimmen: Die Endung ".ogg" wird nicht in ".mp3" umgewandelt.
Desweiteren sollte man lame immer mit "--preset standard" aufrufen, damit ist die Datei fast so gut wie ein Vorbis file, und auch nur unwesentlich größer als ein 192kBit CBR-Mp3.
(evtl. heisst es auch nur "-preset" oder "standart", das kann ich mir nie merken)

Auf jeden Fall hier der Code in bash (normale shell geht nicht, wegen der ${a/b/c}-Anweisung!

Code: Alles auswählen

#!/bin/bash
for file in $1; do 
  if [ -e ${file/.ogg/.mp3} ]; then
    ogg123 -d wav -f tmp.out $file
    lame   --preset standard tmp.out ${file/.ogg/.mp3}
  fi
done
PS: Können neue LAME-Versionen nicht auch .oggs lesen? In diesem falle Reicht natürlich

Code: Alles auswählen

lame --preset standard $file ${file/.ogg/.mp3}
in der if-Anweisung

Benutzeravatar
Mr_Snede
Beiträge: 2323
Registriert: 08.07.2003 13:48:49
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Ruhrpott

Beitrag von Mr_Snede » 28.02.2004 12:14:08

Hallo Belgarad,
anbei ein kleines Skript um bestehende mp3 (für dich natürlich ogg) in mp3 mit niedriger Bitrate, cbr und fester Samplingfequenz von 44.1 KHz umzuwandeln.

Habe für dich -- ogginput anstatt meinem --mp3input eingefügt und für die Ausgabedatei die Dateiendung .mp3 eingefügt.
Mit -q 9 habe ich natürlich viel Qualität verloren, aber im mobilen Einsatz ist es nicht negativ aufgefallen.
Dafür dauert das konvertieren nicht so lange.
Ich habe das Skript nicht mit --ogginput nicht getestet, habe nur mp3's.

Leider fragt das Skript nicht nach schon bestehenden Dateien im Ausgangsordner oder ob im Eingangsordner andere Dateien als *.ogg liegen.

Ich habe vor dieses Skript noch weiter auszubauen, um zB. oben genannte Mängel auszuräumen.
Wenn du Interesse hast können wir uns gerne zusammentun.
ps: bin noch grün hinter den Ohren, was das Skripten/Programmieren angeht. Bin also für jede Rückmeldung zu meinem Code dankbar.

g-henna:

Code: Alles auswählen

--ogginput     input file is an Ogg Vorbis file.  decode using libvorbis
gefunden bei: http://www.mp3dev.org/mp3/USAGE

Code: Alles auswählen

#!/usr/bin/python
mport string, os

pfad_in = "/home/foo/in/"
pfad_out= "/home/bar/out/"
lame_aufruf = "lame --ogginput --cbr --resample 44.1 -q 9 -b 96 " # -q 9 -h

filenames = os.listdir(pfad_in)
filenames.sort() # nicht unbedingt noetig, aber nett
print 'Dateien im Ordner: ', filenames ,'\n'

for fname in filenames:
	fname_esc = fname.replace(" ","\\ ")
	print fname_esc
	fname_no = fname.replace(" ","")
	print fname_no
	fname_no = fname_no[:-3] + "mp3"
	print fname_no
	befehl = lame_aufruf + pfad_in + fname_esc+ " "+ pfad_out + fname_no
	print befehl
	os.system(befehl)
Bis denn Sebastian

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Re: script um oggs nach mp3 zu wandeln

Beitrag von peschmae » 29.02.2004 13:32:02

Belgarad hat geschrieben:...
da ogg123 scheinbar nicht nach stdout ausgeben kann, verwende ich keine pipe sondern eine datei temp.out
Das ist nicht nötig. Du kannst ogg123 auch einfach nach /dev/stdout ausgeben lassen. Dann kannst du auch mit derartig widerspenstigen Programmen Pipes verwenden. :)
(Entsprechend gibt es natürlich auch /dev/stderr und /dev/stdin)

MfG Peschmä

Archmage
Beiträge: 138
Registriert: 11.08.2003 03:15:01

Beitrag von Archmage » 01.03.2004 00:17:35

Nur mal so als Einwand: Das bei der Umwandlung Qualitätsverluste entstehen ist bekannt, oder?

Belgarad
Beiträge: 749
Registriert: 12.07.2002 02:00:44

Beitrag von Belgarad » 04.03.2004 13:33:49

Archmage hat geschrieben:Nur mal so als Einwand: Das bei der Umwandlung Qualitätsverluste entstehen ist bekannt, oder?
Ja das stimmt. nehme ich aber in kauf.

p.s. hat jemand eine idee wie man die id3 tags aus den ogg's automatisch erzeugen koennte?
Debian SID

Antworten