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_VERSION">python 2.5</pydev_property>
|
||||||
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
|
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
|
||||||
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
|
<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>
|
<path>/sandbox/src</path>
|
||||||
</pydev_pathproperty>
|
</pydev_pathproperty>
|
||||||
</pydev_project>
|
</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