Skip to content

Instantly share code, notes, and snippets.

Last active Apr 5, 2016
What would you like to do?
TVHeadend Python PostProcessing script
Author: ckarrie <>
Python PostProcessing script that deletes all duplicate recordings according to their
description and filesize. The script keeps the recording with the largest filesize.
1) put this python file somewhere (i.e. /media/daten/tvheadend/
2) Add this line to TVHeadend > Configuration > Recording > [your recording settings] > Post-processor command
replace <path/to/this/file/> according to Point 1)
/usr/bin/python2.7 /media/daten/tvheadend/ "%f" "%d"
3) Record something with this recording settings
import sys, os
import shutil
import re
import syslog
_p = "[TVH PP] "
#TVH_HOST = ""
#TVH_PORT = 9981
args = sys.argv
current_recording_file = args[1]
current_description_file = current_recording_file + '.txt'
current_description = args[2]
descriptionfile = open(current_recording_file + ".txt", "w")
dvr_folder, dvr_filename = os.path.split(current_recording_file)
same_description = {}
print("Scanning DVR folder", dvr_folder)
syslog.syslog(_p + 'Start processing in %s' % dvr_folder)
for root, dirs, files in os.walk(dvr_folder):
syslog.syslog(_p + 'Walking through %s' % root)
for name in files:
full_filename = os.path.join(root, name)
if name.endswith('.mkv'):
syslog.syslog(_p + 'Checking %s' % full_filename)
full_txt_filename = full_filename + '.txt'
if os.path.exists(full_txt_filename):
description_f = open(full_txt_filename, 'r')
description =
description_shortened = description[:100]
if description_shortened not in same_description.keys():
same_description[description_shortened] = [full_filename]
print("Missing description file %s, ignoring..." % full_txt_filename)
for descr, files in same_description.items():
print(" >%s< has %d file(s)" %(descr[:50], len(files)))
largest_size = 0
largest_size_filename = ''
for f in files:
size = os.path.getsize(f)
if size > largest_size:
largest_size = size
largest_size_filename = f
if largest_size and largest_size_filename and (len(files) > 1):
for fname in files:
if fname != largest_size_filename:
print(" - Removing", fname)
os.remove(fname + '.txt')
syslog.syslog(_p + "All done")
Copy link

ckarrie commented Jun 2, 2014

TODO: delete those database entries if file is missing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment