source: telemeta/export/ogg.py @ c432450

cremcrem2crem3devdev2diademsdj1.6feature/breadcrumbsfeature/ts-0.5feature/ts-0.5.4feature/writecacheformagenericinstru_searchlamlam2mapsv3mergenlivemultiprobproductionrelease/1.4.4sabiodsearchsecurityserversocialstoragetelecastertestvideo
Last change on this file since c432450 was c432450, checked in by yomguy <>, 8 years ago

Fixed ogg verbose 2

  • 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                args = ''
80               
81                if not options is None:
82                        self.options = options
83                       
84                        if 'verbose' in self.options and self.options['verbose'] != '0':
85                                args = args
86                        else:
87                                args = args + ' -Q '
88                       
89                        if 'ogg_bitrate' in self.options:
90                                args = args + '-b '+self.options['ogg_bitrate']
91                        elif 'ogg_quality' in self.options:
92                                args = args + '-q '+self.options['ogg_quality']
93                        else:
94                                args = args + '-b '+self.bitrate_default
95
96                else:
97                        args = ' -Q -b '+self.bitrate_default
98
99                if os.path.exists(self.source) and not iswav16(self.source):
100                        self.source = self.decode()
101                       
102                try:
103                        # Pre-proccessing (core)
104                        self.ext = self.get_file_extension()
105                        self.dest = self.pre_process(self.item_id,
106                                                        self.source,
107                                                        self.metadata,
108                                                        self.ext,
109                                                        self.cache_dir,
110                                                        self.options)
111                       
112                        # Encoding
113                        os.system('oggenc '+args+' -o "'+self.dest+
114                                          '" "'+self.source+'"')
115                       
116                        # Pre-proccessing (self)
117                        self.write_tags()
118                        self.post_process(self.item_id,
119                                                 self.source,
120                                                 self.metadata,
121                                                 self.ext,
122                                                 self.cache_dir,
123                                                 self.options)
124                                               
125                        # Output
126                        return self.dest
127
128                except IOError:
129                        return 'ExporterError [3]: source file does not exist.'
130
Note: See TracBrowser for help on using the repository browser.