[linux] mp3 Collection normalisieren

Code-Stücke können hier veröffentlicht werden.
Antworten
baracuda
User
Beiträge: 21
Registriert: Mittwoch 5. November 2008, 13:08

Ich habe den Thread in die Rubrik 'Snippets' gestellt, da 8 Zeilen Python-Code wahrscheinlich noch kein 'Projekt' o.ä. ausmachen :wink:

Es geht einfach darum, man besitzt eine mp3-Sammlung aus verschiedenen Quellen und daher mit verschiedenen Lautstärken und möchte, um nicht immer den Volume-Regler bedienen zu müssen, um es auf eine erträgliche Lautstärke zu bringen, seine Musikbibliothek normalisieren.
Dafür gibt es Kommandozeilentools wie normalize , die das für einen erledigen, es hat aber keine Batchverarbeitung.
Ich habe mir innerhalb von 5 Minuten ein kleines Skript zusammengestellt, dass mir alle Musikstücke eines Ordners und deren Unterordner normalisiert.
Hat mir viel Zeit und Mühen erspart.

HINWEISE:
* auf der Linux-Distribution Fedora 11 getestet
* benötigt installiertes normalize
* bitte darauf Acht geben, auf welches Verzeichnis ihr es loslasst! am besten erst an einem Testverzeichnis probieren und nachschauen, ob es funktioniert.
* keine Haftung dafür, was normalize mit euren Musiktiteln anstellt
* Pfad unbedingt selber anpassen.
* Normalisieren kann je nach Größe der Musiksammlung etwas Zeit in Anspruch nehmen
* Dateien, die keine Musik sind, werden von normalize automatisch ausgelassen

Code: Alles auswählen

import subprocess
import os

DIR = "/home/baracuda/Music/"
for dirpath, dirnames, filenames in os.walk(DIR):
	os.chdir(dirpath)
	for f in filenames:
		subprocess.call(["normalize", "-m", "-v", f])
Ich hoffe, ich kann damit jemand das Leben leichter machen.
Evtl wird auch noch eine GUI herumgebaut. Auch werde ich es wahrscheinlich noch in der kommenden Zeit in linux-Foren reposten, google hat mir verraten, dass nach normalisierung mit batchverarbeitung verzweifelt gesucht wird :D

mfg baracuda
BlackJack

@baracuda: Python ist zwar toll, aber hier würde es ``find`` auch tun.
baracuda
User
Beiträge: 21
Registriert: Mittwoch 5. November 2008, 13:08

BlackJack hat geschrieben:@baracuda: Python ist zwar toll, aber hier würde es ``find`` auch tun.
Was meinst du mit ``find``?
Werde mal bitte etwas detailierter :wink:
BlackJack

Code: Alles auswählen

man find
Detailliert genug? :-)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Hint: ``find`` kennt ``-exec``
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Ein kleines Shell-Skript (ungetestet):

Code: Alles auswählen

#!/bin/bash

IFS_OLD=$IFS
IFS=$'\0'
for i in $(find /home/baracuda/Music/ -name *.mp3)
do
  normalize -m -v $i
done
IFS=$IFS_OLD
Den IFS-Kram kann man sich schenken, falls in den Dateinamen keine Shell-Separatorzeichen vorkommen. Dann ist es quasi ein Einzeiler.

Mit Shellmitteln könnte man da jetzt noch eine dialogbasierte "GUI" dazu stricken, welche am besten zu gdialog oder kdialog wechselt, so denn vorhanden... ;)
BlackJack

@jerch: Warum so verdammt kompliziert statt mit `-exec`!?
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Ja ist kompliziert und wohl eher alten Kopfrauf-Shellskripttagen geschuldet. :oops:

Ja mit -exec ist es in dem Fall definitiv einfacher...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

The real WTF ist doch eher, warum man nicht Replay Gain verwendet ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Einen hab ich noch:

Code: Alles auswählen

find /home/baracuda/Music/ -name *.mp3 -print0 | xargs -0 normalize
SCNR :twisted:
Antworten