#!/usr/bin/python
# 
# You need Python 2.4, MPlayer with Mencoder and Matroska & OGG Support, 
# Normalize and oggenc...
# ...and go VEGAN
##########################################################################
# VARIABLES
WorkDir = '/home/marv/foo'

##########################################################################

import os
import subprocess
import re

def audio(lang, track, wavname, oggname):
	# converts a dvd track to a audio wav file
	ToWav = 'mplayer -loop 1 -alang %s -ao pcm:file=%s -vc null -vo null dvd://%s' % (lang, wavname, track) 
	ToWavProcess = subprocess.Popen(ToWav, shell=True)
	os.waitpid(ToWavProcess.pid, 0)

	# normalize the audio file
	Normalize = 'normalize %s' % (wavname)
	NormalizeProcess = subprocess.Popen(Normalize, shell=True)
	os.waitpid(NormalizeProcess.pid, 0)

	# encode the audio to a ogg file
	OggEnc = 'oggenc -q3 -o %s %s' % (oggname, wavname)
	OggEncProcess = subprocess.Popen(OggEnc, shell=True)
	os.waitpid(OggEncProcess.pid, 0)
	
def video(bitr, track, crop):
	# pass 1 step for video encoding to mpeg4
	Pass1 = 'mencoder -loop 1 -ofps 25 -nosound -vf crop=%s,hqdn3d=2:1:2 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=%s:v4mv:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3:autoaspect:vpass=1 dvd://%s -o movie.avi' % (crop, bitr, track)
	Pass1Process = subprocess.Popen(Pass1, shell=True)
	os.waitpid(Pass1Process.pid, 0)

	# pass 2 step for video encoding to mpeg4
	Pass2 = 'mencoder -loop 1-ofps 25 -nosound -vf crop=%s,hqdn3d=2:1:2 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=%s:v4mv:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3:autoaspect:vpass=2 dvd://%s -o movie.avi' % (crop, bitr, track)
	Pass2Process = subprocess.Popen(Pass2, shell=True)
	os.waitpid(Pass2Process.pid, 0)

def merge(choose, outputname, oggname1, oggname2):
	Merge = 'mkvmerge -o %s.mkv -A movie.avi %s' % (outputname, oggname1)
	
	if choose.lower() == 'y':
		Merge = Merge + ' %s' % (oggname2)
	
	MergeProcess = subprocess.Popen(Merge, shell=True)
	os.waitpid(MergeProcess.pid, 0)

def cropdetect(track):
	print 'Cropdetection...'
	
	CropCoder = 'mplayer -loop 1 dvd://%s -vf cropdetect -vo null -ao null -frames 1000' % (track)
	CropProcess = subprocess.Popen(CropCoder, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
	os.kill(CropProcess.pid, 0)
        
        CropEx = re.findall('\d+\:\d+\:\d+\:\d+', CropProcess.stdout.read())
	crop = CropEx[-1]
	return(crop)

def deletefile(file):
	CompletePath = WorkDir + '/' + file
	#print CompletePath
	os.remove(CompletePath)

def main():
	os.chdir(WorkDir)

	tracknumber = str(raw_input('Track: '))

	bitrate = str(raw_input('Bitrate: '))
	
	langone = str(raw_input('Language: '))
	choose = str(raw_input('One more Language? Y or N: '))
	if choose.lower() == 'y':
		langtwo = str(raw_input('Language: '))	
	
	moviename = str(raw_input('Moviename: '))

	audio(langone, tracknumber, 'wav1.wav', 'ogg1.ogg')
	if choose.lower() == 'y':
		audio(langtwo, tracknumber, 'wav2.wav', 'ogg2.ogg')
	crop = cropdetect(tracknumber)
	video(bitrate, tracknumber, crop)
	merge(choose, moviename, 'ogg1.ogg', 'ogg2.ogg')

	# clean up
	deletefile('divx2pass.log')
	deletefile('movie.avi')
	deletefile('wav1.wav')
	deletefile('ogg1.ogg')
	if choose.lower() == 'y':
		deletefile('wav2.wav')
		deletefile('ogg2.ogg')

main()
