Page 1 of 3
Some questions regarding renaming
Posted: 01 Mar 2020, 10:45
by justkidding
Hello,
I love Filebot and I am using it for a long time on my Synology NAS.
I would love to improve my renaming even more but I need some help for that.
At the moment I am using the following statement:
Code: Select all
/data/Movies/{az}/{collection}/{ny.UpperInitial()}/{n.upperInitial()} ({y})/{n.upperInitial()} ({y}) {fn.matchAll(/UHD|4K|MVC|framepacked|FSBS|HSBS|HOU|FOU/)} {source} {special} {tags} {vf} {vc} {hdr} {s3d} {aco} {channels} {audioLanguages} {subt}
I've deleted the seriesformat as it makes it easier to read and my questions only concern movies.
1.) I would like to integrate the dynamic localization binding ({localize[languages.first()].n : n}). But I still want to use the upperInitial()-Statement as well as the year. How would I do this?
2.) The {hdr}-Tag is working fine but I would like that all movies that are not hdr are tagged sdr. I already tried {any{hdr}{'SDR}} (gives only HDR if movie is HDR and nothing if movie is not HDR) and any{hdr}{'SDR'} (gives anyHDR if movie is HDR and any if movie is not HDR).
3.) The bindings {aco} and {channels} always give the information of the first audio stream found but I would like to get the information of the audio stream with the best quality found. Is this possible?
For example if I have a movie with the following audio streams
1.) German DTS-HD 5.1
2.) English Dolby TrueHD 7.1 Atmos
the two bindings give me "DTS-HD Master Audio 5.1" but I want "TrueHD+Atmos 7.1" as this is the best quality audio stream.
Your help is really appreciated.
Best regards,
justkidding
Re: Some questions regarding renaming
Posted: 01 Mar 2020, 11:12
by rednoah
1.
String.upperInitial() works for any String object:
Code: Select all
any{localize[languages[0]].ny}{ny}.upperInitial()
2.
This snippet is simple enough, so it can't not work, so if it indeed doesn't work, there's something else going on, on a higher level, making use not do what we think we're doing:
3.
You can use
{audio} to access all raw audio properties for all audio streams, but you'll have to figure out how to define
"best quality" numerically in your code, to find the
"best audio stream" according to your definition:
viewtopic.php?t=4285
e.g. find audio stream with the highest number of channels:
Code: Select all
{
def a = audio.max{ it.Channels as int }
a.Channels + 'ch.' + a.Format
}
Re: Some questions regarding renaming
Posted: 01 Mar 2020, 11:51
by justkidding
I guess I have a general problem with the statement "any".
If I do "any{localize[languages[0]].ny}{ny}.upperInitial()" or "any{hdr}{'SDR'}" it always adds the word "any" to the filename.
What could cause that?
That's my statement at the moment:
'movieFormat=/data/Movies/{az}/{collection}/{ny.UpperInitial()}/{n.upperInitial()} ({y})/any{localize[languages[0]].ny}{ny}.upperInitial() ({y}) {fn.matchAll(/UHD|4K|MVC|framepacked|FSBS|HSBS|HOU|FOU/)} {source} {special} {tags} {vf} {vc} any{hdr}{'SDR'} {s3d} {aco} {channels} {audioLanguages} {subt}'
as a result it gives the following file name:
anyGuardians of the Galaxy Vol. 2 (2017).upperInitial() [UHD, 4K] BluRay 2160p HEVC anyHDR DTS-HD High Resolution Audio 5.1 [deu, eng]
Is {localize[languages[0]]} the same as {localize[languages.first()].n}?
Or would it be "{localize[languages.first()].ny : ny}.upperInitial()" respectively "{localize[languages.first()].ny : ny}.upperInitial()"?
Regarding point 3.)
On the NAS in Filebot Node I do not find this option

Open FileBot Image ➔ Edit Format Image ➔ Change Sample Image ➔ Open MediaInfo Image
to check what possibilities I have with media info. Is it only possible with Windows?
Do i have to do the defining variable inside the movieFormat-statement or separately before the call of filebot?
For example can I just do it like this:
'movieFormat=/data/Movies/{az}/{collection}/{ny.UpperInitial()}/{n.upperInitial()} ({y})/any{localize[languages[0]].ny}{ny}.upperInitial() ({y}) {fn.matchAll(/UHD|4K|MVC|framepacked|FSBS|HSBS|HOU|FOU/)} {source} {special} {tags} {vf} {vc} any{hdr}{'SDR'} {s3d} {aco} {channels} {audioLanguages} {subt} {def a = audio.max{ it.Channels as int } a.Channels + 'ch.' + a.Format}'
Sorry, I don't get this yet.
Re: Some questions regarding renaming
Posted: 01 Mar 2020, 12:07
by rednoah
1.
This is a
Groovy snippet:
* This is Groovy code.
This is how you write a
Format Expression that executes a given
Groovy snippet:
* This is not Groovy code. The outermost {...} are interpreted away the by the Format engine.
any is just another function, just like
upperInitial is just another method.
3.
You'll want to prototype your format with the FileBot Desktop application:
https://www.filebot.net/naming.html

Once you're happy with your format expression, and have sufficiently tested it on your Desktop, then and only then, would you copy & paste the format into FileBot Node. Prototyping a new format within FileBot Node would be unnecessarily difficult.
Re: Some questions regarding renaming
Posted: 01 Mar 2020, 12:51
by justkidding
Okay, understood.
I will use the desktop application to check if everything is working there.
But where do I do the defining of the variable? Where in my statement do I have to put this snippet
Code: Select all
{
def a = audio.max{ it.Channels as int }
a.Channels + 'ch.' + a.Format
}
?
Can you please check if the expression {audio.Format_AdditionalFeatures} is working correctly?
Media Info gives me the following information:
Format_AdditionalFeatures XLL X
but the name of the file does not contain "XLL X". Instead it contains nothing.
According to
https://github.com/MediaArea/MediaInfo/issues/286 the information "Format_AdditionalFeatures" should be used to distinguish between DTS, DTS:X as well as TrueHD with Atmos and just TrueHD.
I am just testing with this statement
Code: Select all
{ any{localize[languages[0]].ny}{ny}.upperInitial() } {audio.Format_AdditionalFeatures} {audio.language}
in the desktop application.
Re: Some questions regarding renaming
Posted: 01 Mar 2020, 16:03
by rednoah
1.
{...} is evaluated, and yields a value. Where do you want that value to be? You decide. That's where you put the
{...} in the format.
2.
I've tried with one sample file at hand though, and
{audio[0].FormatAdditionalFeatures} yields
LC. Note that not all properties are going to be available for all files. Each file is different.
Please use the MediaInfo Inspector to inspect which properties are available for given file:
viewtopic.php?t=4285

Re: Some questions regarding renaming
Posted: 01 Mar 2020, 16:33
by justkidding
I've used the desktop application for testing now.
With this I've build the following expression which works great:
Code: Select all
{az}/{collection}/{any{localize[languages[0]].n} {n}.upperInitial() } ({y})/{any{localize[languages[0]].ny}{ny}.upperInitial() } {tags} {source} {vc} {vf} { any{hdr}{'SDR'} }
{ def bestaudio = audio.max{ it.Channels as int }
bestaudio.Format_additionalfeatures + ' ' + bestaudio.language + ' '
}
{ audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } }
{fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt}
Now I am trying to transfer this statement to my Synology NAS.
On the NAS I am using a .sh script.
My script looks like this now:
Code: Select all
/volume1/@appstore/filebot/filebot.sh -script 'fn:amc' --action 'test' '/volume1/data' --output /volume1/03_Filme -non-strict --conflict auto --lang en --def 'seriesFormat=/volume1/03_Filme/02 Serien/{az}/{n}/{episode.special ? '\''Special'\'' : '\''Staffel '\''+s}/{n} - {episode.special ? '\''S00E'\''+special.pad(2) : s00e00} - {t} {vf} { any{hdr}{'SDR'} } {aco} {channels} {audioLanguages} {subt}' 'movieFormat=/volume1/03_Filme/01 Movies/{az}/{collection}/{any{localize[languages[0]].n} {n}.upperInitial() } ({y})/{any{localize[languages[0]].ny}{ny}.upperInitial() } {tags} {source} {vc} {vf} { any{hdr}{'SDR'} }
{ def bestaudio = audio.max{ it.Channels as int }
bestaudio.Format_AdditionalFeatures + ' ' + bestaudio.language + ' '
}
{ audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } }
{fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt}' 'skipExtract=y' 'subtitles=ger' 'excludeList=.excludes' --log info --log-file '/volume1/03_Filme/Filebotlogs/filebot.log'
It gives me the following error:
Code: Select all
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/ + bestaudio.language + ( + bestaudio.language + )
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/
}
{ audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } }
{fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt} (
}
{ audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } }
{fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt})
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/skipExtract=y (skipExtract=y)
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/subtitles=ger (subtitles=ger)
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/excludeList=.excludes (excludeList=.excludes)
Argument[1]: File does not exist: + bestaudio.language +
Argument[2]: File does not exist:
}
{ audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } }
{fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt}
Argument[3]: File does not exist: skipExtract=y
Argument[4]: File does not exist: subtitles=ger
Argument[5]: File does not exist: excludeList=.excludes
ScriptException: SyntaxError: missing token: }
ScriptException: SyntaxError: missing token: }
Finished without processing any files
I guess it is because the script cannot handle the new lines / spaces. But if I write everything in one line I get this error:
Code: Select all
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/ + bestaudio.language + ( + bestaudio.language + )
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/ } { audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } } {fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt} ( } { audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } } {fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt})
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/skipExtract=y (skipExtract=y)
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/subtitles=ger (subtitles=ger)
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/excludeList=.excludes (excludeList=.excludes)
Argument[1]: File does not exist: + bestaudio.language +
Argument[2]: File does not exist: } { audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } } {fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt}
Argument[3]: File does not exist: skipExtract=y
Argument[4]: File does not exist: subtitles=ger
Argument[5]: File does not exist: excludeList=.excludes
ScriptException: SyntaxError: missing token: }
ScriptException: SyntaxError: missing token: }
Finished without processing any files
Are there differences in the syntax between windows and Linux?
Re: Some questions regarding renaming
Posted: 01 Mar 2020, 16:50
by rednoah
What happens if you use
'...' to escape an argument value, but then also use
'...' inside that argument value? Yes, that's what happens. The shell will pass complete gibberish on to
filebot which is then rightly confused.

Please read
Cmdline and Argument Passing for details.

Use the
@file syntax for reading command-line arguments from external text files so you don't have to worry about any of that.

Re: Some questions regarding renaming
Posted: 01 Mar 2020, 18:14
by justkidding
@file_syntax is awesome - it really helped and solved some of my problems.
For example any{HDR}{'SDR'} is working now

.
But I am still struggling with this part
Code: Select all
{ def bestaudio = audio.max{ it.Channels as int }
bestaudio.Format_AdditionalFeatures + ' ' + bestaudio.language + ' ' }
Inside my argument file I now have the following format:
Code: Select all
movieFormat=/volume1/03_Filme/01 Movies/{az}/{collection}/{any{localize[languages[0]].n} {n}.upperInitial() } ({y})/{any{localize[languages[0]].ny}{ny}.upperInitial() } {tags} {source} {vc} {vf} { any{hdr}{'SDR'} }
{
def bestaudio = audio.max{ it.Channels as int }
bestaudio.Format_AdditionalFeatures + ' ' + bestaudio.language + ' '
} { audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } } {fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt}
Unfortunately, I am still getting the error:
Code: Select all
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/{ ({ )
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/ def bestaudio = audio.max{ it.Channels as int } ( def bestaudio = audio.max{ it.Channels as int })
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/ bestaudio.Format_AdditionalFeatures + ' ' + bestaudio.language + ' ' ( bestaudio.Format_AdditionalFeatures + ' ' + bestaudio.language + ' ' )
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/} { audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } } {fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt} (} { audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } } {fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt})
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/skipExtract=y (skipExtract=y)
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/subtitles=ger (subtitles=ger)
Illegal Argument: java.nio.file.NoSuchFileException: /usr/syno/synoman/webapi/excludeList=.excludes (excludeList=.excludes)
Argument[1]: File does not exist: {
Argument[2]: File does not exist: def bestaudio = audio.max{ it.Channels as int }
Argument[3]: File does not exist: bestaudio.Format_AdditionalFeatures + ' ' + bestaudio.language + ' '
Argument[4]: File does not exist: } { audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } } {fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt}
Argument[5]: File does not exist: skipExtract=y
Argument[6]: File does not exist: subtitles=ger
Argument[7]: File does not exist: excludeList=.excludes
When I test the same statement with the desktop application I get:
A/Avatar Collection/Avatar (2009)/Avatar (2009) BluRay HEVC 2160p HDR 16-ch en [de, en] [UHD, 4K]
My .sh-script looks like this now:
Code: Select all
/volume1/@appstore/filebot/filebot.sh -script 'fn:amc' --action 'test' '/volume1/data' --output /volume1/03_Filme -non-strict --conflict auto --lang en --def '@/volume1/03_Filme/Sorting Scripts/filebotargs.txt' 'skipExtract=y' 'subtitles=ger' 'excludeList=.excludes' --log info --log-file '/volume1/03_Filme/Filebotlogs/filebot.log'
Re: Some questions regarding renaming
Posted: 01 Mar 2020, 18:19
by rednoah
1. Open the FileBot Format Editor GUI and copy & paste your format.
2. Create a new text file
MovieFormat.groovy and paste your format.
3. Use
--def movieFormat=@/path/to/MovieFormat.groovy in your
filebot call
--def name=@file syntax allows you to read a single script parameter from a text file.

You are using
@args syntax for arguments and not binding value, where arguments are read from a text file
line by line:
Code: Select all
movieFormat=/volume1/03_Filme/01 Movies/{az}/{collection}/{any{localize[languages[0]].n} {n}.upperInitial() } ({y})/{any{localize[languages[0]].ny {ny}.upperInitial() } {tags} {source} {vc} {vf} { any{hdr}{'SDR'} }
The
--def name=value sequence ends here. The rest is interpreted as input arguments, which is self-evident in the numerous console errors:
Code: Select all
def bestaudio = audio.max{ it.Channels as int }
Code: Select all
bestaudio.Format_AdditionalFeatures + ' ' + bestaudio.language + ' '
Code: Select all
} { audio.groupBy{ it.Language }.collect{ k, v-> v.size() > 1 ? v.size() + k : k } } {fn.matchAll(/UHD|4K|MVC|framepacked/)} {s3d} {subt}
The errors look the same as before when you didn't use '...' correctly because both mistakes lead to random Groovy code being being passed in as input file arguments. If you use
' as separator you can't use
' in the value, if you use
newline as separator, you can't use
newline in the value, etc.

Re: Some questions regarding renaming
Posted: 01 Mar 2020, 19:29
by justkidding
Thank you! The movieformat.groovy file works just fine

.
Is there a list what functions I can call inside the def-expression (instead of .max)?
For example I want to try to find the information of the german audio line with the most channels.
Is this also possible?
Re: Some questions regarding renaming
Posted: 01 Mar 2020, 19:48
by rednoah
Re: Some questions regarding renaming
Posted: 01 Mar 2020, 21:51
by kim
justkidding wrote: ↑01 Mar 2020, 19:29
For example I want to try to find the information of the german audio line with the most channels.
Is this also possible?
I modified my code for you
viewtopic.php?f=5&t=5285&p=48761#p48761
Re: Some questions regarding renaming
Posted: 02 Mar 2020, 06:09
by justkidding
@rednoah thanks, this is quite some stuff to understand if you are not familiar with such things

@kim Wow, this looks awesome. Thank you so much. I will try as soon as I get home.
Re: Some questions regarding renaming
Posted: 02 Mar 2020, 06:42
by rednoah
Yes, indeed. FileBot is built on a massive general-purpose platform, so you can do absolutely anything, which makes it difficult to come up with a finite list of things that a FileBot users might be interested in.
So it's better to ask "I want to do this, how do I do it?" and then learn by example and get a feel for how things work.
Re: Some questions regarding renaming
Posted: 02 Mar 2020, 19:07
by justkidding
@rednoah I absolutely understand that. And the support from you and the other members is outstanding

.
@kim Your coding is really great. The end of my coding looks like this now.
Code: Select all
def allStreams = audioStreams.collect{ filter(it) }*.minus(null).unique()*.join(' ')
def preferredStream = oneStream(audioStreams.findAll{ it.index == audioStreams.index.max() })
def bestBitRate = oneStream(audioStreams.findAll{ it.bitrate == audioStreams.bitrate.max() })
def defaultStream = oneStream(audioStreams.findAll{it.default == true})
def bestPreferredGer = any{audioStreams.findAll{it.lang == preferredGer }.sort{it.bitrate <=> it.bitrate}.collect{ filter(it) }*.minus(null).unique().get(0).join(' ')}{null}
def bestPreferredEng = any{audioStreams.findAll{it.lang == preferredEng }.sort{it.bitrate <=> it.bitrate}.collect{ filter(it) }*.minus(null).unique().get(0).join(' ')}{null}
[bestBitRate, preferredStream, bestPreferredEng, bestPreferredGer ].unique().join(' ').space(' ')
Everything is working great. I have only one small issue. If a file has no german audio line for example it writes the value "null". How can I avoid this? If there is no such line it should just write nothing.
At the moment I get this for example:
Code: Select all
KOR TrueHD ATMOS 7 1 [11 Objs] null DEU DTS-HD MA 5 1
Re: Some questions regarding renaming
Posted: 02 Mar 2020, 20:11
by kim
Was the lang code "Deu" and not "Ger"? you need to change that part
Replace
with e.g.
= any{if NOT null use this}{use if first fail}
OR I used
btw: edit this if you don't want some of the info
Code: Select all
def filter = { [it.codec, it.ch, it.objects, it.lang] }
EDIT: bug fix
OR
Code: Select all
.sort{a, b -> b.bitrate <=> a.bitrate}
Re: Some questions regarding renaming
Posted: 03 Mar 2020, 10:39
by justkidding
kim wrote: ↑02 Mar 2020, 20:11
Was the lang code "Deu" and not "Ger"? you need to change that part
Yeah, the language code for German is "deu". I already changed it

. Maybe this is dependent on the installation of media info. I don't know.
kim wrote: ↑02 Mar 2020, 20:11
Replace
with e.g.
= any{if NOT null use this}{use if first fail}
OR I used
Thank you - that's perfect. I just added {preferred Stream}.
kim wrote: ↑02 Mar 2020, 20:11
btw: edit this if you don't want some of the info
Code: Select all
def filter = { [it.codec, it.ch, it.objects, it.lang] }
Already did
kim wrote: ↑02 Mar 2020, 20:11
EDIT: bug fix
OR
Code: Select all
.sort{a, b -> b.bitrate <=> a.bitrate}
Thank you I will adapt it.
@rednoah is it possible to use filebot also for renaming jpg or png files?
In my scraped movie folders at the moment I have something like this:
Avatar (2009) Bluray 6ch.mkv
Avatar (2009) Bluray 6ch-fanart.jpg
Now I want to rename my movie files with the new script. Is it possible to rename the jpg-files with the same name but keeping the part which is behind the -? So an optimal result would be for example
Avatar (2009) Bluray 1080p HDR DEU Atmos.mkv
Avatar (2009) Bluray 1080p HDR DEU Atmos-fanart.jpg
Re: Some questions regarding renaming
Posted: 03 Mar 2020, 11:10
by rednoah
Yes, companion files (with the same name) are matched to the same movie object automatically and so things should work as expected out of the box.

Note that the amc script explicitly ignores non-video files. So while the answer above generally applies to GUI and CLI usage, it does not for the amc script specifically.
Re: Some questions regarding renaming
Posted: 03 Mar 2020, 15:22
by kim
you can use something like this:
Code: Select all
{ext = 'jpg' ? '-' + fn.match(/fanart|otherword/) : ''}
Re: Some questions regarding renaming
Posted: 03 Mar 2020, 17:10
by justkidding
@rednoah in the gui without doing anything I loose the "-fanart"
8 Mile (2002) 1080P X264 AAC Tt0298203-fanart.jpg
becomes to
8 Mile (2002) x264 1080p SDR.jpg
@Kim
I've included your bug fix (hope it's correct)
Code: Select all
def bestPreferredGer = any{audioStreams.findAll{it.lang == preferredGer }.sort{a, b -> b.bitrate <=> a.bitrate}.collect{ filter(it) }*.minus(null).unique().get(0).join(' ')}{defaultStream}
Your statement for the .jpg-files is working quite good.
I just have the problem that it adds a space before the "-".
As a result I get
8 Mile (2002) x264 1080p SDR -fanart.jpg
How can I change it to
8 Mile (2002) x264 1080p SDR-fanart.jpg
?
I think it's because for at least one part expression it doesn't find a value.
Because if I do something like
Code: Select all
{ny.upperInitial()} {tags}{fn.match(/-fanart|-banner|-clearart|-clearlogo|-discart|-landscape|-poster/)}
it adds a space before the "-fanart".
Also I have a problem with one of my video files in finding the audio languages using your script. It's a .mp4-file if that matters.
MediaInfo gives me the following information for the audio line:
Code: Select all
Format AAC
Format/String AAC LC
Format/Info Advanced Audio Codec Low Complexity
Format_Commercial AAC
Format_Settings_SBR No (Explicit)
Format_Settings_SBR/String No (Explicit)
Format_AdditionalFeatures LC
CodecID mp4a-40-2
Duration 6627775
Duration/String 1 h 50 min
Duration/String1 1 h 50 min 27 s 775 ms
Duration/String2 1 h 50 min
Duration/String3 01:50:27.775
Duration/String4 01:50:10:07
Duration/String5 01:50:27.775 (01:50:10:07)
BitRate_Mode VBR
BitRate_Mode/String Variable
BitRate 325576
BitRate/String 326 kb/s
BitRate_Maximum 338312
BitRate_Maximum/String 338 kb/s
Channel(s) 6
Channel(s)/String 6 channels
ChannelPositions Front: L C R, Side: L R, LFE
ChannelPositions/String2 3/2/0.1
ChannelLayout C L R Ls Rs LFE
SamplesPerFrame 1024
SamplingRate 48000
SamplingRate/String 48.0 kHz
FrameRate 46.875
FrameRate/String 46.875 FPS (1024 SPF)
Compression_Mode Lossy
Compression_Mode/String Lossy
StreamSize 269732358
StreamSize/String 257 MiB (9%)
StreamSize/String1 257 MiB
StreamSize/String2 257 MiB
StreamSize/String3 257 MiB
StreamSize/String4 257.2 MiB
StreamSize/String5 257 MiB (9%)
StreamSize_Proportion 0.09182
Language en
Language/String English
Language/String1 English
Language/String2 en
Language/String3 eng
Language/String4 en
Encoded_Date UTC 2014-10-12 23:50:05
Tagged_Date UTC 2014-10-13 22:41:53
Do you see where the issue could be?
Re: Some questions regarding renaming
Posted: 03 Mar 2020, 17:26
by rednoah
justkidding wrote: ↑03 Mar 2020, 17:10
@rednoah in the gui without doing anything I loose the "-fanart"
8 Mile (2002) 1080P X264 AAC Tt0298203-fanart.jpg
becomes to
8 Mile (2002) x264 1080p SDR.jpg
Yes, it'll work exactly the same as for the corresponding video file. If you want to carry over specific patterns from the original file, then you can do that via your custom format, as always, same as for video files.
e.g.

This will add
-fanart if
{fn} contains
-fanart, which presumably applies only to your artwork files.
You can of course expand on this as suggested by @kim in his post above:
kim wrote: ↑03 Mar 2020, 15:22
you can use something like this:
Code: Select all
{ext = 'jpg' ? '-' + fn.match(/fanart|otherword/) : ''}
Re: Some questions regarding renaming
Posted: 03 Mar 2020, 18:08
by justkidding
Now I get it

.
When using the GUI is there a way to change the minimum duration for video files?
I know for scripts there is --def minLengthMS=0 but I don't find any option is the windows app?
Re: Some questions regarding renaming
Posted: 03 Mar 2020, 21:10
by kim
" problem that it adds a space before the "-". "
do you use this ?
Code: Select all
/data/Movies/{az}/{collection}/{ny.UpperInitial()}/{n.upperInitial()} ({y})/{n.upperInitial()} ({y}) {fn.matchAll(/UHD|4K|MVC|framepacked|FSBS|HSBS|HOU|FOU/)} {source} {special} {tags} {vf} {vc} {hdr} {s3d} {aco} {channels} {audioLanguages} {subt}
the problem is the spaces between {}'s "{a} {b} {c}"
fix = {' '+a}... now only a space if a is not empty
so like this:
Code: Select all
/data/Movies/{az}{'/'+collection}{'/'+ny.upperInitial()}{'/'+n.upperInitial()}{' ('+y+')'}/{n.upperInitial()}{' ('+y+')'}{' '+fn.matchAll(/UHD|4K|MVC|framepacked|FSBS|HSBS|HOU|FOU/)}{' '+source}{' '+special}{' '+tags}{' '+vf}{' '+vc}{' '+hdr}{' '+s3d}{' '+aco}{' '+channels}{' '+audioLanguages}{' '+subt}
Code: Select all
{ext = 'jpg' ? fn.match(/((?:-)(?:fanart|banner|clearart|clearlogo|discart|landscape|poster)$)/) : ''}
"Also I have a problem with one of my video files in finding the audio languages using your script"
I dont see a problem
try only my format in the GUI... what is output ?
viewtopic.php?f=5&t=5285&p=48761#p48761
Re: Some questions regarding renaming
Posted: 03 Mar 2020, 21:38
by justkidding
kim wrote: ↑03 Mar 2020, 21:10
" problem that it adds a space before the "-". "
do you use this ?
Code: Select all
/data/Movies/{az}/{collection}/{ny.UpperInitial()}/{n.upperInitial()} ({y})/{n.upperInitial()} ({y}) {fn.matchAll(/UHD|4K|MVC|framepacked|FSBS|HSBS|HOU|FOU/)} {source} {special} {tags} {vf} {vc} {hdr} {s3d} {aco} {channels} {audioLanguages} {subt}
the problem is the spaces between {}'s "{a} {b} {c}"
fix = {' '+a}... now only a space if a is not empty
so like this:
Code: Select all
/data/Movies/{az}{'/'+collection}{'/'+ny.upperInitial()}{'/'+n.upperInitial()}{' ('+y+')'}/{n.upperInitial()}{' ('+y+')'}{' '+fn.matchAll(/UHD|4K|MVC|framepacked|FSBS|HSBS|HOU|FOU/)}{' '+source}{' '+special}{' '+tags}{' '+vf}{' '+vc}{' '+hdr}{' '+s3d}{' '+aco}{' '+channels}{' '+audioLanguages}{' '+subt}
Awesome, thank you!
kim wrote: ↑03 Mar 2020, 21:10
"Also I have a problem with one of my video files in finding the audio languages using your script"
I dont see a problem
try only my format in the GUI... what is output ?
viewtopic.php?f=5&t=5285&p=48761#p48761
I get this:
[Expression yields empty value: Binding "default": undefined] 8 Mile (2002)
I found some other files were I have the same problem. For these I get the same message.
For one file, which is an .iso I get following error:
[Expression yields empty value: Binding "audio": java.lang.NullPointerException] The BFG (2016)