Bestehende mp3 (VBR) für Palm -> mp3 128 kb (CBR)

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Dieses Skript dient dazu, mp3's für meinen Sony Clie Peg N770C/E vorzubereiten.
Dies ist mein erstes eigen Pythonwerk.
Ideen, Vorschläge, Verbesserungen sind willkommen.

Es benutzt "lame" um alle *.mp3's eines Ordners in niedrigere Bitraten zu konvertieren.
Die Ausgabe erfolgt in einem extra Ordner.
Es geht auf die Beschränkungen des in diesem PDA verbauten DSP ein:
- keine Variable Bitrate
- keine Leerzeichen Im Dateinamen
- minimal 128 kB/s
-------und dies nur, um das eigene Atrac3 Verfahren zu forcieren :-((

Limitierungen:
- Es dürfen nur mp3's im Eingangsordner sein.
- Da die Mehrzahl meiner mp3's (mindestens) ein Leerzeichen im Dateinamen hat erfolgt die Behandlung fuer alle Dateien gleich, ob nun Leerzeichen im Dateinamen enthalten sind oder nicht.
- Bearbeitete Dateien werden nicht automatisch geloescht

Zukunft:
- Abfrage, ob es sich wirklich um eine mp3 Datei handelt.
- Abfrage, ob wirklich Leerzeichen im Dateinamen enthalten sind.
- Bearbeitete Dateien im Eingangsordner automatisch löschen.
- Meldung bei erreichen eines Limits (zB: Groesse meiner Speicherkarte = 128MB).
- Übergabe der mp3-Tag's an die neue Datei.
- Automatisches Einbinden der Speicherkarte, mp3's draufschieben, automatisches Abmelden der Speicherkarte
- Anzeige der Gesamtlaufzeit

By: Mr_Snede 07.02.04

Version 0.01

Code: Alles auswählen

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

pfad_in = "/foo/bar/in"
pfad_out= "/foo/bar/out"
lame_aufruf = "lame --mp3input -q 9 " # -h = langsamer, subj. nicht besser

def esc_spaces(filename):
	"fuegt vor Leerzeichen ein Escapezeichen ein"
	filename_list = string.split(filename)

	combStr = ""
	for i in filename_list:
		combStr = combStr + "\ " + i
	filename = combStr[2:]
	return filename
	
def no_spaces(filename):
	"fuegt vor Leerzeichen ein Escapezeichen ein"
	filename_list = string.split(filename)
	print filename_list
	
	filename = ""
	for i in filename_list:
		filename = filename + i
	return filename	

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

for fname in filenames:
	fname_esc = esc_spaces(fname)
	fname_no = no_spaces(fname)
	befehl = lame_aufruf + pfad_in +"/" + fname_esc+ " "+ pfad_out + "/" + fname_no
	os.system(befehl)
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!
Mr_Snede hat geschrieben:Dies ist mein erstes eigen Pythonwerk.
Ideen, Vorschläge, Verbesserungen sind willkommen.
Auch so'n "Drauflosprogrammierer" ;-)
Die Klasse String kennt u.a. die Methode replace(). Deine Leerzeichen bekommst Du damit einfacher in den Griff:

Code: Alles auswählen

   filename = filename.replace(" ","\\ ")
   filename = filename.replace(" ","")
Für's erste Python-Programm ist das natürlich aller Ehren wert.
Jan
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Juhu, so schnell eine Antwort.
mit:

Code: Alles auswählen

   filename = filename.replace(" ","\\ ") 
   filename = filename.replace(" ","")
wird es natürlich gleich viel schöner und ist schon so gut wie eingebaut.
Auch so'n "Drauflosprogrammierer"
Jupp, hatte nie die Motivation ein Tuto oder Buch durchzuarbeiten, mit einem soliden Grundlagenwissen in der Computerwelt und der Motivation einer nervigen Aufgabe zu entkommen haben bei mir schon Wunder bewirkt.
Soll aber nicht heissen, dass ich kein Tuto oder Buch gelesen habe.

Dafür habe ich einiges beim Rumfuchteln mit den Leerzeichen gelernt:-))
Ausserdem:
Programmieren kann man nicht erlernen, sondern man muß es erleiden (unser Informatik Prof bei der Java Vorlesung)

Leider muss ich erstmal noch ein bischen E-technik lernen.
Wie du dem obigen Ergebnis entnehmen kannst habe ich dieses Wochenende noch nicht viel Zeit für's Lernen gehabt.
Aber vielleicht lasse ich mich vor dem Schlafengehen ja noch von der "Schlange" verführen

bis denn Mr_Snede
Gast

Hier ist die überarbeitete Version auf Basis das Hinweises von "Voges".
Ihm wird dafür in der Versionsnummer auf immer und ewig gehuldigt ;-)

Code: Alles auswählen

#!/usr/bin/python
# Version 0.01a-Voges

import string, os

pfad_in = "/home/sabba/flm"
pfad_out= "/home/sabba/out"
lame_aufruf = "lame --mp3input -q 9 " # -h = langsamer, subj. nicht besser

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(" ","\\ ") 
	fname_no = fname.replace(" ","")
	befehl = lame_aufruf + pfad_in +"/" + fname_esc+ " "+ pfad_out + "/" + fname_no
	os.system(befehl)
Bis denne: Mr_Snede
Antworten