[mythtv-users] Announcing new program for transcoding recordings.

Bill Bradley wbradley at bham.rr.com
Sat Jun 26 13:49:06 EDT 2004


On Saturday 26 June 2004 12:12, Esben Skov Pedersen wrote:
> #!/usr/bin/python
>
> #You might want to change these settings
>
> #mysql info. Read "man mysql"
> mysql='mysql -umythtv -pmythtv mythconverg'
>
> qualitySet={
>     3:  {'bitrate': 1000, 'scale':(400, 320)},
>     6:  {'bitrate': 1200, 'scale': (360, 288)},
>     9:  {'bitrate': 1200, 'scale': (400, 320)},
>     99: {'bitrate': 0, 'scale': (0, 0)}
> }  
> quality=9
>
> #VBR sound quality (0-9, 0=best)
> lameQuality=4
>
> #2-pass? Takes longer time to encode
> twoPass=True
>
> #Cut some of the edges. -1 means center
> #crop=(420, 326, -1, -1)
> bitrate=qualitySet[quality]['bitrate']
>
> divx="-ovc lavc -lavcopts vbitrate=%d:vcodec=mpeg4 "%( bitrate )
> xvid="-ovc xvid -xvidencopts bitrate=%d "% ( bitrate )
>
> if twoPass:
>     divx+="-lavcopts vpass=%n "
>     xvid+="-xvidencopts pass=%n "
>    
> #Video codec See http://mplayerhq.hu/DOCS/man/en/manpage.html for
> further options
> videoCodec=divx
>
> #Length of movie (seconds). Go nuts and try the different codecs much
> faster #movieLength=20
> #Note The movies will end up i the current directory as title.avi
> ########################################################################
> ##Don't edit anything below this line unless you know what you are doing
> ########################################################################
>
>
> import os
> import sys
> import time
> import re
>
> def skrivStatus(prefix, done, eta):
>     status="%3s%% Done ETA:%3sm"%( done, eta )
>     sys.stdout.write("\r%-55s %s"%(prefix[:52], status ))
>     sys.stdout.flush()
>    
> def parseMencoder(prefix, prog):
>     skrivStatus(prefix, 0, "")
>     v, encoder=os.popen4(prog)
>     findEta=re.compile('Trem:\s*(\d+)min')
>     findStatus=re.compile('\(\s*(\d+)%\)')
>     c=-1
>     status=""
>     try:
>         while True:
>             c+=1
>             raw=encoder.read(80)
>             if not raw: break
>         #    sys.stdout.write(raw)
>             if c%100!=0 or c<40: continue
>        #     tail=raw[-1:]
>             eta=findEta.search(raw)
>             try:
>                 done=findStatus.search(raw).group(1)
>                 finish=findEta.search(raw).group(1)
>                 status="%3s%% Done ETA:%3sm"%( done, finish )
>             except AttributeError: continue
>             skrivStatus(prefix, done, finish)
>     except KeyboardInterrupt:
>         print
>         sys.exit()
>     if c<50:
>         print "\r"
>         print "Mplayer does seem to be installed correctly"
>         sys.exit(1)
>     else:
>         skrivStatus(prefix, 100, 0)
>     print
> scale=qualitySet[quality]['scale']
>
> t=os.popen("echo \"select data from settings where
> value='RecordFilePrefix'\" | %s"%mysql)
> t.readline()
> recDir=t.readline().strip()
>
> shows=os.popen("echo \"SELECT concat('%s/', chanid, '_', starttime, '_',
> endtime, '.nuv') as Filnavn, title from recorded ORDER by starttime
> DESC\"  | %s"%(recDir, mysql))
>
> shows.readline()
> showsData=[]
> for show in shows.readlines():
>     try:
>         f=show.split('\t')
>         showsData.append(( unicode(f[1][:-1], 'utf-8'), f[0] ))
>     except : continue
> print "Legend.py: Encodes mythtv-recordings to xvid or divx"
> print "Edit top of Legend.py to change resolution, "
> print "bitrate, multi-pass and crop-settings"
> print " Show %57s"%'date'
>
> for key in range(0, len(showsData)):
>     try:
>         d=int(showsData[key][1][-27:-25])
>         m=int(showsData[key][1][-29:-27])
>         date="[ %d/%d ]"%(d, m)
>     except ValueError:
>         date=""
>     print " %-2d %-50s %s"%(key+1, showsData[key][0], date )
>
> while True:
>     print "Choose shows ( comma separated ) ",
>     try:
>         choices=[]
>         r=raw_input()
>         for a in r.split(','):
>            # print a
>             k=int(a)-1
>             ( showName, inFile ) = showsData[k]
>             choices.append( ( showName, inFile ) )
>         break
>     except KeyboardInterrupt:
>         print
>         sys.exit()
>     except ValueError:
>         print "Not a number \"%s\""%a
>         continue
>     except IndexError:
>         print "No such show \"%d\""% (k+1)
>         continue
>
> count=0
> n=''
> for showName, inFile in choices:
>     if count != 0: n=".%d"%count
>     outFile="%s%s.avi"%( showName.replace( ",", " - ").replace(':', ' -
> '), n )
>     if os.path.isfile(outFile):
>         print "%-50s [Y/n]"%( "\"%s\" exists.
> Overwrite?"%os.path.basename(outFile)[:46] ) ,
>         try:
>             ans=raw_input()
>         except KeyboardInterrupt:
>             print
>             sys.exit()
>         if not (ans =='' or ans[0].lower()=='y' ):
>             sys.exit()
>     count+=1
> count=0
> n=''
> print
> for showName, inFile in choices:
>     program="mencoder "
>    # program="false "
>     if count != 0: n=".%d"%count
>     outFile="%s%s.avi"%( showName.replace( ",", " - ").replace(':', ' -
> '), n )
>     program+="\"%s\" -o \"%s\" "%( inFile, outFile )
>     try:
>         program+="-vf crop=%d:%d:%d:%d " %crop
>     except NameError: pass
>     program+="-vf scale=%d:%d " %scale
>     program+=videoCodec
>     program+="-oac mp3lame "
>     program+="-lameopts q=%d "%lameQuality
>     try:
>         program+="-endpos %d "%movieLength
>     except NameError: pass
>     msg="%s First pass of \"%s\""%( time.strftime('%H:%M'), outFile )
>     if twoPass:
>         parseMencoder(msg, program.replace('%n', '1'))
>         msg="%s Second pass of \"%s\""%( time.strftime('%H:%M'), outFile )
>         parseMencoder(msg, program.replace('%n', '2'))
>     else:
>         parseMencoder(msg, program)
>     count+=1
> print time.strftime('%H:%M'), "All Done"


Can you send this as an attachment or post if to dl.  The cut/paste is 
screwing with the python script...it keeps erroring out on space 
characters...

thanks,
bbradley


More information about the mythtv-users mailing list