Page 20 of 41

Re: [Mac] Folder Action with Automator

Posted: 27 Apr 2017, 13:51
by rednoah
:!: It's a very bad idea to watch active download folders for changes. This could not possibly end well.

The best solution is to have Transmission call FileBot on completed downloads. Here's the setup instructions for that:
viewtopic.php?f=4&t=215#p3380

Re: Exclude Blacklist & Series-Mappings

Posted: 18 Jun 2017, 00:23
by kim
FS
I use FS (FullScreen) just like WS is for WideScreen
it's mostly a movie thing
or it gets used like so search/movie?query=*****+****+fs

Re: Exclude Blacklist & Series-Mappings

Posted: 18 Jun 2017, 06:31
by rednoah
kim wrote: 18 Jun 2017, 00:23 FS
I use FS (FullScreen) just like WS is for WideScreen
it's mostly a movie thing
or it gets used like so search/movie?query=*****+****+fs
Please give me 1 or more example file names / paths I can test with.

Re: Exclude Blacklist & Series-Mappings

Posted: 08 Jul 2017, 01:52
by kim
Query Blacklist:
1.0 (e.g. MP3.1.0)
2.0 (e.g. AC3.2.0)
divx5 (Codec)

Re: Exclude Blacklist & Series-Mappings

Posted: 08 Jul 2017, 03:02
by rednoah
I'll need the filename for testing please.

Re: Exclude Blacklist & Series-Mappings

Posted: 08 Jul 2017, 14:57
by kim
that was ok, but need one more
DTS.2.0

so:
(DTS|FLAC|AAC|AC3|MP3|MP4|DD|MA).?[12457][.]?[01]

some with DivX3 and DivX4

so:
DivX[345]?


btw:
do the DVDRip not need to be BEFORE the DVD to work ?
DVD|DVD5|DVD9|DVDRip

it does when I test on http://regexr.com/

Re: Exclude Blacklist & Series-Mappings

Posted: 08 Jul 2017, 15:24
by rednoah
FileBot will require word boundaries for each match. Then the regex FileBot effectively uses would look more like this:

Code: Select all

\b(DVD|DVD5|DVD9|DVDRip)\b

Re: [SNIPPET] Override / Hardcode Series Names

Posted: 24 Jul 2017, 01:52
by garyleecn
so how do I integrate it with AMC?

Re: [SNIPPET] Override / Hardcode Series Names

Posted: 24 Jul 2017, 04:33
by rednoah
You pass in your own format. The amc manual has a section on how to use custom formats.

Re: Q&A for n00bs

Posted: 02 Aug 2017, 09:44
by timpan195
I'm having an issue with running this through powershell, it simply picks the first hit on a movie, the same applies for series.
Is there any way for me to either let me pick which movie / series is or at least have it skip those files since it messes up my library.
I have been testing this out using Red Dawn, both the 1984 version and the 2012 version but both gets placed as the 1984 version.
It names and places the files correctly if they have the year in the name i.e. "Red Dawn (2012).mp4".

Code:

Code: Select all

cd "D:\Google Download Stuff\Series\"
get-childItem 'D:\Google Download Stuff\Series\*.mp4' | filebot -non-strict -rename '*' --db TheTVDB --conflict auto --filter "'s' - 'e'" --format 'D:/Google Download Stuff/Media/Series/{plex[1]} ({y})/Season {s}/{plex.name}' --output 'By Series' --mode interactive
cd "D:\Google Download Stuff\Movies\"
<This section>
get-childItem 'D:\Google Download Stuff\Movies\*.mp4'| filebot -non-strict -rename '*' --mode interactive --db TheMovieDB --conflict auto --format 'D:/Google Download Stuff/Media/Movies/{n0 = n.charAt(0); n0.isDigit() ? "0-9" : n0}/{plex[1]}/{plex.name}' --output 'By First Letter'
</This section>
pause
Below example is with "Red Dawn (2012).mp4" renamed to "Red Dawn.mp4"

Code: Select all

D:\Google Download Stuff>PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'D:\Google Download Stuff\Scripts\Move.ps1'"

<Ignore this, Series folder is empty>
Illegal Argument: java.nio.file.InvalidPathException: Illegal char <*> at index 0: * (*)
Rename episodes using [TheTVDB]
No media files: [*]
Failure (°_°)
</Ignore this, Series folder is empty>

Rename movies using [TheMovieDB]
Auto-detect movie from context: [D:\Google Download Stuff\Movies\Red Dawn.mp4]
[MOVE] from [D:\Google Download Stuff\Movies\Red Dawn.mp4] to [D:\Google Download Stuff\Media\Movies\R\Red Dawn (1984)\R
ed Dawn (1984).mp4]
Processed 1 files
Press Enter to continue...:
Image

Re: Q&A for n00bs

Posted: 02 Aug 2017, 10:15
by rednoah
If you're processing badly named files, make sure to try things with --action test first. Here's how I'd deal with this particular file.

Command:

Code: Select all

filebot -rename --db TheMovieDB *.mp4 --filter "y > 2000"
Output:

Code: Select all

Rename movies using [TheMovieDB]
Auto-detect movie from context: [Red Dawn.mp4]
Apply filter [y > 2000] on [12] items
Include [Red Dawn (2012)]
Include [Red Dawn (2011)]
Include [Red (2008)]
Include [Red (2002)]
Include [RED (2010)]
Include [Rockin' at the Red Dog: The Dawn of Psychedelic Rock (2005)]
Include [Assembly (2007)]
[MOVE] from [Red Dawn.mp4] to [Red Dawn (2012).mp4]
Processed 1 files

Re: Q&A for n00bs

Posted: 09 Aug 2017, 13:44
by kyoobix
Hello Forum,

Since I'm new here, I think the n00b section might be the right place for my question.




No matter what I try, I cannot get deluge to run any scripts. I have created a bat file and placed in my documents folder. When executede manually everything works without any problems. But how do i get Deluge to execute my script or my bat-file?

I have tried pasting the script execute-plugin without any luck. Also I have tried putting in a full path for the bat file. C:\users\username\documents\execute.bat. With and without qoutation marks. Also without any luck. How do I get Deluge on windows to execute filebot cmd's after completet download?

Notes
Filebot is up to date.
Deluge is 1.3.15
OS is Windows 10

Re: How about sharing our format expressions?

Posted: 21 Aug 2017, 10:11
by Cutha
The man hours or more like man days that I have could have saved if I had known about filebot! Fantastic tool and community.

I started using filebot a few days ago and quickly ran into a problem with naming my files based on audio stream. Turns out some of my movies do not have the best track set to the default and/or to audio[0]. I noticed others on here also wanting to have the "best" audio shown in the file name, or at least tag it with Atmos or DTS-X if it had it.

Once I started working with it I couldn't stop until I had it the way I wanted. Crouching Tiger has DTS 6Ch English on audio[0] and it is set as the default and Atmos is on [3]. I also decided to do a best audio option based on my own scale where object based sound gets a score of 10, DTS-HD MA gets a score of 20 and
AAC gets 50. I haven't fully fleshed this out.

The primary goal was to get the audio track that is set as default, which may not be [0] and use that for the file name. I also wanted to make sure my Atmos movies got tagged as such even if the Atmos track was not set as default.

Example where DTS is set as default but Atmos is available and where DTS-X is the default.

Crouching Tiger, Hidden Dragon (2000) DTS-HDMA 6Ch [Best Available TrueHD(Atmos) OB+8Ch]
The Huntsman - Winter's War (2016) DTS-HDMA(DTS-X) OB+8Ch

Image

It iterates through all the audio channels, scores them and based on that makes the string for the audio part of the file name. It's my first Groovy code so I apologize if its not the most efficient.

I fixed a few things and instead of making another post I changed it here:

Code: Select all

{
def sPath = "";
def mHDRCol = ["BT.709" : "NO", "BT.2020" : "YES"];
def mWebSrc = ["AMZN" : "AMZN", "NF" : "NF", "HBO" : "HBO"];
def hiResPath = "";
boolean isHDR = false;

if(self.video[0].bitdepth != null && self.bitdepth >= 10 && self.video[0].colourprimaries != null &&  mHDRCol.get(self.video[0].colourprimaries) == "YES") isHDR = true;

if(vf =~ /2160p/) hiResPath = '4k/' + video[0].Format.replace('AVC', 'x264').replace('HEVC', 'x265');
if(isHDR == true){ hiResPath += "(HDR)/" } else {hiResPath += "/"};

def VInfo = " - (FI " + vf + " ";
mWebSrc.any { k, v -> if(f.toString().contains(k))  VInfo += v + " "};

if(self.source =~ 'Remux') VInfo += fn.match(/BluRay/) else if(self.source != null) VInfo += self.source;

VInfo += " [" + video[0].Format.replace('AVC', 'x264').replace('HEVC', 'x265');
VInfo += " ";

if(isHDR == true) VInfo += " HDR " + self.bitdepth + "bit ";
if(isHDR == true && self.video[0].colourprimaries != null) VInfo += self.video[0].colourprimaries.replace(".","") + " ";
VInfo += "]";

sPath + hiResPath  + plex + VInfo;

}

{def ADef = 0;
def ADefScore = 100;
def ACurrent = 100;
def ABest = 100;
def ABestIndex;
def ACnt = audio.size;
def iCnt = 0;

//map of scoring, Codec + FormatProfile with '+' and '/' stripped
def mAudioScore =[
"DTS-HDXMACore" : 10, "DTS-HDMACore" : 20, "DTS-HDMAES MatrixCore" : 20, "DTSES DiscreteCore" : 25, "DTS" : 30,  "DTS-HDHRACore" : 25,
"TrueHDTrueHDAtmosTrueHD" : 10, "TrueHD" : 18, 
"AC3" : 30, "AC3+" : 20, "AAC" : 50, "AAC LCLC" : 45, "AAC LC-SBRHE-AACLC" : 40,
"MPA1L3Layer 3" : 60, "MPA1L2Layer 2" : 70,
"Vorbis" : 65,
"PCM" : 90, "Qclp" : 90, "161" : 90];

//map of Codec + FormatProfile made nice for file name
def mAFP = [ 
"DTS-HDXMACore" : "DTS-HDMA(DTS-X)", "DTS-HDMACore" : "DTS-HDMA", "DTS" : "DTS",  "DTS-HDMAES MatrixCore" : "DTS-HDMA",  "DTSES DiscreteCore" : "DTS-ES", "DTS-HDHRACore" : "DTS-HDHRA",
"TrueHDTrueHDAtmosTrueHD" : "TrueHD(Atmos)", "TrueHD" : "TrueHD", 
"AC3" : "AC3", "AC3+" : "DDP", 
"AAC LCLC" : "AAC", 
"MPA1L3Layer 3" : "MP3", "MPA1L2Layer 2" : "MP2",
"PCM" : "PCM", "Qclp" : "Qclp", "161" : "161"];

//map of Audio Channels(minus the slash) to pretty name
def mACH = [ 
"Object Based10" : "OB+10Ch", 
"Object Based8" : "OB+8Ch", "Object Based86" : "OB+8Ch", 
"Object Based6" : "OB+6Ch", 
"Object Based" : "OBCh", 
"9" : "9Ch", 
"8" : "8Ch", "86" : "8Ch",  "876" : "8Ch",
"7" : "7Ch", "76" : "7Ch",
"6" : "6Ch", 
"5" : "5Ch", 
"4" : "4Ch", "3" : "3Ch", "2" : "2Ch", "1" : "1Ch" ];

//Intermederia used to make finding missing strings from the maps
def CmACH = { if(mACH.get(it) != null) mACH.get(it) else " (mACH:" + it + " NOT FOUND)"};
def CmAFP = { if(mAFP.get(it) != null) mAFP.get(it) else " (mAFP:" + it + " NOT FOUND)"};
def CmAudioScore = { if(mAudioScore.get(it) != null) mAudioScore.get(it) else " (mAudioScore:" + it + " NOT FOUND)"};

//simple functions for creating audio text for file name
def GetFPSafe = {if(self.audio[it].FormatProfile != null) audio[it].FormatProfile.slash('').replace("+","") else ""};
//def GetAText = {mAFP.get( audio[it].codec + GetFPSafe(it)) + " " + mACH.get( audio[it].channels.slash('') ) };
def GetAText = {CmAFP( audio[it].codec + GetFPSafe(it)) + " " + CmACH( audio[it].channels.slash('') ) };

//Get index # that the default audio is using (only expecting 1 default audio)
audio.eachWithIndex{ a, idx -> if(call{a.default} == "Yes") ADef = idx};
//Get score for default audio
ADefScore = CmAudioScore(self.audio[ADef].codec + GetFPSafe(ADef))
//ADefScore = 50; //for your testing

//Check all audio streams, rank them against one another, get best score
for (iCnt = 0; iCnt < ACnt; iCnt++){

ACurrent = CmAudioScore(self.audio[iCnt].codec + GetFPSafe(iCnt))
if(ACurrent != null && ACurrent.toInteger() < ABest) ABestIndex = iCnt;
if(ACurrent != null && ACurrent.toInteger() < ABest) ABest = ACurrent.toInteger();
};

//end
if(ADefScore.toInteger() == ABest) GetAText(ABestIndex) + ")" else GetAText(ADef) + " [BA " + GetAText(ABestIndex) + "]" + ")";
}


And my little piece of code for HDR. As I learn more about HDR I will add more logic.

Code: Select all

{
def mHDRCol = ["BT.709" : "NO", "BT.2020" : "YES"];
if(bitdepth >= 10 &&  mHDRCol.get(self.video[0].colourprimaries) == "YES" ) '(HDR)/' else '(NonHDR)/';
}

Re: How about sharing our format expressions?

Posted: 21 Aug 2017, 14:38
by kim
I like your "score" idea, but it has problems:
e.g.
DTS-HDMA (mACH:86 NOT FOUND))
and extra
+ ")"
here is my audio format:

Code: Select all

{
def ChannelString = any{(0.0+audio.'ChannelPositionsString2'*.replaceAll(/Object\sBased\s\/|0.(?=\d.\d)/, '')*.split(' / ')*.collect{ it.split('/')*.toBigDecimal().sum() }*.max().max()).toString()}{channels};
def codecSubVersion = any{audio.any{ a -> call{a.FormatProfile} =~ 'HRA' } ? '.HRA' : null}{audio.any{ a -> call{a.FormatProfile} =~ 'MA / Core' } ? '.MA' : null}{audio.any{ a -> call{a.FormatProfile} =~ 'ES Matrix / Core' } ? '-ES' : null}{null};
def codecVersion = any{audio.Codec.join().match(/DTS-HD/)+codecSubVersion+'.'+audio.Codec.join().match(/TrueHD/)}{audio.Codec.join().match(/DTS-HD/)+codecSubVersion}{audio.Codec.join().match(/TrueHD/)}{audio.Codec.join().match(/DTS/)+codecSubVersion.replaceAll(/null/)}{ac};
(allOf{'.'+codecVersion.replaceAll(/null/)}
{if( ((ac == 'AAC'||ac == 'MP3') && (channels != '2.0' || ChannelString != channels) ) || ( (ac == 'AC3'||ac == 'DTS'||ac == 'TrueHD') && (channels != '5.1' || ChannelString != channels) ) ) return {any{ChannelString}{channels}}}
{aco.match(/Atmos/)}).join('.')
}

Re: How about sharing our format expressions?

Posted: 21 Aug 2017, 14:56
by Cutha
I just ran it through some of my old collection to find the old codec stuff and then I ran it against my 4k collection and I found some surprises.

I knew I wouldn't capture all the possibilities off the start so I made it so it would be kind of easy to track down what is missing.

(mACH:86 NOT FOUND)) is because in the map for audio channels "mACH" I didn't have the "8/6", if you add "86" : "8Ch" to it then it should work. I updated it like this:

Code: Select all

//map of scoring, Codec + FormatProfile with + and / stripped
def mAudioScore =[ "DTS-HDXMACore" : 10, "DTS-HDMACore" : 20, "DTS" : 30, "TrueHDTrueHDAtmosTrueHD" : 10, "TrueHD" : 18, "AC3" : 40, "AAC" : 50, "AAC LCLC" : 50, "MPA1L3Layer 3" : 60,"MPA1L2Layer 2" : 70];
//map of Codec + FormatProfile made nice for file name
def mAFP = [ "DTS-HDXMACore" : "DTS-HDMA(DTS-X)", "DTS-HDMACore" : "DTS-HDMA", "DTS" : "DTS", "TrueHDTrueHDAtmosTrueHD" : "TrueHD(Atmos)", "TrueHD" : "TrueHD", "AC3" : "AC3", "AAC LCLC" : "AAC", "MPA1L3Layer 3" : "MP3", "MPA1L2Layer 2" : "MP2" ];
//map of Audio Channels(minus the slash) to pretty name
def mACH = [ "Object Based10" : "OB+10Ch", "Object Based8" : "OB+8Ch", "Object Based86" : "OB+8Ch", "Object Based6" : "OB+6Ch", "Object Based" : "OBCh", "9" : "9Ch", "8" : "8Ch", "86" : "8Ch", "7" : "7Ch", "6" : "6Ch", "5" : "5Ch", "4" : "4Ch", "3" : "3Ch", "2" : "2Ch", "1" : "1Ch" ];
For the HDR stuff I just found that Elysium, at least the version that I grabbed, doesn't have a .bitdepth field.

Video
ID : 1
Format : HEVC
Format/Info : High Efficiency Video Coding
Codec ID : V_MPEGH/ISO/HEVC
Duration : 1 h 49 min
Bit rate : 57.7 Mb/s
Width : 3 840 pixels
Height : 1 608 pixels
Display aspect ratio : 2.40:1
Frame rate mode : Constant
Frame rate : 23.976 (24000/1001) FPS
Bits/(Pixel*Frame) : 0.390
Stream size : 44.2 GiB (86%)
Language : English
Default : Yes
Forced : No


To prevent it from completely dying I did this:

Code: Select all

if(self.video[0].bitdepth != null && self.bitdepth == 10 && self.video[0].colourprimaries != null &&  mHDRCol.get(self.video[0].colourprimaries) == "YES") isHDR = "YES";

Re: How about sharing our format expressions?

Posted: 21 Aug 2017, 15:05
by Cutha
kim wrote: 21 Aug 2017, 14:38 here is my audio format:
Yours works well with my Atmos and everything else but it does not identify the other object based format, DTS-X.

It displayed this:
.DTS-HD.MA.7.1

For this:
Format_Profile X / MA / Core
CodecID A_DTS
Codec DTS-HD
Codec/String DTS-HD
Codec/Family DTS
Duration 7210454.000000
BitRate_Mode VBR / VBR / CBR
BitRate_Mode/String Variable / Variable / Constant
BitRate 3840000 / 3840000 / 1509000
BitRate/String 3 840 kb/s / 3 840 kb/s / 1 509 kb/s
Channel(s) Object Based / 8 / 6
Channel(s)/String Object Based / 8 channels / 6 channels
ChannelPositions Object Based / Front: L C R, Side: L R, Back: L R, LFE / Front: L C R, Side: L R, LFE
ChannelPositions/String2 Object Based / 3/2/2.1 / 3/2/0.1
ChannelLayout Object Based / / C L R Ls Rs LFE

Re: How about sharing our format expressions?

Posted: 21 Aug 2017, 17:24
by kim
that's because I don't any X-files:P
you can just add it like this:

Code: Select all

{
def ChannelString = any{(0.0+audio.'ChannelPositionsString2'*.replaceAll(/Object\sBased\s\/|0.(?=\d.\d)/, '')*.split(' / ')*.collect{ it.split('/')*.toBigDecimal().sum() }*.max().max()).toString()}{channels};
def codecSubVersion = any{audio.any{ a -> call{a.FormatProfile} =~ 'HRA' } ? '.HRA' : null}{audio.any{ a -> call{a.FormatProfile} =~ 'X / MA / Core' } ? '.X' : null}{audio.any{ a -> call{a.FormatProfile} =~ 'MA / Core' } ? '.MA' : null}{audio.any{ a -> call{a.FormatProfile} =~ 'ES Matrix / Core' } ? '-ES' : null}{null};
def codecVersion = any{audio.Codec.join().match(/DTS-HD/)+codecSubVersion+'.'+audio.Codec.join().match(/TrueHD/)}{audio.Codec.join().match(/DTS-HD/)+codecSubVersion}{audio.Codec.join().match(/TrueHD/)}{audio.Codec.join().match(/DTS/)+codecSubVersion.replaceAll(/null/)}{ac};
(allOf{'.'+codecVersion.replaceAll(/null/)}
{if( ((ac == 'AAC'||ac == 'MP3') && (channels != '2.0' || ChannelString != channels) ) || ( (ac == 'AC3'||ac == 'DTS'||ac == 'TrueHD') && (channels != '5.1' || ChannelString != channels) ) ) return {any{ChannelString}{channels}}}
{aco.match(/Atmos/)}).join('.')
}
result = .DTS-HD.X.7.1
feel free to edit it if you like it an other way ;)

e.g. like this:

Code: Select all

{
def ChannelString = any{(0.0+audio.'ChannelPositionsString2'*.replaceAll(/Object\sBased\s\/|0.(?=\d.\d)/, '')*.split(' / ')*.collect{ it.split('/')*.toBigDecimal().sum() }*.max().max()).toString()}{channels};
def codecSubVersion = any{audio.any{ a -> call{a.FormatProfile} =~ 'HRA' } ? '.HRA' : null}{audio.any{ a -> call{a.FormatProfile} =~ 'X / MA / Core' } ? '-X' : null}{audio.any{ a -> call{a.FormatProfile} =~ 'MA / Core' } ? '.MA' : null}{audio.any{ a -> call{a.FormatProfile} =~ 'ES Matrix / Core' } ? '-ES' : null}{null};
def codecVersion = any{audio.Codec.join().match(/DTS-HD/)+codecSubVersion+'.'+audio.Codec.join().match(/TrueHD/)}{audio.Codec.join().match(/DTS-HD/) && codecSubVersion == '-X' ? 'DTS-X' : null}{audio.Codec.join().match(/DTS-HD/)+codecSubVersion}{audio.Codec.join().match(/TrueHD/)}{audio.Codec.join().match(/DTS/)+codecSubVersion.replaceAll(/null/)}{ac};
(allOf{'.'+codecVersion.replaceAll(/null/)}
{if( ((ac == 'AAC'||ac == 'MP3') && (channels != '2.0' || ChannelString != channels) ) || ( (ac == 'AC3'||ac == 'DTS'||ac == 'TrueHD') && (channels != '5.1' || ChannelString != channels) ) ) return {any{ChannelString}{channels}}}
{aco.match(/Atmos/)}).join('.')
}
result = .DTS-X.7.1

BTW: what is the standard naming of DTS:X files ?

Re: How about sharing our format expressions?

Posted: 22 Aug 2017, 00:37
by Cutha
kim wrote: 21 Aug 2017, 17:24 result = .DTS-X.7.1

BTW: what is the standard naming of DTS:X files ?
I only have a couple movies and they were both .DTS-X. so I assume thats what it is. I tried to google it but all I could find was stuff about WEBRip and that sort as far as naming goes.

Re: How about sharing our format expressions?

Posted: 22 Aug 2017, 01:11
by kim
well then you can just copy/paste my format then ;)

Re: How about sharing our format expressions?

Posted: 22 Aug 2017, 05:42
by Cutha
The sharing is great, the more knowledge the better. I am partial to knowing in the file name what the properties of the 'default' audio track and if there is a better track available. Because of that I check each audio track.

Re: [JDownloader] Setup for Windows, Linux and Mac OS X

Posted: 15 Sep 2017, 10:22
by Effe
I need help with this script.

I followed the guide, I get no error, but the files are not renamed.

Re: Exclude Blacklist & Series-Mappings

Posted: 16 Sep 2017, 21:56
by kim
with this in filename e.g.
DTS-MA.5.1
it still use this to lookup movie
+5+1
also what about 1, 4 and 8ch + DTS-ES, DTS-HD-HRA and DTS-X + without separator e.g. DTSHD ?

will match e.g. AAC.51 ?
[12457][.]?[01]
to [12457]\.[01]
if so change to something like this:
\b(FLAC|AAC|AC3|MP3|MP4|DTS|DD|TrueHD|Atmos)(.?HD)?(.?ES|.?MA|.?X|.?HRA)?(.?[12457]\.[01])?\b|\b[12468]ch\b
this is how filebot see it, yes (with the \b) ?

btw: I have never seen e.g. 0720p (no?), m720p (yes)
[M0]?(720|1080)[pi]

Re: Exclude Blacklist & Series-Mappings

Posted: 17 Sep 2017, 02:32
by rednoah
Do you have an example filename for me so I can test the existing patterns and the ones you suggest?

Re: Exclude Blacklist & Series-Mappings

Posted: 17 Sep 2017, 15:33
by kim
new format:
\b(FLAC|AAC|AC3|MP3|MP4|DTS|DD[P+]?|TrueHD|Atmos)(.?HD)?(.?ES|.?MA|.?X|.?HRA)?(.?[124567][.]?[01])?\b|\b[124678]ch\b|\b[2|3]?Audio\b|\bDualAudio\b
test on:
some.movie.2000.DTS.MA.5.1
some.movie.2000.DTS.MA.7.1
some.movie.2000.DTS.MA.6ch
some.movie.2000.DTS-HD.MA.5.1
some.movie.2000.DTS-HD.MA.7.1
some.movie.2000.DTS-HD.MA.6ch
some.movie.2000.DTS-HD.MA.8ch
some.movie.2000.DTSHDMA.5.1
some.movie.2000.DTSHDMA.7.1
some.movie.2000.DTS-X.5.1
some.movie.2000.DTS-X.7.1
some.movie.2000.DTS-X.6ch
some.movie.2000.DTS-X.8ch
some.movie.2000.DTS-HD-HRA.7.1
some.movie.2000.DTS-ES.6.1
some.movie.2000.DTS.1.0
some.movie.2000.DTS.2.0
some.movie.2000.DTS.5.1
some.movie.2000.DTS.6.1
some.movie.2000.DTS.7.1
some.movie.2000.DTS.1ch
some.movie.2000.DTS.2ch
some.movie.2000.DTS.6ch
some.movie.2000.DTS.7ch
some.movie.2000.DTS.8ch
some.movie.2000.DTS

some.movie.2000.DTSMA.2Audio
some.movie.2000.DTS.Audio
some.movie.2000.Dtshd Audio
some.movie.2000.Dts Dualaudio
some.movie.2000.DTSES6.1.3Audio
some.movie.2000.AC3.2Audio
some.movie.2000.FLAC.DD51.DualAudio

some.movie.2000.TrueHD.5.1
some.movie.2000.TrueHD.7.1

some.movie.2000.TrueHD.Atmos.5.1
some.movie.2000.TrueHD.Atmos.7.1
some.movie.2000.DTS-HD.TrueHD.7.1.Atmos

some.movie.2000.AC3.1.0
some.movie.2000.AC3.2.0
some.movie.2000.AC3.4.0
some.movie.2000.AC3.5.1
some.movie.2000.AC3.1ch
some.movie.2000.AC3.2ch
some.movie.2000.AC3.4ch
some.movie.2000.AC3.6ch

some.movie.2000.DD.1.0
some.movie.2000.DD.2.0
some.movie.2000.DD.4.0
some.movie.2000.DD.5.1
some.movie.2000.DDP.1.0
some.movie.2000.DDP.2.0
some.movie.2000.DDP.4.0
some.movie.2000.DDP.5.1
some.movie.2000.DD+.1.0
some.movie.2000.DD+.2.0
some.movie.2000.DD+.4.0
some.movie.2000.DD+.5.1
some.movie.2000.DDP1.0
some.movie.2000.DDP2.0
some.movie.2000.DDP4.0
some.movie.2000.DDP5.1

some.movie.2000.DD.5.1
some.movie.2000.DD.7.1

some.movie.2000.MP3.1.0
some.movie.2000.AAC.5.1
NEW:
DDP = DD+ = Dolby Digital Plus
"Audio Channels: 1.0 to 13.1"
https://en.wikipedia.org/wiki/Dolby_Digital_Plus

Re: Exclude Blacklist & Series-Mappings

Posted: 19 Sep 2017, 00:07
by kim
have you tested it yet ?