initial checkin
--HG-- branch : sandbox
This commit is contained in:
@@ -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
137
src/misc/tv-archiv.py
Normal 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()
|
||||
Reference in New Issue
Block a user