source: telemeta/export/ogg.py @ c2aa673

cremcrem2devdev2diademsdj1.6feature/breadcrumbsfeature/ts-0.5feature/ts-0.5.4feature/writecacheformagenericinstru_searchlamlam2mapsv3mergenlivemultiproductionrelease/1.4.4sabiodsecurityserversocialstoragetelecastertestvideo
Last change on this file since c2aa673 was c2aa673, checked in by yomguy <>, 7 years ago

Temporary fixed mp3 date

  • Property mode set to 100644
File size: 3.1 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# Copyright (C) 2007 Parisson SARL
4# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
5# All rights reserved.
6#
7# This software is licensed as described in the file COPYING, which
8# you should have received as part of this distribution. The terms
9# are also available at http://svn.parisson.org/telemeta/TelemetaLicense.
10#
11# Author: Guillaume Pellerin <pellerin@parisson.com>
12
13import os
14import string
15
16from telemeta.export.core import *
17from telemeta.export.api import IExporter
18from mutagen.oggvorbis import OggVorbis
19
20class OggExporter(ExporterCore):
21        """Defines methods to export to OGG Vorbis"""
22
23        implements(IExporter)
24       
25        def __init__(self):
26                self.item_id = ''
27                self.metadata = {}
28                self.description = ''
29                self.info = []
30                self.source = ''
31                self.dest = ''
32                self.options = {}
33                self.bitrate_default = '192'
34
35        def get_format(self):
36                return 'OGG'
37       
38        def get_file_extension(self):
39                return 'ogg'
40
41        def get_mime_type(self):
42                return 'application/ogg'
43
44        def get_description(self):
45                return 'FIXME'
46
47        def get_file_info(self):
48                try:
49                        file_out1, file_out2 = os.popen4('ogginfo "'+self.dest+'"')
50                        info = []
51                        for line in file_out2.readlines():
52                                info.append(clean_word(line[:-1]))
53                        self.info = info
54                        return self.info
55                except IOError:
56                        return 'Exporter error [1]: file does not exist.'
57
58        #def set_cache_dir(self,path):
59        #       self.cache_dir = path
60
61        def decode(self):
62                try:
63                        os.system('oggdec -o "'+self.cache_dir+os.sep+self.item_id+
64                                          '.wav" "'+self.source+'"')
65                        return self.cache_dir+os.sep+self.item_id+'.wav'
66                except IOError:
67                        return 'ExporterError [2]: decoder not compatible.'
68
69        def write_tags(self):
70                media = OggVorbis(self.dest)
71                for tag in self.metadata.keys():
72                        media[tag] = str(self.metadata[tag])
73                media.save()
74               
75        def process(self, item_id, source, metadata, options=None):
76                self.item_id = item_id
77                self.source = source
78                self.metadata = metadata
79                self.options = {}
80                args = ''
81               
82                if not options is None:
83                        self.options = options
84                       
85                        if 'verbose' in self.options and self.options['verbose'] != '0':
86                                args = args
87                        else:
88                                args = args + ' -Q '
89                       
90                        if 'ogg_bitrate' in self.options:
91                                args = args + '-b '+self.options['ogg_bitrate']
92                        elif 'ogg_quality' in self.options:
93                                args = args + '-q '+self.options['ogg_quality']
94                        else:
95                                args = args + '-b '+self.bitrate_default
96
97                else:
98                        args = ' -Q -b '+self.bitrate_default
99                       
100                if os.path.exists(self.source) and not iswav16(self.source):
101                        self.source = self.decode()
102                       
103                try:
104                        # Pre-proccessing (core)
105                        self.ext = self.get_file_extension()
106                        self.dest = self.pre_process(self.item_id,
107                                                        self.source,
108                                                        self.metadata,
109                                                        self.ext,
110                                                        self.cache_dir,
111                                                        self.options)
112                       
113                        # Encoding
114                        os.system('oggenc '+args+' -o "'+self.dest+
115                                          '" "'+self.source+'"')
116                       
117                        # Pre-proccessing (self)
118                        self.write_tags()
119                        self.post_process(self.item_id,
120                                                 self.source,
121                                                 self.metadata,
122                                                 self.ext,
123                                                 self.cache_dir,
124                                                 self.options)
125                                               
126                        # Output
127                        return self.dest
128
129                except IOError:
130                        return 'ExporterError [3]: source file does not exist.'
131
Note: See TracBrowser for help on using the repository browser.