Winkelwagen

/ VPS-Infrastructuur

Alles over de zelfontwikkelde VPS-infrastructuur

Register now

/ Up to date

/ Nieuws

Lancering PerformanceVPS

Meer info
Hulp nodig?

    Sorry, we konden geen resultaten vinden voor jouw zoekopdracht.

    Plex media files optimaliseren

    Veel apparaten ondersteunen geen Direct Play functionaliteit bij het afspelen van mediabestanden van je Plex-server. In dergelijke gevallen zal Plex tijdens het afspelen bestanden transcoden, oftewel: omzetten naar een formaat waar het apparaat (e.g. een TV) wel mee overweg kan.

    Op deze pagina onder 'Specific Model Differences' vind je een overzicht van TV's met DirectPlay ondersteuning voor Full-HD files. Ondersteunt volgens deze pagina je TV H.264 en H.265 MKV-content? Dan is geen transcoding nodig bij MKV-bestanden en word je CPU geheel niet belast.

    Wil je media geheel niet hoeven transcoden tijdens het afspelen en staat je TV niet in bovengenoemde lijst van ondersteunde modellen? Dit kun je bereiken door óf MP4-bestanden te gebruiken, óf je media van tevoren te optimaliseren (i.e. om te zetten naar MP4), óf een (hardware) media player met Plex Direct Play ondersteuning aansluiten op je TV, zoals bijvoorbeeld een Roku speler. In dit artikel laten wij zien hoe je:

    • Media files automatisch optimaliseert voor Plex, zodat je niet live de volledige video en audio stream hoeft te transcoden. 
    • Media files handmatig optimaliseert.

    4k Direct Play wordt volledig ondersteund in 2016 of nieuwer Tizen-based Samsung TV's, VIZIO TV's en TiVo Roamio & Bolt (6 Series) TV's. Plex werkt hier aan en meer en meer apparaten zullen bij 4k MKV-files Direct Play in de toekomst kunnen ondersteunen.


    De impact van MKV-files live transcoden

    De impact van MKV-files die je afspeelt op apparaten die geen Direct Play ondersteunen op je CPU load is als volgt:

    • Staan er x265 MKV-bestanden op je VPS? Dan zal Plex tijdens het afspelen de bestanden in zijn geheel (video en audio) transcoden. Dit proces is CPU-intensief: als één persoon een x265 MKV-stream in 1080p bekijkt vanaf je Plex-server, belast dit al twee volle CPU cores van je VPS. 
    • Staan er x264 MKV-bestanden op je server? Dan zal Plex enkel de audio transcoden tijdens het streamen. Dit zal niet meer dan 10-20% van één enkele CPU core vergen.

    Automatisch media files optimaliseren

    Het optimaliseren van je media is in feite een pre-transcode; media wordt omgezet naar een mp4-formaat waar je TV (of ander apparaat) wel mee overweg kan. Als je de geoptimaliseerde versie gebruikt, word je CPU niet langer belast bij het bekijken van media, maar enkel nog je netwerk. Dit maakt dus bij bijvoorbeeld een X4 het verschil tussen maximaal één gelijktijdige gebruiker, of vele gelijktijdige gebruikers.

    • De stappen in dit onderdeel gaan uit van x265 HEVC en/of x264 .MKV-bestanden.
    • Per 1-1.5GB aan files, duurt het transcoden ongeveer een uur. Het is aan te raden eerst je media te optimaliseren, voor je vanaf meerdere devices tegelijk gebruik maakt van je Plex-server.
    • Ondertiteling wordt niet automatisch overgenomen. Je kunt bijvoorbeeld op Subscene ondertiteling downloaden.

    Stap 1

    Verbind met je VPS via SSH of de VPS-console in je controlepaneel.


    Stap 2

    Er zit een bug in Plex op moment van schrijven waarbij niet alle variabelen juist zijn geconfigureerd voor bepaalde command-line opdrachten (dit is vooral relevant als je bijvoorbeeld via command-line je media library wil scannen). Je lost dit op met de commando's:

    export LD_LIBRARY_PATH=/usr/lib/plexmediaserver:/usr/lib/plexmediaserver/lib
    export PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR=/var/lib/plexmediaserver/Library/Application\ Support
    • /usr/lib/plexmediaserver is standaard ingesteld en behoud je voor backwards compatibility, /usr/lib/plexmediaserver/lib is de plek waar de library daadwerkelijk staat.

    Stap 3

    Maak een shell-script aan; de locatie en naam maakt niet uit, zo lang je dezelfde gebruikt voor de verdere stappen in dit artikel, bijvoorbeeld:

    nano /usr/local/bin/plex.sh

    Stap 4

    Voeg in het bestand de code hieronder toe, waarbij je de volgende aanpassingen maakt:

    • Pas de waarde van de plexfolder variabele (/mnt/bigstorage/plex-media) aan naar de folder op je VPS waar de .mkv-bestanden staan.
    • In het script is ingesteld dat het oorspronkelijke bestand verwijderd wordt. Wil je graag eerst de MP4-file testen voor je het bestand verwijdert, verwijder dan rm -f "$file", of vervang die bijvoorbeeld door mv "$file" /tmp/ om het bestand in de /tmp map te plaatsen. De /tmp map wordt automatisch na iedere reboot van je server geleegd (je kunt ook aanpassen wanneer /tmp geleegd wordt).
    #!/bin/bash
    plexfolder=/mnt/bigstorage/plex-media/
    
    # Counts the amount of .MKV files
    i=$(find "$plexfolder" -name *.mkv -printf '.' | wc -c)
    
    # Retrieves the names of each MKV file and its parent folder. 
    # The files are then transcoded, and the original removed.
    for i in $(seq 1 1 $i)
    do
       file=$(find "$plexfolder" -name *.mkv | head -n 1)
       filename=$(find "$plexfolder" -name *.mkv -printf "%f\n" | head -n 1 | grep -oP '.*(?=[.])')
       folder=$(find "$plexfolder" -name *.mkv -printf '%h\n' | head -n 1)
       output="$folder/$filename.mp4"
       ffmpeg -i "$file" -vcodec libx264 -crf 19 -maxrate 3M -bufsize 6M -x264opts cabac=0:8x8dct=1:bframes=0:subme=0:me_range=4:rc_lookahead=10:me=dia:no_chroma_me:8x8dct=0:partitions=none -map 0:0 -sn -acodec libfdk_aac -strict -2 -cutoff 15000 -ac 2 -ab 217k -map 0:1 -map 0:2 "$output"
       rm -f "$file"
    done
    Toelichting
    • De variabele i is het totale aantal MKV-files in de map die je als de variabele plexfolder instelt
    • De for loop herhaalt zichzelf tot er geen MKV-files meer aanwezig zijn (het aantal keer wordt bepaald door de variabele i)
    • file is de naam van het 1e MKV-bestand inclusief folder (e.g. /mnt/bigstorage/plex-media/video/voorbeeld.mkv
    • filename is de naam van het bestand exclusief folder en extensie (e.g. voorbeeld)
    • folder is de map waar het bestand in staat (e.g. /mnt/bigstorage/plex-media/video)
    • output voegt de folder samen met de filename en voegt de extensie .mp4 toe.
    • ffmpeg dit commando zet de mkv file om in een mp4 file, met vergelijkbare specificaties als de optimize-functie in Plex zelf. Een belangrijk gegeven is dat -maxrate 3M de bitrate van de output file beperkt tot 3000. Wil je een hogere bitrate? Pas dan de waarde aan naar bijvoorbeeld 6M voor 6000 en -buffsize naar 12M. De waarde die je hier in stelt bepaalt ook de vereiste upload snelheid van je server voor het specifieke bestand, en de vereiste download snelheid voor het apparaat waarop je het afspeelt.
    • rm -f "$file" verwijdert het oorspronkelijke bestand.

    Stap 5

    Het script heeft nog geen uitvoerrechten. Dit pas je aan met het commando:

    chmod 755 /usr/local/bin/plex.sh

    Hiermee krijgen alle users lees- en uitvoerrechten en de user waarmee je het bestand aanmaakt volledige rechten.


    Stap 6

    Draai het script één keer en wacht tot dat klaar is. Houd er rekening mee dat als je bijvoorbeeld 100GB aan media hebt, dit makkelijk een dag of 3-4 kan duren. Gebruik je een X4 en wil je in de tussentijd gebruik kunnen  maken van je VPS, dan is het raadzaam tijdelijk een of twee extra CPU cores toe te voegen aan je VPS.

    /usr/local/bin/plex.sh

    Stap 7

    Om het proces verder geheel te automatiseren, maak je een cronjob aan om elke dag het script opnieuw uit te voeren.

    Maak hiervoor een log-bestand, een lock-bestand (zie de toelichting in stap 9) en de cronjob aan met:

    touch /tmp/plex_transcode.lock
    touch /var/log/plex_transcode.log
    crontab -u plex -e

    Stap 8

    Er is nog geen crontab voor de user Plex, dus deze wordt nieuw aangemaakt.
    Druk op 'i' om de insert mode te starten en plak de volgende regels:

    SHELL=/bin/bash
    HOME=/
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    0 3 * * * flock -n /tmp/plex_transcode.lock /user/local/bin/plex.sh >> /var/log/plex_transcode.log 2>&1

    Druk achtereenvolgens op 'esc' > :wq! om de wijzigingen op te slaan en crontab te sluiten.

    Toelichting
    • SHELL=/bin/bash: run commando's in het script met bash. 
    • HOME=: de locatie van de home directory 
    • PATH=: Standaard definieert Cron als PATH variabele /usr/bin:/usr/sbin: Met deze regel breid je die uit om ook /usr/local/sbin, /usr/local/bin, /sbin en /bin op te nemen. 
    • 0 3 * * * * etc: Het script wordt iedere dag om 3:00 's ochtends gestart door de gebruiker 'plex' . Pas eventueel de 3 aan als je vroeger of later het script wil laten uitvoeren, of gebruik bijvoorbeeld 0 */1 * * * om hem ieder uur te laten uitvoeren. 
    • De toevoeging flock -n /tmp/plex.lock plaatst een lock op je script zo lang het al actief is. Is het script nog aan het transcoden? Dan zal pas de volgende dag een nieuwe poging worden gedaan het script uit te voeren. In plaats van -n kun je ook -w <seconds> gebruiken, bijvoorbeeld -w 7200 om het twee uur later nog eens te proberen. 
    • De output van het script wordt weggeschreven naar /var/log/plex_transcode.log

    Handmatig media optimaliseren

    Wil je liever je media bestanden handmatig optimaliseren? Ga dan in de webinterface van Plex naar de betreffende map of het bestand dat je wil optimaliseren en klik onderaan rechts bij de thumbnail op de dubbele punt en selecteer 'optimize'.

    plex optimize

    Je krijgt een scherm met enkele opties te zien. Kies of je bijvoorbeeld voor een TV bestanden wil optimaliseren, of voor een mobiel, hoeveel files tegelijk je wil optimaliseren, en klik daarna onderaan rechts op 'optimize'.

    plex optimize options

    Na het handmatig optimaliseren van de media wordt het oorspronkelijke bestand niet automatisch verwijderd. Sterker nog: verwijder je het oorspronkelijke bestand, dan verwijdert Plex ook de geoptimaliseerde versie. Om dit te voorkomen verplaats je het nieuwe bestand via command-line naar een map waar Plex geen schrijf rechten toe heeft, verwijder je vervolgens het oorspronkelijke bestand, en plaats je daarna het nieuwe bestand terug.


    Mocht je aan de hand van dit artikel nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' onderaan deze pagina.

    Kom je er niet uit?

    Ontvang persoonlijke hulp van onze supporters

    Neem contact op