diff --git a/.pydevproject b/.pydevproject
index 756cdbd..e9c3ab1 100644
--- a/.pydevproject
+++ b/.pydevproject
@@ -6,6 +6,7 @@
/sandbox/src
/sandbox/gui
/sandbox/mpl
+/sandbox/megui
python 2.5
Default
diff --git a/megui/create_jobs.py b/megui/create_jobs.py
new file mode 100644
index 0000000..aa3eec5
--- /dev/null
+++ b/megui/create_jobs.py
@@ -0,0 +1,184 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2009 Andreas Balogh
+# See LICENSE for details.
+
+""" create MeGUI jobs for Panasonic MPG files """
+
+# system imports
+
+import logging
+import sys
+import os
+import getopt
+import re
+import xml.dom.minidom as xdm
+import xml.dom
+
+# local imports
+
+# constants
+
+# globals
+
+LOG = logging.getLogger()
+
+logging.basicConfig(level=logging.DEBUG,
+ format="%(asctime)s %(levelname).3s %(process)d:%(thread)d %(message)s",
+ datefmt="%H:%M:%S")
+
+# definitions
+
+class Usage(Exception):
+ pass
+
+class Error(Exception):
+ pass
+
+def main(argv = [__name__]):
+ try:
+ # check for parameters
+ LOG.info("starting '%s %s'", argv[0], " ".join(argv[1:]))
+ script_name = os.path.basename(argv[0])
+ try:
+ opts, args = getopt.getopt(argv[1:], "ht:j:z:", \
+ ["help", "template", "job_dir", "temp_dir"])
+ except getopt.error, err:
+ raise Usage(err)
+ LOG.debug("opts: %s, args: %s", opts, args)
+ template = "job_divx_template.xml"
+ job_dir = "C:\\Program Files\\megui\\jobs"
+ temp_dir = "e:\\video"
+ for o, a in opts:
+ if o in ("-h", "--help"):
+ usage(script_name)
+ return 0
+ elif o in ("-t", "--template"):
+ template = a
+ elif o in ("-j", "--job_dir"):
+ job_dir = a
+ elif o in ("-z", "--temp_dir"):
+ temp_dir = a
+ src_dir = "D:\\Documents\\Raw\\Panasonic SDR-S7\\Video"
+ dest_dir = "D:\\Documents\\My Videos\\Balogh"
+ if len(args) == 2:
+ src_dir = args[0]
+ dest_dir = args[1]
+ elif len(args) == 1:
+ src_dir = args[0]
+ elif len(args) > 2:
+ raise Usage("too many arguments")
+ # call method with appropriate arguments
+ if src_dir and not os.path.exists(src_dir):
+ raise Error("Source directory not found [%s], aborting" % (src_dir, ))
+ if dest_dir and not os.path.exists(dest_dir):
+ LOG.warn("Destination directory not found [%s]", dest_dir)
+ LOG.info("Creating destination directory [%s]", dest_dir)
+ os.makedirs(dest_dir)
+ cli(src_dir, dest_dir, template, job_dir, temp_dir)
+ LOG.info("Done.")
+ return 0
+ except Error, err:
+ LOG.error(err)
+ return 1
+ except Usage, err:
+ LOG.error(err)
+ LOG.info("for usage use -h or --help")
+ return 2
+
+
+def cli(src_dir, dest_dir, template, job_dir, tmp_dir):
+ """ command line interface """
+ if not os.path.exists(dest_dir):
+ LOG.error("Destination directory not found [%s]", dest_dir)
+ raise Error()
+ for mpg_fn in os.listdir(src_dir):
+ opts = { }
+ root, ext = os.path.splitext(mpg_fn)
+ # skip files which are not mpg video
+ if ext.lower() != ".mpg":
+ continue
+ # determine file paths
+ mpg_fp = os.path.join(src_dir, mpg_fn)
+ avi_fp = os.path.join(dest_dir, root + ".avi")
+ d2v_fp = os.path.join(tmp_dir, root + ".d2v")
+ opts["mpg_input"] = mpg_fp
+ opts["final_output"] = avi_fp
+ opts["d2v_output"] = d2v_fp
+ # if avi_fn older than mpg or doesn't exist
+ # then create job xml
+ if not os.path.exists(avi_fp):
+ create_megui_job(template, job_dir, opts)
+
+def append_megui_joblist(jobname):
+ joblist = "c:\\program files\\megui\\joblists.xml"
+ # load the xml
+ inf = open(joblist,"r")
+ dom = xdm.parse(inf)
+ inf.close()
+ # add job220 to mainJobList
+ JobListSerializer = dom.getElementsByTagName("JobListSerializer")[0]
+ mainJobList = JobListSerializer.getElementsByTagName("mainJobList")[0]
+ string = dom.createElement("string")
+ text = dom.createTextNode(jobname)
+ string.appendChild(text)
+ mainJobList.appendChild(string)
+ newline = dom.createTextNode("\n ")
+ mainJobList.appendChild(newline)
+ # save xml
+ outf = open(joblist,"w")
+ dom.writexml(outf)
+ outf.close()
+
+
+def create_megui_job(template, job_dir, opts):
+ # replace in template: mpg_input, d2v_output, final_output, jobnum
+ jobnum = get_next_jobnumber(job_dir)
+ LOG.info("creating job %i...", jobnum)
+ jobfn = "job%i.xml" % (jobnum, )
+ jobname = "job%i" % (jobnum, )
+ opts["jobname"] = jobname
+ tplf = open(template, "r")
+ jobf = open(os.path.join(job_dir, jobfn), "w")
+ try:
+ for line in tplf:
+ # line = raw_line.rstrip("\n\r")
+ for k, v in opts.items():
+ kd = "".join(("$", k, "$"))
+ line = line.replace(kd, v)
+ jobf.write(line)
+ finally:
+ jobf.close()
+ tplf.close()
+ append_megui_joblist(jobname)
+
+JOB_REO = re.compile("job(\d+)\.xml")
+
+def get_next_jobnumber(job_dir):
+ max_jn = 0
+ for job_fn in os.listdir(job_dir):
+ job_mo = JOB_REO.match(job_fn)
+ if job_mo:
+ jn = int(job_mo.group(1))
+ if jn > max_jn:
+ max_jn = jn
+ return max_jn + 1
+
+
+def usage(script_name):
+ print
+ print "usage: %s [-t template] [-j job_dir] [-z temp_dir] [src_dir [dst_dir]]" % (script_name,)
+ print """
+ src_dir source directory of original MPG files
+ dest_dir destination directory for compressed video
+options:
+ -h, --help show this help message and exit
+ -t, --template job template file
+ -j, --job_dir megui job directory
+ -z, --temp_dir working directory for megui
+"""
+
+
+if __name__ == "__main__":
+ sys.exit(main(sys.argv))
+
\ No newline at end of file
diff --git a/megui/job_divx_template.xml b/megui/job_divx_template.xml
new file mode 100644
index 0000000..78f409a
--- /dev/null
+++ b/megui/job_divx_template.xml
@@ -0,0 +1,154 @@
+
+
+
+
+ $mpg_input$
+
+
+ false
+ false
+ 1
+
+
+
+
+
+
+ c0
+ 192
+ MPEG-PS
+ 0
+ MP2
+ 2 channels
+ 48.0 KHz
+
+
+
+
+
+ ::192::
+
+
+ 0
+ false
+ false
+ StereoDownmix
+ ABR
+ 128
+ true
+ 0
+ false
+ 100
+ 50
+
+ 0
+ 0
+ CBR
+
+
+
+ false
+ false
+ true
+ false
+ true
+ false
+ 640
+ AVI
+
+
+
+
+ none
+ false
+ <input>
+Load_Stdcall_Plugin("C:\Program Files\megui\tools\yadif\yadif.dll")
+Yadif(order=1)
+<crop>
+<resize>
+<denoise>
+
+ Lanczos
+ MinimalNoise
+ false
+ false
+ false
+ false
+ true
+ false
+
+
+ 4
+ 1200
+ 250
+ 2
+ 1
+ 31
+ true
+ false
+ true
+ true
+ 15
+
+ XVID
+ DIVX
+ DX50
+ MP4V
+
+ .stats
+
+
+ 0
+ 2
+ 1
+ 1200
+ 6
+ 4
+ 1
+ 31
+ 1
+ 31
+ 162
+ 0
+ 100
+ 1
+ 20
+ 5
+ 5
+ 5
+ 30
+ 15
+ 16
+ 100
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ false
+ false
+ true
+ true
+ true
+ true
+ false
+ true
+ false
+ 0
+ H.263
+
+ 1
+
+ $final_output$
+
+ false
+
+
+
+
+ $jobname$
+ WAITING
+ 0001-01-01T00:00:00
+ 0001-01-01T00:00:00
+
\ No newline at end of file
diff --git a/src/create_jobs.py b/src/create_jobs.py
deleted file mode 100644
index b6629dd..0000000
--- a/src/create_jobs.py
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Andreas Balogh
-# See LICENSE for details.
-
-""" create MeGUI jobs for Panasonic MPG files """
-
-# system imports
-
-import logging
-import sys
-import os
-import getopt
-
-# local imports
-
-# constants
-
-# globals
-
-LOG = logging.getLogger()
-
-logging.basicConfig(level=logging.DEBUG,
- format="%(asctime)s %(levelname).3s %(process)d:%(thread)d %(message)s",
- datefmt="%H:%M:%S")
-
-# definitions
-
-class Usage(Exception):
- pass
-
-class Error(Exception):
- pass
-
-def main(argv = [__name__]):
- try:
- # check for parameters
- LOG.debug("starting '%s %s'", argv[0], " ".join(argv[1:]))
- script_name = os.path.basename(argv[0])
- try:
- opts, args = getopt.getopt(argv[1:], "hfgp", \
- ["help", "force", "gui", "preview"])
- except getopt.error, err:
- raise Usage(err)
- LOG.debug("opts: %s, args: %s", opts, args)
- o_overwrite = False
- o_gui = False
- o_preview = False
- for o, a in opts:
- if o in ("-h", "--help"):
- usage(script_name)
- return 0
- elif o in ("-f", "--force"):
- o_overwrite = True
- elif o in ("-p", "--preview"):
- o_preview = True
- elif o in ("-g", "--gui"):
- o_gui = True
- if len(args) == 2:
- src_dir = args[0]
- dest_dir = args[1]
- elif len(args) == 1 :
- src_dir = args[0]
- dest_dir = args[0]
- elif len(args) == 0 :
- src_dir = None
- dest_dir = None
- o_gui = True
- else:
- raise Usage("more than two arguments provided")
- # call method with appropriate arguments
- if src_dir and not os.path.exists(src_dir):
- raise Error("Source directory not found [%s], aborting" % (src_dir, ))
- if dest_dir and not os.path.exists(dest_dir):
- LOG.warn("Destination directory not found [%s]", dest_dir)
- if not o_preview:
- LOG.info("Creating destination directory [%s]", dest_dir)
- os.makedirs(dest_dir)
- if o_gui:
- gui(src_dir, dest_dir, o_overwrite)
- else:
- cli(src_dir, dest_dir, o_preview, o_overwrite)
- LOG.debug("Done.")
- return 0
- except Error, err:
- LOG.error(err)
- return 1
- except Usage, err:
- LOG.error(err)
- LOG.info("for usage use -h or --help")
- return 2
-
-
-def gui(src_dir, dest_dir, o_overwrite):
- """ graphical user interface """
- print src_dir, dest_dir, o_overwrite
-
-
-def cli(src_dir, dest_dir, o_preview, o_overwrite):
- """ command line interface """
- print src_dir, dest_dir, o_preview, o_overwrite
-
-
-def usage(script_name):
- print
- print "usage: %s [options] [src_dir [dest_dir]]" % (script_name,)
- print """
- src_dir source directory to search for MOD/MOI
- dest_dir destination directory for MPG files
-options:
- -h, --help show this help message and exit
- -f, --force override files with same name in destination directory
- -g, --gui force interactive mode
- -p, --preview preview only, don't copy, don't create non-existent directories
-"""
-
-
-if __name__ == "__main__":
- sys.exit(main(sys.argv))
-
\ No newline at end of file