PlayOn
Steaming service recorder.
Tip
Port 57331 is only used if you use PlayOn to stream recordings / provide a media library; by default this can be safely disabled.
Setup
Note
Any option not listed is left on default setting.
- Install PlayOn Desktop but do not launch immediately.
- Launch and skip through helper setup screens.
PlayOn ➔ ⚙
- Video Performance"
- Quality: HD
- Allow resumable playback: ✔
- Advanced options:
- H.264 Recording Profile: High
- System Check:
- Notify Automatically: ✔
- Channels:
- Disable all channels not used.
- Login to used channels.
Convert PlayOn Recording to MKV Containers
#!/bin/bash
#
# Converts playon videos to mkv format, preserving encoding and stripping metadata.
# For multiple: find -type f -exec ~/bin/playon-to-mkv netflix|amazon|playon|custom {}
#
# playon-to-mkv [netflix|amazon|playon] file
# playon-to-mkv custom pre-trim post-trim file
# Playon adds a 4 second pre-roll video with account/IP address, strip this.
# Playon adds a 5 second post-roll video with account/IP address, strip this.
# Playon adds metadata pertaining to account for video, strip this.
PLAYON_PRE=4
PLAYON_POST=5
# Netflix adds a 6.5 second netflix video, strip this.
# Netflix can inject a blank screen at the end, but it is not consistent.
NETFLIX_PRE=6
NETFLIX_POST=0
# Amazon adds a 1.5 second post-roll video for series, strip this.
AMAZON_PRE=0
AMAZON_POST=1.5
echo 'Calculating distances ...'
FILE="$2"
case "$1" in
"netflix")
echo 'Processing NETFLIX'
PRE=$(awk '{print $1+$2}' <<< "${PLAYON_PRE} ${NETFLIX_PRE}")
POST=$(awk '{print $1+$2}' <<< "${PLAYON_POST} ${NETFLIX_POST}")
;;
"amazon")
echo 'Processing AMAZON'
PRE=$(awk '{print $1+$2}' <<< "${PLAYON_PRE} ${AMAZON_PRE}")
POST=$(awk '{print $1+$2}' <<< "${PLAYON_POST} ${AMAZON_POST}")
;;
"custom")
echo 'Processing CUSTOM'
PRE=$2
POST=$3
FILE="$4"
;;
*)
echo 'Prcessing PLAYON'
PRE=${PLAYON_PRE}
POST=${PLAYON_POST}
;;
esac
filename=$(basename "${FILE}")
dir=$(dirname "${FILE}")
extension="${filename##*.}"
basename="${filename%.*}"
ORIGINAL_LENGTH=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "${FILE}" | cut -d\. -f1)
TRIM_LENGTH=$(awk '{print $1-$2-$3}' <<< "${ORIGINAL_LENGTH} ${PRE} ${POST}")
echo -e "Distances: \nLength: ${ORIGINAL_LENGTH}\nPre Offset: ${PRE}\nPost Offset: ${POST}\nTrim: ${TRIM_LENGTH}"
echo 'Stripping metadata and trimming ...'
ffmpeg -i "${FILE}" -ss ${PRE} -acodec copy -vcodec copy -map_metadata -1 -t ${TRIM_LENGTH} "${dir}/${basename}.stripped.${extension}"
echo 'Packing into mkv ...'
mkvmerge -o "$-{basename}.mkv" "${basename}.stripped.${extension}"
echo 'Setting media permssions ...'
chown ${USER}:${USER} "${basename}.mkv"
chmod 0640 "${basename}.mkv"