#!/usr/bin/env python

import sys, os, subprocess, threading, time

class youff(object):
	def __init__(self,files,maxjobs=4):
		self.files = files
		self.jobs = []
		self.maxjobs = maxjobs
		self.working = True
		
		while True:
			self.fill()
			self.clean()
			if not self.working and not self.files:
				break
			else:
				time.sleep(.5)

	def fill(self):
		while self.files:
			if len(self.jobs) < self.maxjobs:
				self.jobs.append(self.flv2jpg(self.files.pop()))
			else:
				break

	def clean(self):
		nojob = True
		for i in range(len(self.jobs)-1,-1,-1):
			if not self.jobs[i].isAlive():
				self.jobs.pop(i)
			else:
				nojob = False
		if nojob:
			self.working = False
			

	class flv2jpg(threading.Thread):
		def __init__(self,flv):
			self.flv = flv
			threading.Thread.__init__(self)
			threading.local()
			self.start()
		def run(self):
			outdir = self.flv+"2jpg"
			os.mkdir(outdir)
			cmd = "ffmpeg -i "+self.flv+" -an -y "+outdir+"/"+self.flv+"__%06d.jpg"
			child = subprocess.Popen(cmd.split(), stderr=subprocess.PIPE, stdout=subprocess.PIPE)
			child.wait()
		

def main():
	if sys.argv[1:]:
		print "Let's convert "+" ".join(sys.argv[1:])
		job = youff(sys.argv[1:])
	else:
		print "Usage: "+sys.argv[0]+" file [file]"
	
if __name__ == "__main__":
	main()