Sådan skriver du pre- og post-process scripts

Jeg har set referencer og nævninger om pre- og post-processing scripts. Men jeg kan ikke finde definitiv dokumentation om, hvordan man gør det. Al hjælp værdsættes. Tak på forhånd.

Her er den autoritative kilde til brugerdefinerede kommandoer

Min forståelse er, at der er flere ting, man kan kalde, f.eks. en Windows batch-fil. Jeg kalder personligt et PowerShell-script til noget efterbehandling, som inkluderer noget brugerdefineret omdøbning, som MCEBuddy ikke tillader mig at gøre, og det håndterer også at flytte de konverterede filer ind i den mappestruktur, jeg ønsker, samt håndterer overskrivning/sletning, hvis de allerede findes.

Grundlæggende kalder du scriptet i profiles.conf ved at definere dem, du vil bruge, i den specifikke profil. Så i min, for eksempel, er en af mine profiler:

[MP4 Unprocessed]
Description=Very fast but limited functionality. Use this profile if the original video has H.264/MPEG video and you want to remove the commercials and convert the file format to MP4 (e.g. WTV to MP4) without any additional processing (deinterlace, resizing, volume, cropping etc). It will copy the original video and audio and put it into a MP4 format unaltered in quality.
order=ffmpeg
ffmpeg-general=-threads 0
ffmpeg-video=-ss 0 -vcodec copy -sn
ffmpeg-audio=-acodec copy
ffmpeg-audioac3=-acodec copy
ffmpeg-ext=.mp4
ffmpeg-audiodelay=skip
PreConversionCommercialRemover=true
FixedResolution=true
SkipCropping=true
AutoDeinterlace=false
PostCustomCommandPath = C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
PostCustomCommandParameters = -windowstyle hidden -file “f:\transfer\mcebuddy_postprocess.ps1” -newname “"%convertedfile%"” -destpath “"%destinationpath%"” -series “"%seriesid%"” -imdb “"%imdbmovieid%"” -ismovie “"%ismovie%"” -taskname “"%taskname%"” -season “"%season%##"” -origName “"%originalfilename%"”
PostCustomCommandHangPeriod = 0
PostCustomCommandCritical = False
PostCustomCommandUISession = False
PostCustomCommandShowWindow = True
PostCustomCommandExitCodeCheck = False

PostCustomCommandPath fortæller det, at jeg kalder PowerShell, og PostCustomCommandParameters fortæller det, hvilket PowerShell-script der skal køres, samt hvilke værdier der skal sendes med – værdier som MCEBuddy eksponerer, f.eks. filnavnet.

Mit faktiske PowerShell-script er ret langt, men en af de ting det gør, er at kigge på de medsendte værdier og justere mappenavnene til at inkludere enten IMDb-ID eller TVDB-ID afhængigt af, om det er en film eller tv-serie. Den indbyggede omdøbning i MCEBuddy ser ikke ud til at have argumenter for disse værdier.

FYI - Den offentlige IMDB API er død. Efter Amazon købte dem, har de gjort den til en betalings-tjeneste bag en API-betalingsmur.

Jeg tror, at MCEBuddy er skiftet til at bruge https://www.themoviedb.org/ (TMDB) som erstatning. Du kan overveje at tilpasse dit PowerShell-script til at gøre det samme.

Jeg bliver nødt til at tjekke, hvad Plex foretager sig, men jeg fulgte nogle dokumenter, der foreslog at navngive elementer sådan her for at hjælpe det med at identificere dem
TV-serier – overordnet mappe:
f.eks. CSI Vegas (2021) {tvdb-400248}

og Film – overordnet mappe:
The Mortal Storm (1940) {imdb-tt0032811}

Problemet var, at jeg i omdøbningen ikke kunne finde en pladsholder til seriens id fra tvdb, men der findes en pladsholder til det i efterbehandlingen, så alt, hvad jeg gør, er at sende argumentet fra MCEBuddy til PowerShell for at tage den oprindelige mappe og omdøbe den fra

CSI Vegas (2021)
til
CSI Vegas (2021) {tvdb-400248}

Der har dog været enkelte tilfælde på det seneste, hvor seriens id ikke hentes, og jeg er ikke sikker på hvorfor.

Anyway, mine PowerShell-scripts håndterer omdøbning af overordnede mapper og flytter derefter elementerne over til min Plex-server og afgør, om de skal kopieres ind i en eksisterende mappe (f.eks. til tv-serier) eller overskrives (i tilfælde af film).