Move "Featuring" from Artist to Title

Hello. Right now in the Artist column i have for example Mariah Carey Feat. abc, Mariah Carey feat. def, Mariah Carey Feat. xyz etc. etc. I want to keep Mariah Carey in the column, but move Feat. NN.
I want it removed to the Title column.
Example:

Before
TITLE: O Come All Ye Faithful / Hallelujah Chorus
ARTIST: Mariah Carey Feat. Patricia Carey

New
TITLE: O Come All Ye Faithful / Hallelujah Chorus (Feat. Patricia Carey)
ARTIST: Mariah Carey

How do I do that?

2 Likes

Action: Guess Values
Source Format: %title% $regexp(%artist%,(.*) Feat. (.*),'('Feat. $2')' +++ $1)
Guessing Pattern: %title% +++ %artist%

1 Like

Wow that's fantastic. Thank's for the quick answer. :rolleyes:

Thanks for this RegExp!
For all those who use a german Mp3tag:
"Guess Values" means "Tag-Felder importieren" :wink:

Hi Pone Thanks for this but I was wondering if you could help me out with a very similar task

Is it possible to move whatevers after feat inside any parenthesis if applicable of the title?
Artist: Abel Ramos feat Rozalla
Title: Where Is The Love (Antoine Clamaran Remix)

Result required:
Artist: Abel Ramos
Title: Where Is The Love feat Rozalla (Antoine Clamaran Remix)

Also could this work if there were no parenthesis in the title?

Thanks in advance.

here you go:

Action: Guess Values
Sourceformat: $regexp(%artist%,(.*) feat (.*),$1,1) - $regexp(%title%,(.*) \((.*)\),$1,1)$mid(%artist%,$strstr($lower(%artist%), feat),999)$mid(%title%,$strstr(%title%,' ('),999)
Guessing Pattern: %artist% - %title%

1 Like
WORKS

You make it sound so so easy :stuck_out_tongue:

Many thanks pone

Hello guys.

I have a similar problem which first part was already solved with the first regex.
( Source Format: %title% $regexp(%artist%,(.*) Feat. (.*),'('Feat. $2')' +++ $1)
Guessing Pattern: %title% +++ %artist% )

But now i need to know, how to do the following:

Before
Artist: Rihanna Feat. Eminem
Title: Love The Way You Lie (Part II)

The required result is like
Artist: Rihanna
Title: Love The Way You Lie (Part II Feat. Eminem)

But for batch-processing, it should either only put the "Feat."-part into the title or, if there are already brackets, put it into them like above.

Is this possible?

Thanks in advance :slight_smile:

1 Like

With your/my old action, you get:
Title: Love The Way You Lie (Part II) (Feat. Eminem)

So the simplest solution is an additonal replace function to get rid of the brackets in the middle:
$replace(...,') (', )

Action: Guess Values
Source Format: $replace(%title% $regexp(%artist%,(.*) Feat. (.*),'('Feat. $2')' +++ $1),') (', )
Guessing Pattern: %title% +++ %artist%

1 Like

Thanks for the solution, i thought it should be with with an if-condition, but it's much simpler :flushed:

I also have a very similar request for this topic...

My current tags are $num(%track%,2) - %artist% - %title%

ex.) 13 - 2 Pistols feat. Trey Songz - That's My Word

I just want to put the feat. portion into parenthesis so it looks like:

13 - 2 Pistols (feat. Trey Songz) - That's My Word

thanks!

The way you describe it you do not want to manipulate the TAGS but the FILENAME.
I would suggest that you fill the tags first by reimporting them from the filename.
Then create an actiongroup with two actions,
one of the type "replace"
in which you replace "feat" with "(feat"
(underscore to illustrate a blank space)

the second action in that group is "Replace with regular expression"
in which you replace
$
(which stands for "end of field")
with
)

Then use the converter tag - filename to create your new filenames.

Is there any way that you could explain what each of your strings is doing? Especially the one that adds 999. I'm not sure I follow that.

I managed to manipulate it so that it can distinguish between Feat, Ft. and F., but I have some titles that say (Remix). I would like the Ft. "Secondary Artist" to be before the (Remix) paranthesis, while learning what is being done.

Thanks a ton!!

Better than sifting through 5k songs by hand...

Before:
Artist: Abel Ramos feat Rozalla
Title: Where Is The Love (Antoine Clamaran Remix)

Result required:
Artist: Abel Ramos
Title: Where Is The Love feat Rozalla (Antoine Clamaran Remix)

Action: Guess Values
Sourceformat: $regexp(%artist%,(.*) feat (.*),$1,1) - $regexp(%title%,(.*) \((.*)\),$1,1)$mid(%artist%,$strstr($lower(%artist%), feat),999)$mid(%title%,$strstr(%title%,' ('),999)
Guessing Pattern: %artist% - %title%

The result of the sourceformat string must be "Abel Ramos - Where Is The Love feat Rozalla (Antoine Clamaran Remix)", what coresponds to the Guessing Pattern "%artist% - %title%"
The sourceformat has four parts:

%artist% = Abel Ramos feat Rozalla
string result = Abel Ramos $regexp(%artist%,(.*) feat (.*),$1,1)
(the 1 at the end of the string is for ingonring cases -> Feat = feat)

%title% = Where Is The Love (Antoine Clamaran Remix)
string result = Where Is The Love
$regexp(%title%,(.*) \((.*)\),$1,1)
(the 1 at the end of the string is for ingonring cases, would not be necessary here)

%artist% = Abel Ramos feat Rozalla
string result = feat Rozalla
$mid(%artist%,$strstr($lower(%artist%), feat),999)

%title% = Where Is The Love (Antoine Clamaran Remix)
string result = (Antoine Clamaran Remix)
$mid(%title%,$strstr(%title%,' ('),999)

$mid(x,i,999) is nonsense. it is the same as $cutleft(x,i)
Seems as i was thinking in twisted ways. I added 999 to have a position which is after the end, to make sure nothing is cutted away at the end.

for basic explanation of the scripting functions, look here:
https://docs.mp3tag.de/scripting

2 Likes

to format the %artist% tag-field:
Action: Format Value
Field: ARTIST
Formatstring: $regexp(%artist%,(.+?) ((?:featuring|feat|ft).?) (.+),'$1 ($2 $3)')

to format the filename and leave the %artist% field as it is:
Converter: Tag - Filename
OR
Action: Format Value
Field: _FILENAME
Formatstring: $num(%track%,2) - $regexp(%artist%,(.+?) ((?:featuring|feat|ft).?) (.+),'$1 ($2 $3)') - %title%

Ah, thank you Pone, that first one did the trick. Unfortunately, my iPod doesn't sort things properly when the (feat. ... ) portion is in the artist, so I'm using one of your previous scripts to append it to the title, which I had before but thought I could move it to the proper field.

Sorry for the double post...

when I run the first script you gave me it creates...

TITLE: We Run It
ARIST: 2 Pistols feat. Slick Pulla & Blood Raw

to

TITLE: We Run It
ARTIST: 2 Pistols (feat. Slick Pulla & Blood Raw)

but...

after running the others I get

TITLE: We Run It (feat. Slick Pulla & Blood Raw)
ARTIST: 2 Pistols (feat. Slick Pulla & Blood Raw)

...

I want to move it from ARTIST back to TITLE, not just copy it.

Have you tried the tag-field %albumartist% for sorting?

%albumartist% = 2 Pistols
%artist% = 2 Pistols feat. Trey Songz

same %albumartist% for every track of the album, different %artist% for every track.

Action: Format Value
Field: ALBUMARTIST
Formatstring: $regexp(%artist%,(.+?) ((?:featuring|feat|ft).?) (.+),$1)

I don't know exactly what script you used, but for:

TITLE: We Run It
ARTIST: 2 Pistols (feat. Slick Pulla & Blood Raw)
to
TITLE: We Run It (feat. Slick Pulla & Blood Raw)
ARTIST: 2 Pistols

use:
Action: Guess Values
Source Format: %title% $regexp(%artist%,'(.*) (\(?(?:featuring|feat|ft).? .*)',$2 +++ $1,1)
Guessing Pattern: %title% +++ %artist%

Yeah, iPod classics ignore the ALBUMARTIST field and only sorts by ARTIST. So when you have artist feat. x, it creates several artists that all connect with the same album. It makes for a very ugly artist listing on the iPod. iTunes on the other hand can sort things any way you want. They just are too dumb to implement it into their hardware.

I have my music collection / ipod set up to browse... Genre > Artist > Album

With the ARTIST field filled out the way it is, the only way to fix the 'multiple artists to one album' problem is to tell iTunes that these are compilation albums, but then you can't get to them in the usual Genre > Artist > Album method, they're kept together under their own "Compilations" category, which makes a mess of easing browsing.