[Hilfe] feat. von artist nach title

Guten Tag alle miteinander,

unzwar habe ich folgendes Anliegen:
Ich hab viele Songs auf meinem Rechner, bei denen die Features beim Interpreten miterwähnt werden. Für mich macht es aber mehr Sinn, wenn die Features nach dem Songtitel erwähnt werden.

Wie kann ich nun also eine Aktion erstellen bei der "feat." (+ alle möglichen Schreibweisen: featuring FEATURING ft ft. FT Feat. FEAT. FEAT ) und die darauf folgenden Künslternamen hinter den Titel gesetzt werden?
Ein weiteres Kriterium soll noch sein, dass bei mehreren gefeaturten Künstlern (die durch Kommas, "und"/"and" oder "&" getrennt sind) eben diese noch mitgenommen werden hinter den Songtitel. Und hinter dem "feat." ein Leerzeichen und groß beginnen.
Außerdem werden die gefeaturten Künstler oft in Klammern geführt, auch das möchte ich entfernen.

Beispiel:
Jetzt: Kanye West (ft. Rihanna, Elton, John, Fergie..) - All Of The Lights
Soll: Kanye West - All Of The Lights feat. Rihanna, Elton John, Fergie..

Ich wäre euch seeehr dankbar für Hilfsvorschläge!

Mit freundlichen Grüßen
floriansascha

die Frage hab ich ähnlich zwar erst vor ein paar Tagen beantwortet
/t/11096/1
aber hier nochmal für deine Wünsche angepasst:

Aktion:
Tag-Felder importieren
Quellormat:
%title% $regexp($regexp(%artist%,(.)( | '('| '[')(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Fe
at.|FEAT.) (.
),feat. $4 XXXXX $1),(')'|']') XXXXX , XXXXX )
Formatstring:
%title% XXXXX %artist%

Hab ne Zeit gabraucht bis ich das richtige Quellformat hatte.
Erkennt diese Schreibweisen von featuring:
featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FE
AT.
Weitere lassen sich durch | getrennt beliebig hinzufügen.
Schreibt immer "feat." wie du das willst und entfernt ausserdem rund und eckige Klammern um das ganze.

EDIT:
Das Quellformat muss in eine Zeile. Aus mir nicht ersichtlichen Gründen wird das hier im Forum immer so in Zeilen getrennt, dass bei kopieren und Einfügen ein Zeilensprung entsteht. Hab mehrmals versucht die Nachricht zu editieren.

Vielen Dank für die Hilfe!!! :slight_smile:

Ich hab jedoch noch 2 Probleme:

  1. Wenn der Dateiname bzw. Tag schon von der Anordnung richtig ist, dass also die Features nach dem Titel stehen, dann wird keine Änderung vorgenommen.

Ist der Dateiname also Kanye West - All Of The Lights (ft. Rihanna, Elton, John, Fergie..)
dann wird nix geändert. Kann man da noch etwas in die Quelldatei, die du mir bereits geschriebn hast nachtragen oder wäre dafür noch eine neue Aktion notwendig?

  1. Würde ich gerne noch jegliche Formen von produced by -> (produced by|Produced By|PRODUCED BY| prod by|prod By|prod. By|produced|prod_by_|prod.by|Prod|Prod.|prod|prod.)
    zu -> (prod. by Produzent Xy) konvertieren. Das also in Klammern setzen und den Produzentennamen mit Großbuchstaben beginnen und falls dieser aus mehreren Worten besteht, alle Worte mit einem Großbuchstaben beginnen.

Ich entschuldige mich für die Unannehmlichkeiten und würde mich abermals sehr über hilfreiche Vorschläge etc. freuen!

Nur für den Tag (vorher das Quellformat testen z.B in der Vorschau Tag-Dateiname, ob das auch in jedem Fall das Muster im Formatstring liefert):
Quellformat:

$regexp(%artist% XXXXX %title%,(.*)( | \'('| \'[')(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Fe
at.|FEAT.) (.*)( |'\)'|'\]')XXXXX (.*),$1 XXXXX $6 feat. $4)
Formatstring: %artist% XXXXX %title%

Soll der Dateiname nur überprüft oder die entsprechenden Teile dann in den Tag übernommen werden?

  1. Aktion Tagfelder formatieren:
    Feld: musst du wissen
    Formatstring: $regexp(%das feld von oben%,( |'('|'[')(produced by|Produced By|PRODUCED BY| prod by|prod By|prod. By|produced|prod_by_|prod.by|Prod|Prod.|prod|prod.)(.*)($|')'|']'),'('prod. by $caps($3)')')

Wenn das nicht geht (ich glaube man kann im 3 Parameter von regexp keine Funktionen verwenden), nimm diesen Formatstring:

$regexp(%das feld von oben%,(.*)( |'\('|'\[')(produced by|Produced By|PRODUCED BY| prod by|prod By|prod. By|produced|prod_by_|prod._by_|Prod|Prod.|prod|prod.)(.*)($|'\)'|'\]'),$1 '('prod. by) $caps($regexp(%das feld von oben%,(.*)( |'\('|'\[')(produced by|Produced By|PRODUCED BY| prod by|prod By|prod. By|produced|prod_by_|prod._by_|Prod|Prod.|prod|prod.)(.*)($|'\)'|'\]'),$4')'))

zu ft|Ft|FT|ft.|Ft.|FT. usw.

Wenn man mit . tatsächlich einen Punkt meint, sollte man . schreiben, sonst ist damit jedes Zeichen gemeint.

Abermals danke für die schnelle Hilfe!

zu 1.
Ich habe das als "Aktion: Tagfelder importieren" verwendet und es passiert leider rein garnichts, wenn ich diese Aktion ausführe. Woran kann das liegen?

zu 2.
Wenn ich als Feld z.b. Dateiname angebe und diese Aktion ausführen möchte, dann wird lediglich der Dateiname gelöscht. Lege ich als Feld Title fest, dann wird eben jener komplett entfernt.. :S

kann da noch jemand helfen?

btw: frohe weihnachten an alle!

Ich vermute mal, dass du mit "Titel" nur den Dateinamen meinst.
Die Hilfen, die dir gegeben wurden, arbeiten aber mit dem in der MP3-Datei enthaltenen Tag %title%.
Da du anscheinend kein %title% Tag gefüllt hast, sondern nur auf die Dateinamen guckst, führen alle Aktionen, die ein gefülltes Tag voraussetzen, zu leeren Ausgaben.
Über die Feiertage wäre es jetzt vielleicht ganz witzig, zuerst mit der Funktion "Konverter: Dateiname - Tag" die tags zu füllen.
Und dann lässt du eine der obigen Aktionen auf die Dateinamen los.

Hallo an alle hier
Also die Beiträge bezüglich dem feat und andere schreibweisen passend verschieben ist sehr Interesant.
Hab nun etliche Stunden damit verbracht das alles halbwegs nachzu vollziehen und auch zu testen aber irgendwie kapier ich das nicht ganz.

Diese Aktion selber hat zwar ganz gut funktioniert aber nicht zu 100% das Ergebnis gebracht wie "ICH" es gerne bei mir in meiner Sammlung hätte

Aktion: 
Tag-Felder importieren
Quellormat: 
%title% $regexp($regexp(%artist%,(.*)( | \'('| \'[')(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Fe
at.|FEAT.) (.*),feat. $4 XXXXX $1),(\')'|\']') XXXXX , XXXXX )
Formatstring:
%title% XXXXX %artist%

Mein Wunsch wäre eben das die feat artisten ebenfalls von artist in den Titel verschoben werden aber die dann in Klammern stehen sollten.

Ich hab zwar null durchblick mit all den variabeln (kann hier im Forum lesen und lesen aber versteh es trotzdem nicht bzw kapier es einfach nicht).
Ich habe trotzdem hab ich ein paar mp3´s in einen Testordner verschoben, zum rumprobieren und testen, mal das ein oder andere Symbol aus der Aktion entfernt oder geändert wie ich dachte das es sein könnte... Sobald ich das gemacht habe hat sich aber nichts mehr getan (sagte ja ich kapier das einfach nicht).

nun meine Bitte:
könnte mir jemand von euch die aktion so abändern das beim ergebnis dann die feat. artisten hinter dem titel in klammern stehen
so in der art von

Timbaland feat Katy Perry - If We Ever Meet Again
Timbaland feat. Katy Perry - If We Ever Meet Again
Timbaland featuring Katy Perry - If We Ever Meet Again
Timbaland (feat Katy Perry) - If We Ever Meet Again
usw. zu
Timbaland - If We Ever Meet Again (feat Katy Perry)

Es sollte danach auch auf keinen fall kein punkt hinter feat. stehen sondern ...feat Katy...
Es mag vielleicht nur eine kleine Änderung sein aber ich bekomm es alleine einfach nicht hin.

learning by doing
oder
lesen und an Bespieldateien umsetzen.
Hab anfangs auch in den Wald geschaut und keinen Baum gesehen

so ist es: A-artist - B-Titel ( feat Sonnenschein )
so soll es sein: A-artist ( feat Sonnenschein ) - B-Titel

Vorschlag, filter mal mit
%Title% MATCHES "(ft|Feat|feat.)

nun haste alle Titel mit feateintrag

erstelle eine Aktion unter :mt_act:
benenne das Spaltenfeld welches deine feats beinhaltet
setzt den Teil was verschoben werden soll ein " ( feat"
ersetzte das zusätzlich mit " - ( feat"
das ganze abspeichern

einen Titel auswählen, die neue Aktion drüberlaufen lassen
und siehe da stehts erst mal so:
A-artist - B-Titel - ( feat Sonnenschein )
als nächstes Dateiname - Dateiname :mt_ftf: anklicken
Maske über alte Var.: %1 - %2 - %3
Maske über neue Var. %1 %3 - %2
jetzt müsste es so aussehen: A-artist ( feat Sonnenschein ) - B-Titel

Feedback wäre dienlich

Es ist angebracht, dass du dein Vorhaben in mehrere Schritte zerlegst, vielleicht ist es dann besser zu verstehen und zu bearbeiten.
Zuerst vereinheitlichst du die verschiedenen Schreibweisen von "featuring".
Dazu kann eine der folgenden Aktionen dienlich sein.
Dann sehen wir weiter.

Um zunächst die Übersicht zu verbessern, bietet es sich an, den Filter zu setzen:

ARTIST MATCHES "(?:featuring|feat\.?|ft\.?)(?=\s)"

Aktionen für das Tag-Feld ARTIST zur Vereinheitlichung der Schreibweise der Varianten von "featuring".

Anfang Aktionengruppe Format ARTIST#feat (ohne Punkt)

Aktion #1
Aktionstyp 5: Tagfeld formatieren
Feld: ARTIST
Formatstring: $regexp(%ARTIST%,'(?:featuring|feat.?|ft.?)(?=\s)','feat',1)
Ende Aktionengruppe Format ARTIST#feat (ohne Punkt) (1 Aktion)

Anfang Aktionengruppe Format ARTIST#feat. (mit Punkt)

Aktion #1
Aktionstyp 5: Tagfeld formatieren
Feld: ARTIST
Formatstring: $regexp(%ARTIST%,'(?:featuring|feat.?|ft.?)(?=\s)','feat.',1)
Ende Aktionengruppe Format ARTIST#feat. (mit Punkt) (1 Aktion)

Anfang Aktionengruppe Format ARTIST#ft (ohne Punkt)

Aktion #1
Aktionstyp 5: Tagfeld formatieren
Feld: ARTIST
Formatstring: $regexp(%ARTIST%,'(?:featuring|feat.?|ft.?)(?=\s)','ft',1)
Ende Aktionengruppe Format ARTIST#ft (ohne Punkt) (1 Aktion)

Anfang Aktionengruppe Format ARTIST#ft. (mit Punkt)

Aktion #1
Aktionstyp 5: Tagfeld formatieren
Feld: ARTIST
Formatstring: $regexp(%ARTIST%,'(?:featuring|feat.?|ft.?)(?=\s)','ft.',1)
Ende Aktionengruppe Format ARTIST#ft. (mit Punkt) (1 Aktion)

DD.20110312.1020.CET

Um einen Textteil aus dem einen Tag-Feld in ein anderes Tag-Feld zu verschieben, müssen beide Tag-Felder bearbeitet werden.
Das kann man mit zwei Aktionen "Tag-Feld formatieren" machen oder mit einer Aktion "Tag-Felder importieren".

In beiden Fällen werden beide Tag-Felder als Eingabe benötigt, wegen der "Vermischung über Kreuz".
Aus dem einen Tag-Feld wird etwas entfernt, was in das andere Tag-Feld eingefügt wird.

Die Kombination der beiden Tag-Feld Inhalte zu einer einzigen langen Zeichenkette kann man zum Beispiel mit diesem 'Klebetrick' bzw. mit dieser 'Trennsequenz' erreichen:
%ARTIST%'==='%TITLE%

Der 'Klebstoff' bzw. die 'Trennsequenz' ist in diesem Fall die Zeichenkette '==='.
Diese Trenner-Zeichenkette kann man kreativ gestalten, sie darf selbstverständlich nicht noch einmal in einem der Tag-Felder enthalten sein und muss deshalb eindeutig sein.

Fallbeispiel 1.1 (zwei Aktionen "Tag-Feld formatieren")

TITLE <== $regexp(%ARTIST%'==='%TITLE%,'^(.+?)\s\(?(ft\s.+?)\)?===(.+?)$','$3 ($2)') ARTIST <== $regexp(%ARTIST%'==='%TITLE%,'^(.+?)\s\(?(ft\s.+?)\)?===(.+?)$','$1')

... oder ...

Fallbeispiel 1.2 (zwei Aktionen "Tag-Feld formatieren")

TITLE <== $regexp(%ARTIST%'==='%TITLE%,'^(.+?)\s\(?(ft\s.+?)\)?===(.+?)$','$3 ($2)') ARTIST <== $regexp(%ARTIST%,'^(.+?)\s\(?(ft\s.+?)\)?$','$1')

... oder ...

Fallbeispiel 2 (eine Aktion "Tag-Felder importieren")

Quellformat

$regexp(%ARTIST%'==='%TITLE%,'^(.+?)\s\(?(ft\s.+?)\)?===(.+?)$','$1===$3 ($2)')

Formatstring

%ARTIST%===%TITLE%

Neben den vorstehenden Fällen bietet Mp3tag noch andere Möglichkeiten der Skriptsprache im Zusammenspiel mit den Aktionen.
So kann man auch die 'normalen' Standardfunktion für die Textmanipulationen benutzen, die für einen Beginner leichter zu verstehen sind.

Fallbeispiel 3 (der "einfache" Weg)
Was man mit Hilfe der Funktion $regexp mit einem "regulären Ausdruck" knapp und flexibel gestalten kann, dass muss man mit den einfachen Skripting Funktionen ausführlich und für jeden Fall einzeln gestalten.
Aber auch dabei kann man Entscheidungsmöglichkeiten berücksichtigen durch Anwendung der Funktion $if.

Um aus der Zeichenkette 'Artist (ft FeaturedArtist)' den Textteil mit dem Wert 'Artist' zu isolieren, das kann man unterschiedlich beschreiben:

  • Finde die erste öffnende Klammer, gehe ein Zeichen zurück, und von dort an lösche alle folgenden Zeichen.
  • Finde die erste öffnende Klammer, gehe zwei Zeichen zurück, und von dort nehme alle Zeichen links.

0000000001111111111222222
1234567890123456789012345
Timbaland (ft Katy Perry)
----------^--------------
Timbaland (ft Katy Perry)
--------^----------------
Timbaland (ft Katy Perry)
=========

STEP1 <== $strchr(%ARTIST%,'(') STEP2 <== $sub(%STEP1%,2) STEP3 <== $left(%ARTIST%,%STEP2%) ARTIST <== $left(%ARTIST%,$sub($strchr(%ARTIST%,'('),2))

0000000001111111111222222
1234567890123456789012345
Timbaland (ft Katy Perry)
----------^--------------
Timbaland (ft Katy Perry)
------------------------^
Timbaland (ft Katy Perry)
-----------^-------------
Timbaland (ft Katy Perry)
-----------=============

STEP1 <== $strchr(%ARTIST%,'(') STEP2 <== $strrchr(%ARTIST%,')') STEP3 <== $add(%STEP1%,1) STEP4 <== $sub(%STEP2%,%STEP3%) STEP5 <== $mid(%ARTIST%,%STEP3%,%STEP4%) FEATARTIST <== $mid(%ARTIST%,$add($strchr(%ARTIST%,'('),1),$sub($strrchr(%ARTIST%,')'),$add($strchr(%ARTIST%,'('),1)))

Welche Werkzeuge aus dem Mp3tag Werkzeugkasten letztendlich genutzt werden können, das wird vom zu lösenden Problem bestimmt und liegt in der Entscheidung und bei den technischen Fähigkeiten des jeweiligen Mp3tag Benutzers.

DD.20110312.1535.CET

Hallo liebe Leute, hatte vergessen hier wieder reinzugucken und hab das jetzt erst nachgeholt.
Ich kann mich nur immerwieder für eure Hilfsbereitschaft bedanken, jedoch habe ich immernoch ein paar kleine Probleme. Um jetzt nochmal auf mein Anfangsproblem zurückzukommen.

Also pone's Variante klappt super.
Mit der Variante werden die Features in den Titeltag übertragen und auch in meine gewünschte Schreibweise umgewandelt! Nur wie kann ich jetzt Features, die bereits im Titeltag stehen in mein gewünschtes Format umwandeln? (Die bleiben von der Aktion ja unverändert)

Kanye West - All Of The Lights (Ft. Elton John..) -> Kanye West - All Of The Lights feat. Elton John..

Gnor's "produced by" Vorschlag funktioniert bei mir leider überhaupt nicht :unsure:

Ich habe als Feld TITLE genommen, da sich das "prod. by" ja schließlich dort befindet
Bei der 1. Variante bekomme ich ein doppeltes "by" und eine doppelte schließende klammer am Ende und 2 bis 3 leerzeichen zwischen "prod. by" und "produzentenname"
Bei der 2. Variante erscheint "[ SYNTAX ERROR IN FORMATTING STRING ]", ein doppeltes Leerzeichen, eine doppelte schließende Klammer am Ende und die Schreibweise wird nicht verändert.

Wäre jemand nochmal so nett sich meinem Problem zu widmen?

Hallo zusammen,

ich finde die Idee genial. Ich würde es gerne verstehen. Habe mir mal die verlinkten Artikel durchgeschaut und habe noch ein paar Frage:

%title% $regexp($regexp(%artist%,(.)( | '('| '[')(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FEAT.) (.),(feat. $4 XXXXX $1),(')'|']') XXXXX , XXXXX )

in diesem String habe ich ein kleines Probelm.

(feat. $4 XXXXX $1),(')'|']') XXXXX , XXXXX )

Wie interpretiere ich diesen Teil?

(feat. gibt später im Titel (feat. aus.

Was bedeuten die $4 und $1 ?

Ich wollte eine schließende Klammer noch einfügen aber ich habe keine Idee wo?

Danke

Gruß

kann wirklich niemand helfen?

Danke

$1 ist der Inhalt der ersten Klammer, $4 der Inhalt der vierten Klammer im zweiten Parameter der inneren $regexp Funktion:
$regexp(%artist%,(.)( | '('| '[')(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FEAT.) (.),(feat. $4 XXXXX $1)

Schau zur deutschen Hilfe mit F1 in Mp3tag, geh dort zu Skriptbefehle, und folge dann dem etwas verstecktem Link bei $regexp(x,expr,repl) zu den regulären Ausdrücken, dort wird das erklärt.

Wo brauchst du noch ein schließende Klammer? Ist die nicht schon enthalten?

Im Prinzip ist die Syntax wie im ersten Post des Threads nur das ich gerne (feat. ...) in klammern schreibe.

Nach etwas Spielen mit dem Ausdruck habe ich die Klammer vor dem "feat." eingefügt. Aber der schließende Ausdruck funktioniert nicht:

%title% $regexp($regexp(%artist%,(.)( | '('| '[')(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FEAT.) (.),<!--coloro:#FF0000-->(feat. $4 XXXXX $1),(')'|']') XXXXX , XXXXX )

Dei rote öffnet den Ausdruck aber wo kommt die geschlossene hin.

Danke

Die schließende Klammer muss nach $4.
Hab dir ausserdem noch die ewig lange Feat... Reihe verkürzt. Das ,1 in der inneren $regexp Funktion bewirkt, das Groß- und Kleinschreibung nicht berücksichting wird, .? nach (featuring|feat|ft) bewirkt, das alle Schreibungen mit oder ohne Punkt erkannt werden.

Aktion: Tag-Felder Importieren
Quellformat: %title% $regexp($regexp(%artist%,(.)( | '('| '[')(featuring|feat|ft).? (.),'('feat. $4')' XXXXX $1,1),(')'|']') XXXXX , XXXXX )
Formatstring: %title% XXXXX %artist%

Danke. Das mit der Groß- und Kleinschreibung ist ne gute Idee. Hatte ich auch schon gelesen.

Aber das mit der Klammer funktioniert nicht.

Gruß

PS: Habe auch den zeilenumbruch aus dem String entfernt.

Was funktioniert nicht? Was erhältst du aus Ergebnis?

Könntest du bitte ein Beispiel angeben mit Ist und Soll Inhalt für Artist und Title Felder?