<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hurlster.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Emby</id>
	<title>Emby - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://hurlster.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Emby"/>
	<link rel="alternate" type="text/html" href="https://hurlster.com/wiki/index.php?title=Emby&amp;action=history"/>
	<updated>2026-08-24T19:50:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://hurlster.com/wiki/index.php?title=Emby&amp;diff=2720&amp;oldid=prev</id>
		<title>Gqwill69: Created page with &quot;= DVR Script = Live tv post processing script&lt;br&gt; Emby Settings (Advanced)&lt;br&gt; Post-processing application -&gt; /bin/bash&lt;br&gt; Post-processing command line arguments -&gt; /usr/local/sbin/post.sh &quot;{path}&quot;&lt;br&gt;  * /usr/local/sbin/post.sh &lt;pre&gt; #!/bin/bash #Set these values for your setup tmpBase=/tmp/                           # Where recordings are to be moved for processing comProc=comcut                          # comcut or comchap for cut vs chapter marks comskip=/usr/bin/co...&quot;</title>
		<link rel="alternate" type="text/html" href="https://hurlster.com/wiki/index.php?title=Emby&amp;diff=2720&amp;oldid=prev"/>
		<updated>2023-08-30T16:57:34Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= DVR Script = Live tv post processing script&amp;lt;br&amp;gt; Emby Settings (Advanced)&amp;lt;br&amp;gt; Post-processing application -&amp;gt; /bin/bash&amp;lt;br&amp;gt; Post-processing command line arguments -&amp;gt; /usr/local/sbin/post.sh &amp;quot;{path}&amp;quot;&amp;lt;br&amp;gt;  * /usr/local/sbin/post.sh &amp;lt;pre&amp;gt; #!/bin/bash #Set these values for your setup tmpBase=/tmp/                           # Where recordings are to be moved for processing comProc=comcut                          # comcut or comchap for cut vs chapter marks comskip=/usr/bin/co...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= DVR Script =&lt;br /&gt;
Live tv post processing script&amp;lt;br&amp;gt;&lt;br /&gt;
Emby Settings (Advanced)&amp;lt;br&amp;gt;&lt;br /&gt;
Post-processing application -&amp;gt; /bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
Post-processing command line arguments -&amp;gt; /usr/local/sbin/post.sh &amp;quot;{path}&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* /usr/local/sbin/post.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#Set these values for your setup&lt;br /&gt;
tmpBase=/tmp/                           # Where recordings are to be moved for processing&lt;br /&gt;
comProc=comcut                          # comcut or comchap for cut vs chapter marks&lt;br /&gt;
comskip=/usr/bin/comskip                # In case you put it somewhere emby won&amp;#039;t look&lt;br /&gt;
ffmpegProc=/usr/bin/ffmpeg              # Use system ffmpeg if run manually&lt;br /&gt;
svcUser=emby                            # Who is the emby service running as&lt;br /&gt;
tgtRatio=13                             # H265 w/comcut 18~20% of original, H264 20~22%&lt;br /&gt;
                                        # Pick a number just under the target&lt;br /&gt;
origFile=&amp;quot;$1&amp;quot;&lt;br /&gt;
tmpFile=&amp;quot;$origFile.tmp&amp;quot;&lt;br /&gt;
tgtFile=&amp;quot;${origFile%.*}.mp4&amp;quot;&lt;br /&gt;
tmpEncode=&amp;quot;$origFile.mp4&amp;quot;&lt;br /&gt;
tmpEncode2=&amp;quot;$origFile.2.mp4&amp;quot;&lt;br /&gt;
tmpSrt=&amp;quot;$origFile.srt&amp;quot;&lt;br /&gt;
dvrPostLog=&amp;#039;/var/log/dvrProcessing.log&amp;#039;&lt;br /&gt;
dvrLockLog=&amp;#039;/var/log/dvrLock.log&amp;#039;&lt;br /&gt;
lockFile=&amp;#039;/tmp/dvrProcessing.lock&amp;#039;&lt;br /&gt;
&lt;br /&gt;
failed=1&lt;br /&gt;
((tryCount=3))&lt;br /&gt;
&lt;br /&gt;
#Check to see if the emby server called this and use the correct ffmpeg&lt;br /&gt;
if [ &amp;quot;$USER&amp;quot; = &amp;quot;$svcUser&amp;quot; ];&lt;br /&gt;
then&lt;br /&gt;
        echo &amp;quot;Running inside of emby as $USER&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
        ffmpegProc=/opt/emby-server/bin/ffmpeg&lt;br /&gt;
        #ffmpegProc=/usr/bin/ffmpeg&lt;br /&gt;
        echo -e &amp;quot;Moving $origFile to $tmpBase&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
        mv &amp;quot;$origFile&amp;quot; &amp;quot;$tmpBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        tgtTemp=`echo $origFile |sed &amp;quot;s|.*\/\(.*\)$|\1|&amp;quot;`&lt;br /&gt;
#        origDir=`echo $origFile |sed &amp;quot;s|\(.*\)$tgtTemp$|\1|&amp;quot;`&lt;br /&gt;
        origDir=$(dirname &amp;quot;$origFile&amp;quot;)&lt;br /&gt;
        origFile=&amp;quot;$tmpBase$tgtTemp&amp;quot;&lt;br /&gt;
        tmpFile=&amp;quot;$origFile.tmp&amp;quot;&lt;br /&gt;
        tgtFile=&amp;quot;${origFile%.*}.mp4&amp;quot;&lt;br /&gt;
        tmpEncode=&amp;quot;$origFile.mp4&amp;quot;&lt;br /&gt;
        tmpEncode2=&amp;quot;$origFile.2.mp4&amp;quot;&lt;br /&gt;
        tmpSrt=&amp;quot;$origFile.srt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#Get Source file size&lt;br /&gt;
origFilesize=`stat -c %s &amp;quot;$origFile&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
#Wait if post processing is already running&lt;br /&gt;
while [ -f $lockFile ] ;&lt;br /&gt;
do&lt;br /&gt;
    echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` &amp;#039;$lockFile&amp;#039; exists, sleeping processing of &amp;#039;$origFile&amp;#039;&amp;quot; | tee $dvrLockLog&lt;br /&gt;
    sleep 60&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
#Create lock file to prevent other post-processing from running simultaneously&lt;br /&gt;
echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` Creating lock file for processing &amp;#039;$origFile&amp;#039;&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
touch $lockFile&lt;br /&gt;
&lt;br /&gt;
#Mark and cut commercials&lt;br /&gt;
if [ &amp;quot;$comProc&amp;quot; = &amp;quot;comcut&amp;quot; ];&lt;br /&gt;
then&lt;br /&gt;
        echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` Cut commercials from &amp;#039;$origFile&amp;#039;&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
        $comProc --lockfile=/tmp/comchap.lock --comskip-ini=/etc/comskip.ini --comskip=$comskip --comskip=$comskip &amp;quot;$origFile&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#Pull CC from file to SRT file&lt;br /&gt;
#echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` Pulling Closed captions from &amp;#039;$origFile&amp;#039; to SRT file&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
#/usr/bin/ccextractor &amp;quot;$origFile&amp;quot; -o &amp;quot;$tmpSrt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#Encode file to H.265/HEVC with NVIDIA HW as mp4 using ffmpeg&lt;br /&gt;
echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` Re-encoding &amp;#039;$origFile&amp;#039; to mp4 file&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
while [ $tryCount -ne 0 ]&lt;br /&gt;
do&lt;br /&gt;
         echo -e &amp;quot;$ffmpegProc -nostdin -hide_banner -hwaccel_output_format cuda -i &amp;quot;$origFile&amp;quot; -ignore_unknown -acodec copy -scodec copy -c:v hevc_nvenc -preset medium &amp;quot;$tgtFile&amp;quot;&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
         #$ffmpegProc -nostdin -hide_banner -hwaccel_output_format cuda -i &amp;quot;$origFile&amp;quot; -ignore_unknown -acodec copy -scodec copy -c:v hevc_nvenc -preset medium &amp;quot;$tgtFile&amp;quot;&lt;br /&gt;
         $ffmpegProc -nostdin -hide_banner -hwaccel_output_format cuda -i &amp;quot;$origFile&amp;quot; -ignore_unknown -acodec copy -scodec copy -c:v hevc_nvenc -preset medium &amp;quot;$tgtFile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        if [[ $? -ne 0 || ! -s &amp;quot;$tgtFile&amp;quot; ]];&lt;br /&gt;
        then&lt;br /&gt;
                rm -f &amp;quot;$tgtFile&amp;quot;&lt;br /&gt;
                echo &amp;quot;Trying $tryCount more time(s)...&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
                ((tryCount=tryCount-1))&lt;br /&gt;
                sleep 15&lt;br /&gt;
        else&lt;br /&gt;
                ((tryCount=0))&lt;br /&gt;
                failed=0&lt;br /&gt;
        fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
if [ $failed -eq 1 ];&lt;br /&gt;
then&lt;br /&gt;
        echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` Re-encoding &amp;#039;$origFile&amp;#039; to mp4 file failed!&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
        echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` Moving &amp;quot;$origFile&amp;quot;* to &amp;quot;$origDir&amp;quot; &amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
        mv   &amp;quot;$origFile&amp;quot; &amp;quot;$origDir&amp;quot;     #Conversion failed&lt;br /&gt;
&lt;br /&gt;
        #Remove lock file&lt;br /&gt;
        echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` Done processing &amp;#039;$origFile&amp;#039; removing lock&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
        rm -f $lockFile&lt;br /&gt;
&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#Trim off first minute&lt;br /&gt;
#echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` Remove first 60 sec of file&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
#/opt/emby-server/bin/ffmpeg -ss 00:01:00 -i &amp;quot;$tmpEncode&amp;quot; -vcodec copy -acodec copy -scodec copy &amp;quot;$tmpEncode2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#Remove SRT file&lt;br /&gt;
#echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` Remove SRT file&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
#rm -f &amp;quot;$tmpSrt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Calculate mp4 size&lt;br /&gt;
if [ -f &amp;quot;$tgtFile&amp;quot; ];&lt;br /&gt;
then&lt;br /&gt;
        newFilesize=`stat -c %s &amp;quot;$tgtFile&amp;quot;`&lt;br /&gt;
        mp4ratio=$(( 100*&amp;quot;$newFilesize&amp;quot;/&amp;quot;$origFilesize&amp;quot; ))&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#Delete .ts file h265 mp4 is typically 18~20% original&lt;br /&gt;
if [[ $failed -eq 0 &amp;amp;&amp;amp; $mp4ratio -ge $tgtRatio ]];&lt;br /&gt;
then&lt;br /&gt;
        #Mark commercials as chapters, must be done after conversion to mp4&lt;br /&gt;
        if [ &amp;quot;$comProc&amp;quot; = &amp;quot;comchap&amp;quot; ];&lt;br /&gt;
        then&lt;br /&gt;
                echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` cut from &amp;#039;$origFile&amp;#039;&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
                mv &amp;quot;$tgtFile&amp;quot; &amp;quot;$tgtFile&amp;quot;-tmp.mp4&lt;br /&gt;
                $comProc --verbose --lockfile=/tmp/comchap.lock --comskip-ini=/etc/comskip.ini &amp;quot;$tgtFile&amp;quot;-tmp.mp4  &amp;gt; /tmp/comchap.log&lt;br /&gt;
                #Comchap seems to have a knack for minor corruption that prtevents playing. Quick repair&lt;br /&gt;
                $ffmpegProc -i &amp;quot;$tgtFile&amp;quot;-tmp.mp4 -c copy &amp;quot;$tgtFile&amp;quot;&lt;br /&gt;
                rm -f &amp;quot;$tgtFile&amp;quot;-tmp.mp4&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        #mv   &amp;quot;$origFile&amp;quot; &amp;quot;$origFile&amp;quot;-orig | tee -a $dvrPostLog #backup copy&lt;br /&gt;
&lt;br /&gt;
        if [ &amp;quot;$USER&amp;quot; = &amp;quot;$svcUser&amp;quot; ];            #Don&amp;#039;t move Season/series if running manually&lt;br /&gt;
        then&lt;br /&gt;
                echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` Moving &amp;quot;$tgtFile&amp;quot; to &amp;quot;$origDir/&amp;quot; &amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
                #mv &amp;quot;$origFile-orig&amp;quot; &amp;quot;$origDir&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
                mv &amp;quot;$tgtFile&amp;quot; &amp;quot;$origDir&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
                echo -e &amp;quot;Removing $origFile&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
                rm &amp;quot;$origFile&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#Remove lock file&lt;br /&gt;
echo &amp;quot;`date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;` Done processing &amp;#039;$origFile&amp;#039; removing lock&amp;quot; | tee -a $dvrPostLog&lt;br /&gt;
rm -f $lockFile&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gqwill69</name></author>
	</entry>
</feed>