Created
May 27, 2017 11:40
-
-
Save Aikhjarto/8182317e31c86007296caa643e894841 to your computer and use it in GitHub Desktop.
Automatically demux VDR recordings
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# This script searched for *.ts files recursivly in $SRC_DIR. Then it demuxes the files with ProjectX to $DST_DIR whilest maintaining the folder structure. | |
# This us useful if mpeg files are post-processed with ttcutter or cuttermaran | |
# TODO: projectx.sh doesn't work with spaces in filenames. I found no way to espace them to make it work. | |
# Thomas Wagner 2014 [email protected] | |
# for loop only breaks at linefeed (otherwise space in filename won't work) | |
IFS=$'\012' | |
SRC_DIR="/var/spool/vdr" | |
DST_DIR="/scratch/vdr_demux" | |
set -o errexit | |
set -o nounset | |
set -o pipefail | |
# remove recordings (folders matching *.rec) from $DST_DIR that are no longer in $SRC_DIR | |
# catch error if $SRC_DIR is not readable (would purge output completely) | |
find "$SRC_DIR" -type d -name "*.rec" -printf '%P\n' | sort > "$DST_DIR"/src_recs | |
find "$DST_DIR" -type d -name "*.rec" -printf '%P\n' | sort > "$DST_DIR"/dst_recs | |
# this is necessary because errexit won't stop this script when error in "find" occur as stdin of comm | |
pushd "$DST_DIR" | |
echo "recordings purged from $DST_DIR" | |
comm -23 dst_recs src_recs | |
comm -23 dst_recs src_recs | xargs rm -rf | |
echo "done purging" | |
popd | |
# remove empty folders (Timers with no recordings) [doesnt' work right now] error is find: ‘/scratch/vdr_demux/bla’: No such file or directory | |
echo "purge empty dirs" | |
sync | |
find "$DST_DIR" -type d -empty | |
find "$DST_DIR" -type d -empty -exec rmdir {} \; | |
echo "done purging" | |
# loop over all recordings (folder that match *.rec) | |
# sort is just for style. Ensures processing is done in alphabetical order. | |
for REC in $(find "$SRC_DIR" -type d -name "*.rec" -printf '%P\n' | grep -v \#copied | sort); | |
do | |
# $REC is something like test/2015-01-24.10.16.15-0.rec | |
# define output folder | |
OUT_DIR="$DST_DIR/$REC" | |
# log file is the last file to be written, if it's there, demuxing is finished | |
if [ -f "$OUT_DIR"/00001_log.txt ]; then | |
echo "$REC was already processed" | |
else | |
# TODO check if vdr is still writing | |
# svdrpsend NEXT rel return 250 15 -23, where 250 if success status, 15 the timer number and -23 the relative time in seconds. If rel time is negative, a record 15 is running. | |
if [ -z $(svdrpsend NEXT rel | grep 250 | awk '{ print $3 }' | grep "-") ]; then | |
# check if stream is an mpeg2 stream | |
if ffprobe -i "$SRC_DIR/$REC/00001.ts" 2>&1 | grep Stream | grep -q mpeg2; then | |
echo "Processing $REC to $OUT_DIR" | |
if [ -d "$OUT_DIR" ]; then | |
# purge directory if it already exists | |
rm -rf "$OUT_DIR" | |
fi | |
mkdir -p "$OUT_DIR" | |
# start projectx | |
nice -n 9 projectx.sh -log -demux -ini "$SRC_DIR"/ProjectX.ini -out "$OUT_DIR" "$SRC_DIR/$REC"/*.ts 2>&1 > "$OUT_DIR"/stdout | |
else | |
echo "$REC does not contain an mpeg2 stream" | |
fi | |
else | |
echo "Skip demuxing $REC, VDR is recording" | |
fi | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment