AAC und MP3 Dateien nach MP3 konvertieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
devek
User
Beiträge: 8
Registriert: Mittwoch 13. April 2011, 21:19

Samstag 16. April 2011, 16:39

Hallo,

ich möchte gerne einen ganzen Stapel AAC und MP3 Dateien, deren Bitraten zwischen 256 und 320 kBit/s liegen in MP3 mit 128 kBit/s konvertieren.

Bisher habe ich das hier gebastelt:

Code: Alles auswählen

if engine == "lame":
	command = 'lame --quiet -b %d "%s" "%s"' % (bitrate, infile, outfile)
if engine == "ffmpeg":
	command = 'ffmpeg -i "%s" -acodec libmp3lame -ac 2 -ab %d "%s"' % (infile, bitrate*1024, outfile)
os.system(command)
Das Problem ist nur, dass weder das eine, noch das andere Programm die Metadaten richtig übernehmen. Gibt es eventuell die Möglichkeit das direkt aus Python zu erledigen?

Grüße,

devek
problembär

Samstag 16. April 2011, 19:30

Vielleicht liegt's an den " und der %-Konstruktion. Versuch doch mal, den String über '+' aufzubauen und laß Dir mit 'print' ausgeben, was genau an os.system() geschickt wird.

Oder probier' das mal mit subprocess. Da werden die Argumente AFAIR in einer Liste übergeben, um solche Probleme zu vermeiden.

Gruß
lunar

Samstag 16. April 2011, 20:25

@devek: In der Dokumentation von "ffmpeg" wird die Option "--map_metadata" beschrieben, mit der man die Metadaten wohl kopieren kann. Ansonsten kannst Du das Modul "mutagen" verwenden, um die Metadaten manuell aus der Quelldatei auszulesen und in die Zieldatei zu schreiben.

Nutze bitte "subprocess" zur Ausführung der Prozesse. Damit kannst Du die Befehle bequem als Liste zusammen bauen, ohne umständlich mit Anführungszeichen und Zeichenkettenformatierung zu hantieren.

Falls es Dir nicht um die Übung in Python, sondern nur um das Ergebnis geht, ist es vielleicht wohl sinnvoller, einfach ein bereits existierendes Programm wie SoundKonverter oder Perl Audio Converter zu nutzen, anstatt das Rad neu zu erfinden :)
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

Samstag 16. April 2011, 20:38

Hallo

wie @lunar schon schrieb gibt es für ffmpeg die Option "-map_meta_data". Das würde dann vereinfacht so aussehem

Code: Alles auswählen

ffmpeg -i <infile> <outfile> -map_meta_data 0:0
Gruß...busfahrer
Alles wird gut ;-)
devek
User
Beiträge: 8
Registriert: Mittwoch 13. April 2011, 21:19

Samstag 16. April 2011, 20:40

Danke für den Tipp, mit

Code: Alles auswählen

-map_meta_data "%s":"%s
funktioniert es jetzt gut.

Es geht bei meinem Programm darum, dass ich eine Ordnerstruktur genau abbilde, und dabei alles in 128 kBit/s zu konvertieren. Die Speicherkarte meines Handys reicht nicht mehr aus. Und so möchte ich jetzt alles konvertieren, brauche dabei allerdings die Flexibiltät mit os.path.walk und vor allem diversen Stringoperationen auf die Dateinamen.

Subprocess schreibe ich auf meine Leseliste.

Das Ergebnis ist inzwischen fertig, sieht noch ziemlich gruselig aus, macht aber, was es soll :)
Antworten