summaryrefslogtreecommitdiff
path: root/recode.py
blob: 5f5a6231d524715cc3b6b45dce3bfe58f3090453 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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])