From 80ece3001895ea13d50915a5215fd47e313bab4c Mon Sep 17 00:00:00 2001 From: jvoisin Date: Wed, 2 Dec 2015 17:07:19 +0100 Subject: Remove hachoir from MAT. This (huge) commit removes completely hachoir from MAT. Audio files are now processed with mutagen, and images with exiftool, since the main python imaging library (PIL) isn't super-great to deal with metadata (and damaged/non-standard files). Package maintainer should change the dependencies to reflect this. --- libmat/mutagenstripper.py | 66 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) (limited to 'libmat/mutagenstripper.py') diff --git a/libmat/mutagenstripper.py b/libmat/mutagenstripper.py index 0f9520a..692c56f 100644 --- a/libmat/mutagenstripper.py +++ b/libmat/mutagenstripper.py @@ -3,11 +3,15 @@ import parser +from mutagen.flac import FLAC +from mutagen.oggvorbis import OggVorbis +from mutagen.mp3 import MP3 + class MutagenStripper(parser.GenericParser): """ Parser using the (awesome) mutagen library. """ - def __init__(self, filename, parser, mime, backup, is_writable, **kwargs): - super(MutagenStripper, self).__init__(filename, parser, mime, backup, is_writable, **kwargs) + def __init__(self, filename, mime, backup, is_writable, **kwargs): + super(MutagenStripper, self).__init__(filename, mime, backup, is_writable, **kwargs) self.mfile = None # This will be instanciated in self._create_mfile() self._create_mfile() @@ -36,3 +40,61 @@ class MutagenStripper(parser.GenericParser): for key, value in self.mfile.tags: metadata[key] = value return metadata + + +class MpegAudioStripper(MutagenStripper): + """ Represent a mp3 vorbis file + """ + def _create_mfile(self): + self.mfile = MP3(self.filename) + + def get_meta(self): + """ + Return the content of the metadata block is present + """ + metadata = {} + if self.mfile.tags: + for key in self.mfile.tags.keys(): + meta = self.mfile.tags[key] + try: # Sometimes, the field has a human-redable description + desc = meta.desc + except AttributeError: + desc = key + text = meta.text[0] + metadata[desc] = text + return metadata + + +class OggStripper(MutagenStripper): + """ Represent an ogg vorbis file + """ + def _create_mfile(self): + self.mfile = OggVorbis(self.filename) + + +class FlacStripper(MutagenStripper): + """ Represent a Flac audio file + """ + def _create_mfile(self): + self.mfile = FLAC(self.filename) + + def remove_all(self): + """ Remove the "metadata" block from the file + """ + super(FlacStripper, self).remove_all() + self.mfile.clear_pictures() + self.mfile.save() + return True + + def is_clean(self): + """ Check if the "metadata" block is present in the file + """ + return super(FlacStripper, self).is_clean() and not self.mfile.pictures + + def get_meta(self): + """ Return the content of the metadata block if present + """ + metadata = super(FlacStripper, self).get_meta() + if self.mfile.pictures: + metadata['picture:'] = 'yes' + return metadata -- cgit v1.3