diff --git a/picard/formats/__init__.py b/picard/formats/__init__.py index 0a1ef0399..6ac9915f4 100644 --- a/picard/formats/__init__.py +++ b/picard/formats/__init__.py @@ -164,11 +164,15 @@ from picard.formats.vorbis import ( OggSpeexFile, OggVorbisFile, OggAudioFile, + OggOpusFile, + with_opus, ) register_format(FLACFile) register_format(OggFLACFile) register_format(OggSpeexFile) register_format(OggVorbisFile) +if with_opus: + register_format(OggOpusFile) register_format(OggAudioFile) try: diff --git a/picard/formats/vorbis.py b/picard/formats/vorbis.py index 88746d71d..c436a73b3 100644 --- a/picard/formats/vorbis.py +++ b/picard/formats/vorbis.py @@ -24,6 +24,12 @@ import mutagen.oggflac import mutagen.oggspeex import mutagen.oggtheora import mutagen.oggvorbis +try: + from mutagen.oggopus import OggOpus + with_opus = True +except ImportError: + OggOpus = None + with_opus = False from picard.file import File from picard.metadata import Metadata from picard.util import encode_filename, sanitize_date @@ -203,6 +209,15 @@ class OggVorbisFile(VCommentFile): super(OggVorbisFile, self)._info(metadata, file) metadata['~format'] = self.NAME +class OggOpusFile(VCommentFile): + """Ogg Opus file.""" + EXTENSIONS = [".opus"] + NAME = "Ogg Opus" + _File = OggOpus + def _info(self, metadata, file): + super(OggOpusFile, self)._info(metadata, file) + metadata['~format'] = self.NAME + def OggAudioFile(filename): """Generic Ogg audio file.""" options = [OggFLACFile, OggSpeexFile, OggVorbisFile]