initial checkin

--HG--
branch : sandbox
This commit is contained in:
Andreas
2009-12-13 22:00:50 +00:00
parent 2a8a3db6e8
commit e985f59bb9
2 changed files with 137 additions and 3 deletions

View File

@@ -6,9 +6,6 @@
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.5</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
<path>/sandbox/mpg2xvid</path>
<path>/sandbox/megui</path>
<path>/sandbox/gui</path>
<path>/sandbox/src</path>
</pydev_pathproperty>
</pydev_project>

137
src/misc/tv-archiv.py Normal file
View File

@@ -0,0 +1,137 @@
# (c) 2009 Andreas Balogh
# see LICENCE for details
import os
import subprocess as sp
import logging
import re
import datetime
import sys
import shutil
LOG = logging.getLogger()
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname).4s %(process)d:%(thread)d %(message)s',
datefmt='%H:%M:%S')
TV_REC_DIR = r"C:\Dokumente und Einstellungen\All Users\Dokumente\TV-Aufzeichnungen"
MPG_DIR = r"C:\Dokumente und Einstellungen\Andreas\Eigene Dateien\Archiv"
ARCHIV_DIR = r"C:\Dokumente und Einstellungen\All Users\Dokumente\Eigene Videos\Archiv"
VIDEO_DIR = r"C:\Dokumente und Einstellungen\All Users\Dokumente\Eigene Videos"
DVRMS2MPG = r"C:\Programme\DVRMSToolbox\DVRMStoMPEG.exe"
VIRTUALDUB = r"C:\Apps\VirtualDub\VirtualDub.exe"
ARCHIVE_DELAY = datetime.timedelta(days = 30)
SERIES_DELAY = datetime.timedelta(days = 3)
def main():
""" compress files older than n days """
# select files and sort by creation datetime
find_archive("Pettersson und Findus")
find_archive("Die Sendung mit der Maus")
find_archive("Die Sendung mit dem Elefanten")
files = find_dvrms(min_age = ARCHIVE_DELAY)
archive(files)
def find_archive(glob):
LOG.info("find & archive '%s'...", glob)
re = "(%s.*)\.dvr-ms" % (glob, )
files = find_dvrms(pattern = re, min_age = SERIES_DELAY)
archive(files, target = glob)
def find_dvrms(pattern = "(.*)\.dvr-ms", min_age = None):
files = []
dvrms_reo = re.compile(pattern)
for dvrms_fn in os.listdir(TV_REC_DIR):
dvrms_fp = os.path.join(TV_REC_DIR, dvrms_fn)
if not os.path.isfile(dvrms_fp):
continue
# file is a dvr-ms
mo = dvrms_reo.match(dvrms_fn)
if not mo:
continue
unix_ctime = os.stat(dvrms_fp).st_ctime
dt_ctime = datetime.datetime.fromtimestamp(int(unix_ctime))
# file older than min_age
if min_age is not None:
if datetime.datetime.now() < dt_ctime + min_age:
continue
files.append((dt_ctime, dvrms_fn))
return files
def archive(files, target = "Archiv"):
# archive now
dvrms_reo = re.compile("(.*)\.dvr-ms")
files.sort(cmp=lambda x,y: cmp(x[0], y[0]), reverse=False)
for dt_ctime, dvrms_fn in files:
print dt_ctime.isoformat(" "), dvrms_fn.decode("latin")
dvrms_fp = os.path.join(TV_REC_DIR, dvrms_fn)
file_root = dvrms_reo.match(dvrms_fn).group(1)
mpg_fp = os.path.join(MPG_DIR, file_root + ".mpg")
archiv_dir = os.path.join(VIDEO_DIR, target)
divx_fp = os.path.join(archiv_dir, file_root + ".avi")
if not os.path.isfile(divx_fp):
# convert
if not os.path.isfile(mpg_fp):
tmp_fp = os.path.join(MPG_DIR, file_root + "_tmp.mpg")
dtb_mpg(dvrms_fp, tmp_fp)
os.rename(tmp_fp, mpg_fp)
# compress and archive
tmp_fp = os.path.join(MPG_DIR, file_root + "_tmp.avi")
vdub(mpg_fp, tmp_fp)
# os.rename work on same drive, use shutil.move otherwise
shutil.move(tmp_fp, divx_fp)
# touch divx_fp with dvrms_fp
shutil.copystat(dvrms_fp, divx_fp)
# clean up
os.remove(mpg_fp)
# os.remove(dvrms_fp)
LOG.info("done")
def dtb_mpg(dvrms_fp, mpg_fp):
_if = "/if=%s" % (dvrms_fp, )
_of = "/of=%s" % (mpg_fp, )
args = [DVRMS2MPG, ]
args.append(_if)
args.append(_of)
args.append("/act=dvrmstompg")
LOG.info("\n\r".join(args).decode("latin"))
proc = sp.Popen(args)
proc.wait()
LOG.info("%i", proc.returncode)
return proc.returncode
def dtb_xvid(dvrms_fp, xvid_fp):
_if = "/if=%s" % (dvrms_fp, )
_of = "/of=%s" % (xvid_fp, )
args = [DVRMS2MPG, ]
args.append(_if)
args.append(_of)
args.append("/act=mencoder")
LOG.info("\n\r".join(args).decode("latin"))
proc = sp.Popen(args)
proc.wait()
LOG.info("%i", proc.returncode)
return proc.returncode
def vdub(mpg_fp, divx_fp):
# c:\apps\virtualdub\virtualdub.exe /s "archiv.vcf" /c /p %SRC% %DEST% /r /x
args = [VIRTUALDUB, ]
args.append('/s')
args.append(r"c:\Dokumente und Einstellungen\Andreas\Eigene Dateien\archiv.vcf")
args.append('/c')
args.append('/p')
args.append(mpg_fp)
args.append(divx_fp)
args.append('/r')
args.append('/x')
LOG.info("\n\r".join(args).decode("latin"))
proc = sp.Popen(args)
proc.wait()
LOG.info("%i", proc.returncode)
return proc.returncode
if __name__ == "__main__":
main()