I thought I'd post my emby post-processing dvr script. Tested and working on Debian Linux 8.9
Files processed end up being named *originalvideoname*.ts.mkv so i can search by that and make sure recordings have no issues. After I look at them, I manually rename to just .mkv. I do not have automatically convert recordings checked or the two preserve boxes checked under live tv --> settings.
- see if lockfile exists. if so wait 60 sec
- create lockfile
- commerical scan and commerical cutting
- ccextractor to pull out closed captions and convert to srt file
- Encode to h264 using ffmpeg and combine in srt file from previous step
- Trim off first 60 sec from recording (due to iptv delay you get a minute from previous show. I have recordings set to last 1 min longer in emby record. The shows using my OTA tuners start early by 1 min to compensate)
- Remove srt/extra files
- Overwrite original ts recording
- delete lockfile
Depends on: comskip, comcut (comchap optional), ccextractor, ffmpeg
I eventually want to fool around with a nvidia gtx 1050 and see how nevnc with hevc/h265 works on the ffmpeg encoding line. Software h265 encoding on very fast saves an additional 30-40% space on same setting as h264 on medium but my encoding framerate goes from 420fps (14x) to 69fps (2.3x) on dual Xeon e5-2670s. The picture looks pretty much identical when i look at them side by side
post.sh emby script
#!/bin/csh set path = ($path /usr/local/bin) set lockFile = '/tmp/dvrProcessing.lock' set origFile = "$1" set tmpFile = "$1.tmp" set tmpEncode = "$1.mkv" set tmpEncode2 = "$1.2.mkv" set tmpSrt = "$1.srt" set dvrPostLog = '/path/to/embydvr/dvrProcessing.log' set dvrLockLog = '/path/to/embydvr/dvrLock.log' #Wait if post processing is already running while ( -f $lockFile ) echo "'$lockFile' exists, sleeping processing of '$origFile'" | tee $dvrLockLog sleep 60 end #Create lock file to prevent other post-processing from running simultaneously echo "Creating lock file for processing '$origFile'" | tee -a $dvrPostLog touch $lockFile #Mark and cut commercials echo "cut from '$origFile'" | tee -a $dvrPostLog /path/to/embydvr/comchap/comcut --lockfile=/tmp/comchap.lock --comskip-ini=/path/to/embydvr/comskip.ini "$origFile" #Pull CC from file to SRT file echo "Pulling Closed captions from '$origFile' to SRT file" | tee -a $dvrPostLog ccextractor "$origFile" -o "$tmpSrt" #Encode file to H.264 with mkv container using ffmpeg and mux in CC srt echo "Re-encoding '$origFile' to MKV file while adding cc data" | tee -a $dvrPostLog /usr/bin/ffmpeg -i "$origFile" -i "$tmpSrt" -map 0 -map 1 -acodec copy -scodec copy -c:v libx264 -preset medium -crf 23 -profile:v high -level 4.1 -deinterlace "$tmpEncode" #Trim off first minute echo "Remove first 60 sec of file" | tee -a $dvrPostLog /usr/bin/ffmpeg -ss 00:01:00 -i "$tmpEncode" -vcodec copy -acodec copy -scodec copy "$tmpEncode2" #Remove SRT file echo "Remove SRT file" | tee -a $dvrPostLog rm -f "$tmpSrt" #Remove tmpEncode file echo "Remove tmpEncode file" | tee -a $dvrPostLog rm -f "$tmpEncode" #Rename transcoded file to temp file in case no subtitles echo "Rename 2nd transcoded file to tmp file" | tee -a $dvrPostLog mv -f "$tmpEncode2" "$tmpFile" #Overwrite original ts file with the transcoded file echo "Removing '$origFile'" | tee -a $dvrPostLog mv -f "$tmpFile" "$origFile" #Rename .ts file to .ts.mkv echo "Renaming '$origFile' to .mkv" | tee -a $dvrPostLog mv -f "$origFile" "$1.mkv" #Remove lock file echo "Done processing '$origFile' removing lock" | tee -a $dvrPostLog rm $lockFile exit 0
Edited by ShotToTheDome, 03 September 2017 - 04:35 PM.