Achtung

Dieser Beitrag ist schon sehr alt, und die Infos hier sind sicherlich hoffnungslos veraltet…

Musiksammlung mit vbrfix fixen

Ubuntu
ubuntuusers
Autor:in

produnis

Veröffentlichungsdatum

8. Dezember 2010

[Dieser Artikel ist schon recht alt. Eine Alternative wird hier beschrieben (mp3val)]

Das Tool vbrfix repariert MP3-Dateien, die mit variabler Bitrate erstellt wurden, und bei denen der Encoder den Dateihead falsch geschrieben hat. Man erkennt solche “kaputten” VBR-MP3-Dateien beispielsweise daran, dass die Abspielgeräte falsche Spiellängen anzeigen. Mit vbrfix wird der Header bei Bedarf neu geschrieben. Ich habe hier ein kleines Python-Script geschrieben, welches ich auf meine Musiksammlung loslasse. Das Script wühlt sich rekursiv durch die Ordner, und wendet auf alle MP3-Dateien das Tool vbrfix an. Dieses wiederum erkennt selbstständig, ob die Datei überhaupt eine VBR-MP3-Datei ist und repariert automatisch den Header.

sudo apt-get install vbrfix

Das Script kann an beliebiger Stelle abgelegt werden, ich persönlich hab für sowas einen eigenen bin-Ordner in meinem Userverzeichnis.

touch ~/bin/vbrfix-all.py
chmod +x ~/bin/vbrfix-all.py
nano ~/bin/vbrfix-all.py

Die Datei bekommt dann folgenden Inhalt (wesentlich optimiert von User becha aus den Kommentaren ):

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
from subprocess import call

'''Function starts "vbrfixing"'''
def vbrfix_music():
    for music_file in file_list:
        if (music_file.endswith(".mp3")) or (music_file.endswith(".MP3")):
            call(['vbrfix', music_file, r"%s"%(music_file)])

file_list = []
'''Are there any arguments? If no, "rootdir" is the current directory'''
try:
    rootdir = sys.argv[1]
except IndexError:
    rootdir = '.'
   
for root, sub_folders, files in os.walk(rootdir):
    for element in files:
        file_list.append(os.path.join(root,element))

print "Folgende Dateien werden von vbrfix bearbeitet:"
for music_file in file_list:
    print music_file

answer = raw_input(u"Ist dies in Ordnung? (y/n) \n")
if answer == "y":
    vbrfix_music()
    os.remove('vbrfix.log')
    os.remove('vbrfix.tmp')
else:
    print "Zum Beenden Enter drücken!"
    raw_input()

Aufgerufen wird das Script nun per:

cd ~/bin
./vbrfix-all.py PFAD.ZUR.MUSIKSAMMLUNG

wobei der Pfad zur Musiksammlung entsprechend mitangegeben werden muss. Bei mir funktioniert das einwandfrei, dennoch solltet ihr unbedingt VORHER EIN BACKUP eurer Musiksammlung anlegen!

[Dieser Artikel ist schon recht alt. Eine Alternative wird hier beschrieben (mp3val)]