From 97d7c9014855449fe04162308feac66a35e007ea Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Mon, 8 Aug 2011 00:11:01 +0200 Subject: Initial commit. app.py - WSGI application and handlers. config.py - Config helper class. directory.py - Directory and file helper classes. events.py - zeromq event publisher and subscriber. recode.py - Codecs and stuff static/ - Web interface --- recode.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 recode.py (limited to 'recode.py') diff --git a/recode.py b/recode.py new file mode 100644 index 0000000..5f5a623 --- /dev/null +++ b/recode.py @@ -0,0 +1,71 @@ +import subprocess, tempfile + +decoders = {} +encoders = {} + +class DecoderMeta(type): + def __init__(cls, name, bases, dict): + if not name in ('Decoder', 'Codec'): + decoders[cls.decoder_name] = cls + +class Decoder(object): + __metaclass__ = DecoderMeta + +class EncoderMeta(type): + def __init__(cls, name, bases, dict): + if not name in ('Encoder', 'Codec'): + encoders[cls.encoder_name] = cls + +class Encoder(object): + __metaclass__ = EncoderMeta + +class CodecMeta(DecoderMeta, EncoderMeta): + def __init__(cls, name, bases, dict): + DecoderMeta.__init__(cls, name, bases, dict) + EncoderMeta.__init__(cls, name, bases, dict) + +class Codec(object): + __metaclass__ = CodecMeta + +# end of metastuff + +class FFmpeg(Codec): + decoder_name = 'ffmpeg' + encoder_name = 'ffmpeg' + + def decode(self, source, dest, *args): + ret = subprocess.call((x.format(infile = source, outfile = dest) for x in 'ffmpeg -loglevel quiet -i {infile} -y {outfile}'.split())) + print 'decoding returned', ret + + def encode(self, source, dest, *args): + ret = subprocess.call((x.format(infile = source, outfile = dest) for x in 'ffmpeg -loglevel quiet -i {infile} -y {outfile}'.split())) + print 'encoding returned', ret + + def recode(self, source, dest, *args): + ret = subprocess.call((x.format(infile = source, outfile = dest) for x in 'ffmpeg -loglevel quiet -i {infile} -y {outfile}'.split())) + print 'recoding returned', ret + +class Recoder(object): + def __init__(self, decoder, encoder): + self.decoder = decoder + self.encoder = encoder + + def recode(self, source, dest): + if self.decoder.__class__ == self.encoder.__class__ and hasattr(self.decoder, 'recode'): + print 'recoding' + print self.decoder + self.decoder.recode(source, dest) + else: + temp = tempfile.NamedTemporaryFile(mode = 'wb', prefix = 'foo', suffix = os.path.splitext(dest)[1], delete = True) + print 'decoding' + self.decoder.decode(source, temp.name) + print 'encoding' + self.encoder.encode(temp.name, dest) + temp.close() + +if __name__ == '__main__': + import sys + ffmpeg = FFmpeg() + print ffmpeg + r = Recoder(ffmpeg, ffmpeg) + r.recode(sys.argv[1], sys.argv[2]) -- cgit v1.2.3