Plex DVR & Commercial Skipping with Comskip

bollar

Patron
Joined
Oct 28, 2012
Messages
411
Plex DVR is now in PlexPass beta, using HDHomeRun tuners. It works well and finally brings OTA and cable TV directly into Plex.

Plex is capable of allowing the downloaded programs to be post-processed - the most obvious use of which is using COMSKIP to strip or mark commercials. Has anyone been able to compile comskip into FreeBSD? Seems like FreeNAS/Plex would be the killer DVR if we could work this out.

http://www.kaashoek.com/comskip/
 

bollar

Patron
Joined
Oct 28, 2012
Messages
411
Not yet. I'm waiting for Plex to stabilize before I try. It'll take me forever to get the config right since I don't mess around at the command line very often.
 

Bmck26

Dabbler
Joined
Dec 9, 2013
Messages
48
Has anyone posted a decent guide to install Plex Beta in a standard jail? I would like to install it into a separate jail from my current stable plugin version. I found a post in the plex forums but it is very convoluted and I could follow it.
 

bollar

Patron
Joined
Oct 28, 2012
Messages
411
Now that Beta 3 has been released and the post-processing command-line option added to the GUI, I tried compiling Comskip and wound up at the following error when I ran out of time:
Code:
root@comskiptest:/Comskip # ./autogen.sh

Preparing the Comskip build system...please wait


Found GNU Autoconf version 2.69

Found GNU Automake version 1.15

Found GNU Libtool version 2.4.6


Automatically preparing build ... done


The Comskip build system is now prepared.  To build here, run:

  ./configure

  make

root@comskiptest:/Comskip #  ./configure

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

checking for a thread-safe mkdir -p... ./install-sh -c -d

checking for gawk... no

checking for mawk... no

checking for nawk... nawk

checking whether make sets $(MAKE)... yes

checking whether make supports nested variables... yes

checking for gcc... no

checking for cc... cc

checking whether the C compiler works... yes

checking for C compiler default output file name... a.out

checking for suffix of executables... 

checking whether we are cross compiling... no

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether cc accepts -g... yes

checking for cc option to accept ISO C89... none needed

checking whether cc understands -c and -o together... yes

checking for style of include used by make... GNU

checking dependency style of cc... gcc3

checking for fmax in -lm... yes

checking for sem_post in -lpthread... yes

checking build system type... amd64-unknown-freebsd10.3

checking host system type... amd64-unknown-freebsd10.3

checking whether host is win32... no

checking whether host is darwin... no

checking whether to enable donator features... yes

checking whether to build a statically linked binary... no

checking whether to build with debugging options enabled... no

checking for pkg-config... /usr/local/bin/pkg-config

checking pkg-config is at least version 0.9.0... yes

checking for argtable2... no

configure: error: Package requirements (argtable2 >= 2.12) were not met:


Package argtable2 was not found in the pkg-config search path.

Perhaps you should add the directory containing `argtable2.pc'

to the PKG_CONFIG_PATH environment variable

Package 'argtable2', required by 'world', not found


Consider adjusting the PKG_CONFIG_PATH environment variable if you

installed software in a non-standard prefix.


Alternatively, you may set the environment variables argtable2_CFLAGS

and argtable2_LIBS to avoid the need to call pkg-config.

See the pkg-config man page for more details.

root@comskiptest:/Comskip # pkg-config --variable pc_path pkg-config

/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig

root@comskiptest:/Comskip # pkg-config --define-variable=pc_path=/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig:/argtable/argtable2-13 pkg-config

root@comskiptest:/Comskip # pkg-config --variable pc_path pkg-config

/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig

root@comskiptest:/Comskip # 



I know there are issues with using pkg-config with FreeBSD, so maybe that's the source of the problem? I won't have time to mess with it again before the weekend.

Also, FYI, I did try installing Ubuntu in a VirtualBox. This installed okay, but wound up throwing a kernel panic while Comskip was running.
 
Last edited:

bollar

Patron
Joined
Oct 28, 2012
Messages
411
Okay, with help from a lot of people, I have Comskip compiled in the jail and successfully automatically processing the files for Plex. I will write-up the documentation this weekend.
 
Joined
Sep 24, 2015
Messages
7
I'm looking forward to your findings. I've yet been able to find the secret sauce to allow this to work efficiently.
 

bollar

Patron
Joined
Oct 28, 2012
Messages
411
Comskip install for FreeNAS Jail:

Just in case something gets messed up, take a snapshot of your Plex jail. This is a rough version - I don’t know if I will clean up the scripts or not, but this one works “as-is” for me.

Note: Files must be in .ts format (don't remux or transcode in plex)

SSH into the jail

Code:
sudo jexec plexmediaserver_1


Download prerequisite packages:

Code:
pkg update
pkg install wget
pkg install unzip
pkg install autoconf
pkg install automake
pkg install libtool
pkg install argtable
pkg install nano
pkg install ffmpeg
pkg install bash
pkg install gcc5
pkg install git


Change pkg-config references to pkgconf and install pkgconf

Code:
pkg set -o devel/pkg-config:devel/pkgconf
pkg install -f devel/pkgconf


Configure argtable2, as per the instructions provided by buggystick @ http://www.kaashoek.com/comskip/viewtopic.php?p=8206#p8206

Code:
nano /usr/local/libdata/pkgconfig/argtable2.pc


Paste the following into /usr/local/libdata/pkgconfig/argtable2.pc

Code:
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: argtable2
Description: A library for parsing GNU style command line arguments
Version: 2.13

Libs: -L${libdir} -largtable2
Cflags: -I${includedir}


Set environment variable to change default compiler from clang to gcc:

Code:
setenv CC gcc5


Get the current version of Comskip from https://github.com/erikkaashoek/Comskip

Code:
mkdir comskiplinux
cd comskiplinux
wget https://github.com/erikkaashoek/Comskip/archive/master.zip


Unzip into its own directory. (This creates /comskiplinux/Comskip-master/ - I decided not to move anything out of this directory.)

Code:
unzip master.zip
cd Comskip-master


Compile Comskip

Code:
./autogen.sh
./configure
make


Create comskip.ini

Code:
nano /comskiplinux/Comskip-master/comskip.ini


Paste the following into comskip.ini - this is my ini file. It’s not perfect and tweaking the file is beyond the scope of these instructions

Code:
; See comskip.txt in the distribution zip file for many settable parameters, read manual.html, tuning.html and debugwindow.html for how to tune and debug comskip
detect_method=43			;1=black frame, 2=logo, 4=scene change, 8=fuzzy logic, 16=closed captions, 32=aspect ration, 64=silence, 128=cutscenes, 255=all
validate_silence=1			; Default, set to 0 to force using this clues if selected above.
validate_uniform=1			; Default, set to 0 to force using this clues (like pure white frames) if blackframe is selected above.
validate_scenechange=1		; Default, set to 0 to force using this clues if selected above.
verbose=10				;show a lot of extra info, level 5 is also OK, set to 0 to disable
max_brightness=60				  ;frame not black if any pixels checked are greater than this (scale 0 to 255)
test_brightness=40			  ;frame not pure black if any pixels checked are greater than this, will check average brightness (scale 0 to 255)
max_avg_brightness=25			;maximum average brightness for a dim frame to be considered black (scale 0 to 255) 0 means autosetting
max_commercialbreak=600		 ;maximum length in seconds to consider a segment a commercial break
min_commercialbreak=25			;minimum length in seconds to consider a segment a commercial break
max_commercial_size=125			;maximum time in seconds for a single commercial or multiple commercials if no breaks in between
min_commercial_size=4		   ;mimimum time in seconds for a single commercial
min_show_segment_length=250	 ; any segment longer than this will be scored towards show.
non_uniformity=500			; Set to 0 to disable cutpoints based on uniform frames
max_volume=0				; any frame with sound volume larger than this will not be regarded as black frame
min_silence=12				; Any deep silence longer than this amount  of frames is a possible cutpoint
ticker_tape=0				; Amount of pixels from bottom to ignore in all processing
logo_at_bottom=0			; Set to 1 to search only for logo at the lower half of the video, do not combine with subtitle setting
punish=0					; Compare to average for sum of 1=brightness, 2=uniform 4=volume, 8=silence, 16=schange, set to 0 to disable
punish_threshold=1.3		; Multiply when amount is above average * punish_threshold
punish_modifier=2			; When above average * threshold multiply score by this value
intelligent_brightness=1		 ; Set to 1 to use a USA specific algorithm to tune some of the settings, not adviced outside the USA
logo_percentile=0.92			; if more then this amount of logo is found then logo detection will be disabled
logo_threshold=0.75
punish_no_logo=1			; Default, set to 0 to avoid show segments without logo to be scored towards commercial
aggressive_logo_rejection=0
connect_blocks_with_logo=1		; set to 1 if you want successive blocks with logo on the transition to be regarded as connected, set to 0 to disable
logo_filter=0			   ; set the size of the filter to apply to bad logo detection, 4 seems to be a good value.
cut_on_ar_change=1			; set to 1 if you want to cut also on aspect ratio changes when logo is present, set to 2 to force cuts on aspect ratio changes. set to 0 to disable
delete_show_after_last_commercial=0	; set to 1 if you want to delete the last block if its a show and after a commercial
delete_show_before_or_after_current=0	; set to 1 if you want to delete the previous and the next show in the recording, this can lead to the deletion of trailers of next show
delete_block_after_commercial=0	;set to max size of block in seconds to be discarded, set to 0 to disable
remove_before=0				; amount of seconds of show to be removed before ALL commercials
remove_after=0				; amount of seconds of show to be removed after ALL commercials
shrink_logo=5				; Reduce the duration of the logo with this amount of seconds
after_logo=0		; set to number of seconds after logo disappears comskip should start to search for silence to insert an additional cutpoint
padding=0
ms_audio_delay=5
volume_slip=40
skip_b_frames=0				; Set to 1 to force Comskip to skip frames for higher processing speed.
max_repair_size=200			; Will repair maximum 200 missing MPEG frames in the timeline, set to 0 to disable repairing for players that don't use PTS.
disable_heuristics=4		bit pattern for disabling heuristics, adding 1 disables heristics 1, adding 2 disables heristics 2, adding 4 disables heristics 3, 255  disables all heuristics
delete_logo_file=0			; set to 1 if you want comskip to tidy up after finishing
output_framearray=0			; create a big excel file for detailed analysis, set to 0 to disable
output_data=0				; create a dump of the user data channel, used for CC and XDS (such as V-Chip info). Can be use together with output_framearray to remote debug CC decoding
output_videoredo=0			; The old videoredo format
output_videoredo3=0			; The new videoredo v3 format.
output_womble=0
output_mls=0			; set to 1 if you want MPeg Video Wizard bookmark file output
output_cuttermaran=0
output_mpeg2schnitt=0
output_mpgtx=0
output_dvrcut=0
output_zoomplayer_chapter=0
output_zoomplayer_cutlist=0
output_edl=1
output_dvrmstb=0			; Set to 1 if you're running DVRMS-Toolbox
output_edlx=0
output_vcf=0
output_bsplayer=0
output_btv=0				; set to 1 if you want Beyond TV chapter cutlist output
output_projectx=0			; set to 1 if you want ProjectX cutlist output (Xcl)
output_avisynth=0
output_vdr=0				; set to 1 if you want XBMC to skipping commercials
output_demux=0				; set to 1 if you want comskip to demux the mpeg file while scanning
sage_framenumber_bug=0
sage_minute_bug=0
live_tv=0					; set to 1 if you use parallelprocessing and need the output while recording
live_tv_retries=4			; change to 16 when using live_tv in BTV, used for mpeg PS and TS
dvrms_live_tv_retries=300			; only used for dvr_ms
standoff=0					; change to 8000000 when using live_tv in BTV
cuttermaran_options="cut=\"true\" unattended=\"true\" muxResult=\"false\" snapToCutPoints=\"true\" closeApp=\"true\""
mpeg2schnitt_options="mpeg2schnitt.exe /S /E /R25  /Z %2 %1"
avisynth_options="LoadPlugin(\"MPEG2Dec3.dll\") \nMPEG2Source(\"%s\")\n"
dvrcut_options="dvrcut \"%s.dvr-ms\" \"%s_clean.dvr-ms\" "
windowtitle="Comskip - %s"




Create post.sh [Revised 10/20/16]

Code:
nano /post.sh

To CUT commercials, paste these commands into post.sh:

Code:
#!/bin/csh
# Add bash path to Plex path.
set path = ($path /usr/local/bin)
# Sleep for a pseudorandom period (up to 10 seconds) to limit the number of instances that start at once
sleep `echo $$%10 | bc`
/comchap/comcut --ffmpeg=/usr/local/bin/ffmpeg --comskip=/comskiplinux/Comskip-master/comskip --lockfile=/tmp/comchap.lock --comskip-ini=/comskiplinux/Comskip-master/comskip.ini "$1"



- OR - to MARK commercials, paste these commands into post.sh:

Code:
#!/bin/csh
# Add bash path to Plex path.
set path = ($path /usr/local/bin)
# Sleep for a pseudorandom period (up to 10 seconds) to limit the number of instances that start at once
sleep `echo $$%10 | bc`
/comchap/comchap --ffmpeg=/usr/local/bin/ffmpeg --comskip=/comskiplinux/Comskip-master/comskip --lockfile=/tmp/comchap.lock --comskip-ini=/comskiplinux/Comskip-master/comskip.ini "$1"


Make executable:
Code:
chmod +x /post.sh


git Clone comchap - (Thanks to BrettSheleski for developing the original script) My fork is no longer necessary [Revised 10/20/16]
Code:
cd /
git clone https://github.com/BrettSheleski/comchap


In Plex, go to Settings: Server: DVR (Beta): DVR Settings. Scroll down to “POSTPROCESSING SCRIPT” and paste in:

Code:
/post.sh
 
Last edited:

bollar

Patron
Joined
Oct 28, 2012
Messages
411
Also, some people have reported comskip can crash when compiled with clang. That has not been an issue for me.

It seems to be a common problem. I have updated the instructions to change the compiler from clang to gcc.
 
Last edited:

adrianwi

Guru
Joined
Oct 15, 2013
Messages
1,231
I'll give this a try later in the week. Thanks!
 

bollar

Patron
Joined
Oct 28, 2012
Messages
411
The comchap scripts have been updated to support FreeBSD, so I have created a wrapper script and deprecated my comchap fork.
 
Joined
Sep 24, 2015
Messages
7
Running into this problem, thoughts:

Code:
root@plex:/ # ./post.sh /mnt/Videos/Series/Grey\'s\ Anatomy\ \(2005\)/Season\ 13/Grey\'s\ Anatomy\ \(2005\)\ -\ S13E05\ -\ Both\ Sides\ Now.ts
dirname: illegal option -- -
usage: dirname string [...]
/comchap/comcut: line 96: comskip: command not found
/comchap/comcut: line 108: --ffmpeg=/usr/local/bin/ffmpeg.ffmeta: No such file or directory
/comchap/comcut: line 134: --ffmpeg=/usr/local/bin/ffmpeg.edl: No such file or directory
--comskip=/comskiplinux/Comskip-master/comskip: Command not found.
--comskip-ini=/comskiplinux/Comskip-master/comskip.ini: Command not found.
 

bollar

Patron
Joined
Oct 28, 2012
Messages
411
Running into this problem, thoughts:

Code:
root@plex:/ # ./post.sh /mnt/Videos/Series/Grey\'s\ Anatomy\ \(2005\)/Season\ 13/Grey\'s\ Anatomy\ \(2005\)\ -\ S13E05\ -\ Both\ Sides\ Now.ts
dirname: illegal option -- -
usage: dirname string [...]
/comchap/comcut: line 96: comskip: command not found
/comchap/comcut: line 108: --ffmpeg=/usr/local/bin/ffmpeg.ffmeta: No such file or directory
/comchap/comcut: line 134: --ffmpeg=/usr/local/bin/ffmpeg.edl: No such file or directory
--comskip=/comskiplinux/Comskip-master/comskip: Command not found.
--comskip-ini=/comskiplinux/Comskip-master/comskip.ini: Command not found.
Can you post your post.sh? You could also try entering the file without escaping it - just quotes.
 

jaysonc

Cadet
Joined
Jan 31, 2013
Messages
3
Hi I to am very interested in getting this working & have been trying to follow your guid but the post scrip would returned
Code:
/comchap/comcut: Command not found
& trying to clone comchap would return
Code:
git: Command not found
so I looked on git hub and found https://github.com/BrettSheleski/comchap once I cloned that things go a bit further along but now I get an error that no .edl file was found. Im guessing I missed something & am using the wrong comchap but I looked over the guide you posted again & could not find another. Both the ini & the post script are copied directly from this guide. Any help would be greatly appreciated thank you.

Code:
root@plexmediaserver_1:/ # ./post.sh /mnt/media/dvr/tv/The\ Tonight\ Show\ \(1954\)/Season\ 1981/The\ Tonight\ Show\ \(1954\)\ -\ 1981-05-20\ 00_00_00\ -\ Episode\ 05-20.ts

lockfile: /tmp/comchap.lock

Comskip 0.81.089, made using ffmpeg

Donator build

The commandline used was:

/comskiplinux/Comskip-master/comskip --ini=/comskiplinux/Comskip-master/fcomskip.ini "/mnt/media/dvr/tv/The Tonight Show (1954)/Season 1981/The Tonight Show (1954) - 1981-05-20 00_00_00 - Episode 05-20.ts"


Setting ini file to /comskiplinux/Comskip-master/fcomskip.ini as per commandline

Using /comskiplinux/Comskip-master/fcomskip.ini for initiation values.

/comchap/comcut: line 115: 14709 Bus error			   $comskipPath $comskipoutput --ini="$comskipini" "$infile"

/comchap/comcut: line 158: /mnt/media/dvr/tv/The Tonight Show (1954)/Season 1981/The Tonight Show (1954) - 1981-05-20 00_00_00 - Episode 05-20.edl: No such file or directory
 

bollar

Patron
Joined
Oct 28, 2012
Messages
411
Hi I to am very interested in getting this working & have been trying to follow your guid but the post scrip would returned
Code:
/comchap/comcut: Command not found
& trying to clone comchap would return
Code:
git: Command not found
so I looked on git hub and found https://github.com/BrettSheleski/comchap once I cloned that things go a bit further along but now I get an error that no .edl file was found. Im guessing I missed something & am using the wrong comchap but I looked over the guide you posted again & could not find another. Both the ini & the post script are copied directly from this guide. Any help would be greatly appreciated thank you.
Thanks for finding the git error in the instructions. I'll fix that.

The bus error line 115 suggests that Comskip is crashing and that is a known problem when compiling with clang. You won't get an edl file until this problem is fixed.

You could confirm that you've set the environment to gcc with "setenv CC gcc5" and compile again. If you have done that and still get the bus error, there's a different way to set gcc as the compiler, but I will have to hunt that down for you.
 

jaysonc

Cadet
Joined
Jan 31, 2013
Messages
3
Thanks for finding the git error in the instructions. I'll fix that.

The bus error line 115 suggests that Comskip is crashing and that is a known problem when compiling with clang. You won't get an edl file until this problem is fixed.

You could confirm that you've set the environment to gcc with "setenv CC gcc5" and compile again. If you have done that and still get the bus error, there's a different way to set gcc as the compiler, but I will have to hunt that down for you.

Thank you I had to delete the Comskip-master folder & build it again & that got me a little further. Comskip now runs & says commercials were found but then the next line is the same line 158 error from before.

Code:
root@plexmediaserver_1:/ # ./post.sh /mnt/media/dvr/tv/The\ Tonight\ Show\ \(1954\)/Season\ 1981/The\ Tonight\ Show\ \(1954\)\ -\ 1981-05-20\ 00_00_00\ -\ Episode\ 05-20.ts

lockfile: /tmp/comchap.lock

Comskip 0.81.089, made using ffmpeg

Donator build

The commandline used was:

/comskiplinux/Comskip-master/comskip --ini=/comskiplinux/Comskip-master/fcomskip.ini "/mnt/media/dvr/tv/The Tonight Show (1954)/Season 1981/The Tonight Show (1954) - 1981-05-20 00_00_00 - Episode 05-20.ts"


Setting ini file to /comskiplinux/Comskip-master/fcomskip.ini as per commandline

Using /comskiplinux/Comskip-master/fcomskip.ini for initiation values.

 1:05:51 - 185381 frames in 123.47 sec(1501.43 fps), 1.00 sec(1846.00 fps), 99%

185521 frames decoded in 123.55 seconds (1501.59 fps)

Commercials were found.

/comchap/comcut: line 158: /mnt/media/dvr/tv/The Tonight Show (1954)/Season 1981/The Tonight Show (1954) - 1981-05-20 00_00_00 - Episode 05-20.edl: No such file or directory
 

bollar

Patron
Joined
Oct 28, 2012
Messages
411
Thank you I had to delete the Comskip-master folder & build it again & that got me a little further. Comskip now runs & says commercials were found but then the next line is the same line 158 error from before.
Good!

Can you show me your post.sh? Make sure that
Code:
/comchap/comcut --ffmpeg=/usr/local/bin/ffmpeg --comskip=/comskiplinux/Comskip-master/comskip --lockfile=/tmp/comchap.lock --comskip-ini=/comskiplinux/Comskip-master/comskip.ini "$1"
is all on one line.
 

jaysonc

Cadet
Joined
Jan 31, 2013
Messages
3
Thank you I had to delete the Comskip-master folder & build it again & that got me a little further. Comskip now runs & says commercials were found but then the next line is the same line 158 error from before.

Code:
root@plexmediaserver_1:/ # ./post.sh /mnt/media/dvr/tv/The\ Tonight\ Show\ \(1954\)/Season\ 1981/The\ Tonight\ Show\ \(1954\)\ -\ 1981-05-20\ 00_00_00\ -\ Episode\ 05-20.ts

lockfile: /tmp/comchap.lock

Comskip 0.81.089, made using ffmpeg

Donator build

The commandline used was:

/comskiplinux/Comskip-master/comskip --ini=/comskiplinux/Comskip-master/fcomskip.ini "/mnt/media/dvr/tv/The Tonight Show (1954)/Season 1981/The Tonight Show (1954) - 1981-05-20 00_00_00 - Episode 05-20.ts"


Setting ini file to /comskiplinux/Comskip-master/fcomskip.ini as per commandline

Using /comskiplinux/Comskip-master/fcomskip.ini for initiation values.

1:05:51 - 185381 frames in 123.47 sec(1501.43 fps), 1.00 sec(1846.00 fps), 99%

185521 frames decoded in 123.55 seconds (1501.59 fps)

Commercials were found.

/comchap/comcut: line 158: /mnt/media/dvr/tv/The Tonight Show (1954)/Season 1981/The Tonight Show (1954) - 1981-05-20 00_00_00 - Episode 05-20.edl: No such file or directory

Nevermind I tried with another recoding & it WORKED!!! Thanks so much for doing all the leg work I'm way too much of a *nix newb to have gotten it working without you. Now I just got to this to also encode the recordings to HEVC/AAC & I'm set but hey I just got half way to my goal. :)
 

bollar

Patron
Joined
Oct 28, 2012
Messages
411
Nevermind I tried with another recoding & it WORKED!!! Thanks so much for doing all the leg work I'm way too much of a *nix newb to have gotten it working without you. Now I just got to this to also encode the recordings to HEVC/AAC & I'm set but hey I just got half way to my goal. :)
Awesome!
 

bollar

Patron
Joined
Oct 28, 2012
Messages
411
Here's a fancier version of the post.sh script - it logs the time each file is processed and how many seconds it takes to complete. Completely optional.

Code:
#!/bin/csh
# Add bash path to Plex path.
set path = ($path /usr/local/bin)
# Sleep for a pseudorandom period (up to 10 seconds) to limit the number of instances that start at once
# $$ = process % = modulo
sleep `echo $$%10 | bc`
set now = `date`
set starttime = `date +%s`
echo "Processing: $now $1" >> /tmp/comchap.log
# Everything betwen here and the next # needs to be on one line! Make sure there's no linewrap.
/comchap/comcut --ffmpeg=/usr/local/bin/ffmpeg --comskip=/comskiplinux/Comskip-master/comskip --lockfile=/tmp/comchap.lock --comskip-ini=/comskiplinux/Comskip-master/comskip.ini "$1"
#
set endtime = `date +%s`
@ timediff = $endtime - $starttime
echo "Complete:   $timediff seconds $1" >> /tmp/comchap.log


To be safe and avoid any permissions issues, I'd create /tmp/comchap.log myself.

Code:
touch /tmp/comchap.log
chown plex /tmp/comchap.log
 
Last edited:
Top