Playlisten

Hier ist ein Beispiel für ein Export-Skript wie das automatische Erzeugen von mehrfachen Playlisten funktioneren kann auch mit Anwendung von "Ausschlussfiltern".

  1. In Mp3tag Dateien laden und markieren.
  2. Mp3tag Exportskript ausführen ... "20151212.Test.Split List#Export GENRE playlist to SL file.mte"
  3. "Mp3tagSplitList.exe" ausführen mit der zuvor erzeugten "Playlist.Genre.SL.txt".
  4. Ergebnis kontrollieren.

20151212.Test.Split List#Export GENRE playlist to SL file.mte

01: $filename($getEnv('USERPROFILE')'\Desktop\Playlist.Genre.SL.txt',UTF-8)

02: $loop(%GENRE%)$loop(%_path%)$puts(FilterStatus,1)
03: $puts(FilterStatus,$ifgreater(%_length_seconds%,900,0,$get(FilterStatus)))
04: $puts(FilterStatus,$ifgreater(80,%BPM%,0,$get(FilterStatus)))
05: $puts(FilterStatus,$ifgreater($strstr(%_folderpath%,'Beatles'),0,0,$get(FilterStatus)))
06: $puts(FilterStatus,$ifgreater($strstr(%folderpath%,'Zulu'),0,0,$get(FilterStatus)))
07: $puts(FilterStatus,$ifgreater($strstr(%ALBUM%,'Love & Hate'),0,0,$get(FilterStatus)))
08: $puts(FilterStatus,$ifgreater($strstr(%ARTIST%,'Frank Sinatra'),0,0,$get(FilterStatus)))
09: $ifgreater($get(FilterStatus),0,
10: '$$$FILEAPPEND='$getEnv('USERPROFILE')'\Desktop\Playlists\Genre\Playlist.Genre.'$if2($validate(%GENRE%,''),'undefined')'.m3u8'
11: '#EXTM3U'
12: '###GENRE='$if2(%GENRE%,'undefined')
13: $loop(%ARTIST%)$loop(%TITLE%)'#EXTINF:'%_length_seconds%','%ARTIST%' - '%TITLE%
14: %_path%
15: $loopend()$loopend()'$$$END'$char(13)$char(10),)$loopend()$loopend()

20151212.Test.Split_List_Export_GENRE_playlist_to_SL_file.mte (987 Bytes)

DD.20151212.1122.CET

20151212.Test.Split_List_Export_GENRE_playlist_to_SL_file.mte (987 Bytes)

1 Like

Wow 1000 Dank das Du Dir diese Mühe gemacht hast. :w00t:

--- Nachtrag:
Ich habe es tatsächlich geschafft die Listen so zu erstellen wie ich mir das dachte. Ohne Detlev wäre mir das nicht möglich gewesen. DANKE! verneig

Mahlzeit,

Ich weiß 2015 ist schon eine Weile her aber seitdem funktionieren die Filter ohne Probleme. Lediglich eine Form des Exports ist mir nicht gelungen. Hier erstmal der Standard Export code den ich in den einzelnen Export Dateien nutze.

$filename('D:\liquidsoap\playlists\buffer\newstuff.m3u',ansi)
'#EXTM3U'
$loop(%_filename%)$loop(%title%)$puts(FilterStatus,1)

$puts(FilterStatus,$ifgreater($len(%replaygain_track_gain%),0,$get(FilterStatus),0))
$puts(FilterStatus,$ifgreater($strstr(%_folderpath%,'Amazon'),0,0,$get(FilterStatus)))

$ifgreater($get(FilterStatus),0,'#EXTINF:'%_length_seconds%','%ARTIST%' - '%TITLE%
%_path%,)
$loopend()$loopend()

Funktioniert soweit erstmal recht gut. Um nach UNIX Timestamp zu sortieren wollte ich den Loop Beginn wie folgt ändern.

$loop(%_file_create_datetime_raw%)$loop(%title%)$puts(FilterStatus,1)
[...]
$loopend()$loopend()

Das Problem ist allerdings, das wenn ich die Spalte im MP3 Tag selbst sortiere steht die neuste Datei zwar ganz unten aber die Sortierung stimmt.

In der Playlist welche exportiert wird stehen die Dateien aber in einer nicht nachvollziehbaren Sortierung drin...

Wo liegt mein Denkfehler? Eigentlich wollte ich eine Liste wo die neusten x Dateien drin stehen.

MfG
LostSoul :smiley:

QUOTE (Lostsoul @ Jun 5 2017, 21:02) <{POST_SNAPBACK}>
...
$loop(%_file_create_datetime_raw%)$loop(%title%)$puts(FilterStatus,1)
[...]
$loopend()$loopend()

...


Es ist mir nicht klar, warum du ein $loop(%title%) ausführst, wenn doch das Änderungsdatum wichtig ist.
Ich würde den Loop weglassen.

Also wenn ich richtig verstanden habe was DetlevD mir damals vermitteln wollte, dann ist die äußere Schleife nur dafür gedacht mit der Inneren Schleife von allen Tracks die mit den gewünschten Suchkriterien auszuwählen. Ich könnte auch zweimal das gleiche hinschreiben, das würde am Ergebnis nichts ändern.

Die Loops laufen wie gesagt mit anderen Suchkriterien tadellos. Nur mit dem Timestamp Tag kommt er nicht zurecht, also was das Sortieren nach selbigen angeht.

Ich habe Deinen Lösungsansatz allerdings schon ausprobiert gehabt. Die exportierte Playlist unterschied sich nicht von der wo beide Loops aktiv waren.

MfG
LostSoul

Vielleicht solltest du dir mal %_file_create_datetime_raw% mit ausgeben lassen.
Da sollte dann deutlich werden, ob und wie nach der Zeit sortiert wird.

Ein Mausklick auf den Spaltenkopf wechselt die Richtung der Sortierung.

Vielleicht geht es besser mit ... %_file_mod_datetime_raw% ...?

$filename($getEnv('USERPROFILE')'\Desktop\Test.Playlist.Timestamp.txt',UTF-8)$puts(
)'#EXTM3U'
$loop($num(%_file_mod_datetime_raw%,11))$loop(%_path%)
'#EXTINF:'$num(%_file_mod_datetime_raw%,11)$char(9)%_length_seconds%$char(9)%_filename_ext%
%_path%
$loopend()$loopend()

Absteigende Sortierung müsste so funktionieren ...

$loop($num($sub(10000000000,%_file_mod_datetime_raw%),11)) ... $loopend()

DD.20170606.1018.CEST, DD.20170606.1614.CEST, DD.20170606.2054.CEST,
DD.20170609.1425.CEST ($loop() berichtigt und Formatierung für %_file_mod_datetime_raw% auf 11 Stellen)

Probiere ich aus und geb Response. :slight_smile:

Das mit den Spalten war mir schon klar. Es geht mir eben darum das ich die x neusten Tracks in eine Playliste schreiben kann und wenn die Spalte beim ersten Klick von alt nach neu anzeigt würde das bei der Filterfunktion dann auch so sein und ich müsste eine Möglichkeit finden die Sortierung umzukehren damit eben die neusten 50 gespeichert werden.

MfG
LostSoul

Die Sortierung in MP3tag hat keinen Einfluss auf die Ausgabe im Report. Dort bestimmt die Variable in $loop() das Kriterium.
Deshalb wäre es ganz nützlich, anzusehen, was denn im obersten Sortierkriterium eigentlich steht.
Das Datum der Änderung oder Erzeugung sollte deshalb ruhig mit ausgegeben werden zur Kontrolle.

Sorry das es gedauert hat, war ne stressige Woche...

QUOTE (DetlevD @ Jun 6 2017, 10:18) <{POST_SNAPBACK}>
$filename($getEnv('USERPROFILE')'\Desktop\Test.Playlist.Timestamp.txt',UTF-8)$puts(
)'#EXTM3U'
$loop(%_file_mod_datetime_raw%)$loop(%_path%)
'#EXTINF:'%_file_mod_datetime_raw%$char(9)%_length_seconds%$char(9)%_filename_ext%
%_path%
$loopend()$loopend()<!--QuoteEnd--></div><!--QuoteEEnd-->

Also ich behaupte ja mal zu verstehen was das Script macht und muss feststellen das Ohrenkino recht hat und das ganze wird nach (in diesem Fall) %_path% sortiert. Ich habe den Code mal so weit gekürzt das nur noch Timestamp und _path ausgegeben werden und da ist dann deutlich zu sehen das er nach path sortiert.

Also versuch Nummer 2 ohne die zweite Loop:

$filename($getEnv('USERPROFILE')'\Desktop\Test.Playlist.Timestamp.txt',ansi)
$loop(%_file_mod_datetime_raw%)
%_file_mod_datetime_raw%$char(9)%_path%$loopend()

Hierbei stellt sich heraus das wieder nach _path sortiert wird bzw. ich gehe sogar soweit zu behaupten das nicht sortiert, sondern lediglich die Reihenfolge des Filesystems abgebildet wird.

Das ist jetzt schwer zu erklären und ich muss weiter ausholen. Mal davon abgesehen das bei meinen Exportfiles (meine Modifikation von DetlevDs Vorlagen) MP3 Tag sich wirklich seltsam verhält. Er exportiert alles richtig aber Ihm dabei zuzusehen verwundert schon. Der Fortschrittsbalken für den Export ist völlig nutzlos da er zwar die Anzahl der Dateien richtig zählt aber durch die zwei Loops kommt er wohl beim Balken mit den 100% Berechnungen durcheinander. Ich kann das nicht richtig erklären deshalb mal ein Video. Das Video ist Echtzeit also nicht wundern wenn da mal nix passiert das läuft tatsächlich so seltsam und "langsam" ab. Auch werden keine MP3 Tags geschrieben noch werden MP3 Files bearbeitet. Der Titel des Fortschrittfensters ist also ein wenig irreführend.

Playlisten Export [Echtzeit 72 Sekunden]

Man sieht recht gut das er den Balken kurz füllt dann stehenbleibt und anschließend nach einer Pause weitermacht. Dein Tip für die absteigende Sortierung lässt den Balken auch kurz wachsen führt dann aber zur Fehlermeldung das #export_create_news.mte nicht gefunden werden kann.

Zusammenfassend gibt es 3 Möglichkeiten. MP3TAG ist für diese Art des Exports nicht geeignet , es liegt ein Bug vor oder ich hab was falsch gemacht...

Auf alle Fälle Danke ich Euch für Eure Mühe und Ideen und bin dankbar für jeden weiteren Tip.

MfG
LostSoul

???
eine Datei mit Endung "mte" ist doch ein MP3tag-internes Export-Skript?! Wieso sollte eine mte-Datei im Rahmen eines Exports gesucht werden?
Und ein # im Dateinamen ist meiner Ansicht nach auch nicht zulässig.

Vielleicht wäre die Abbildung des gesamten Skripts in seiner aktuellen (anscheinend fehlerhaften) Form nützlich.

Alles gelesen was ich schrieb?

Naja zumindest ist es für Dich genauso unverständlich wie für mich.

Das wäre mir jetzt allerdings ganz neu. Ich habe seit 35 Jahren mit Computern zu tun aber das man # nicht im Filename verwenden darf... Nein das ist es nicht. Ich habe die Raute nur davor gesetzt damit ich in der Liste der Exportscripts nicht ständig runter scrollen muss. Als die Datei noch keine Raute hatte war das Ergebnis dasselbe.

Nochmal? Mein letzter Quelltext im vorherigen Post ist das gesamte Script mit welchem ich im Moment versuche das Problem mit Euch zu lösen. Wenn dieses kleine Script eine Liste ausgibt in welcher nach Create oder Change Datum sortiert wird, dann erst werde ich wieder anfangen die Infos welche ausgegeben werden sollen zu vervollständigen.

MfG
LostSoul

QUOTE (Lostsoul @ Jun 9 2017, 11:40) <{POST_SNAPBACK}>
... Also versuch Nummer 2 ohne die zweite Loop:
$filename($getEnv('USERPROFILE')'\Desktop\Test.Playlist.Timestamp.txt',ansi)
$loop(%_file_mod_datetime_raw%)
%_file_mod_datetime_raw%$char(9)%_path%$loopend()

Hierbei stellt sich heraus das wieder nach _path sortiert wird ...


Wie codiert "$loop(%_file_mod_datetime_raw%)" ... wird mit dieser Anweisung nicht nach Dateipfad sortiert, sondern nach dem Datum der letzten Speicherung in der Reihenfolge von alt nach neu.

Wenn du von "er" sprichst, dann meinst du wohl die Anwendung "Mp3tag", das wäre dann "die Anwendung", also weiblich und deshalb mit "sie" zu benennen, und du müsstest dann "ihr" zusehen und was "sie" dir zeigt.

Oder du kannst es auch benennen mit "es", das wäre dann "das Programm", also sächlich, und du müsstest dann aufpassen, was "es" dir zeigt und was "es" mit dir macht.

Aber Mp3tag mit "er" zu benennen, das ist schon etwas schräg, es sei denn du meinst mit "er" den Programmierer von Mp3tag, aber dieser hat seine Arbeit schon erledigt, indem er sein Programm Mp3tag es machen lässt mit dir bzw. für dich.

Im Übrigen stehst du mit deiner Kritik betreffend die Fortschrittsanzeige in Mp3tag nicht alleine da.

Hmm, ja, beides ist möglich, manchmal trifft die zweite Möglichkeit eher zu.

Hier ist ein einfaches Export-Skript, welches nicht selbst sortiert, sondern die Daten in der Reihenfolge ausgibt, wie die Dateien in der Mp3tag Listenansicht sortiert sind:

$filename($getEnv('USERPROFILE')'\Desktop\Test.loop.txt',ANSI)
$loop(0)
%_file_mod_datetime_raw%$char(9)%_path%$loopend()

... oder so ...

$filename($getEnv('USERPROFILE')'\Desktop\Test.loop.txt',ANSI)
$loop(0)
$num(%_file_mod_datetime_raw%,11)$char(9)%_path%$loopend()

DD.20170609.1312.CEST, DD.20170609.1406.CEST

Wie rufst du denn den Export auf?
Über das Menü Datei oder per Aktion?
wenn letzteres: könnte es sein, dass da noch eine weitere Aktion mit Haken versehen ist, die einen Export versucht und dann die Fehlermeldung bringt bzw. die von dir erwartete Datei überschreibt?

Bei mir jedenfalls produziert das von dir in Playlisten
gezeigte Script eine Ausgabe nach Datum, nicht nach Pfadbzw. dort, wo das Datum gleich ist, wird nach Pfad sortiert, wie im Script angegeben.

Habe jetzt das Textfile nochmal kontrolliert und Du hast Recht. Das die Sortierung so aussieht als wenn Sie nach Pfad erfolgt liegt wohl daran das ich auch schon Masstagging auf die Verzeichnisstruktur angewendet habe. Als ich jetzt mal am Ende der Exportdatei nachgesehen habe stehen dort tatsächlich die neusten am Ende.

[Nebenschauplatz]
Leider funktioniert das nicht mit dem Create Timestamp... In MP3TAG selbst kann man ja numerische Sortierung für eine Spalte angeben und da funktioniert es einwandfrei. Der folgende Quelltext zeigt die Ausgabe des Exportfiles mit %_file_create_datetime_raw%. Der Ausschnitt ist aus der Mitte des exportierten Files.

1496828842    F:\MP3\Friendly DJs\The Future of Hardcore\The Future of Hardcore
1496828853    F:\MP3\Friendly DJs\The Future of Hardcore\The Future of Hardcore
1496828857    F:\MP3\Friendly DJs\The Future of Hardcore\The Future of Hardcore
936552000    F:\MP3\Safe\Radio\Sampler\(Sampler)-The Best of MTV\(Brandy)-Almo
936552000    F:\MP3\Safe\Radio\Sampler\(Sampler)-The Best of MTV\(Busta Rhymes
936552000    F:\MP3\Safe\Radio\Sampler\(Sampler)-The Best of MTV\(Cassius)-Cas[/Nebenschauplatz]

Also mache ich mit dem Change Timestamp weiter und inkludiere Deinen Vorschlag für die Umkehrung der Sortierung.

$filename($getEnv('USERPROFILE')'\Desktop\Test.Playlist.Timestamp.txt',ansi)
$loop($sub(10000000000,%_file_mod_datetime_raw%)
%_file_create_datetime_raw%$char(9)%_path%$loopend()

Und da passiert es nun das er die MTE Datei nicht mehr findet. Allerdings kommt der Fehler nicht sofort sondern erst nachdem der Fortschrittsbalken den ersten Ruck (vergleiche Video) gemacht hat.
:flushed: Das war dann wohl zuviel des guten.
:w00t:

MfG
LostSoul

PS: Sorry für die Zeilenumbrüche in den Listen der Ausgabe aber ich mag die Filenamen jetzt nicht noch mehr kürzen.

QUOTE (Lostsoul @ Jun 9 2017, 13:22) <{POST_SNAPBACK}>
1496828857 F:\MP3\Friendly DJs\The Future of Hardcore\The Future of Hardcore
936552000    F:\MP3\Safe\Radio\Sampler\(Sampler)-The Best of MTV\(Brandy)-Almo<!--QuoteEnd--></div><!--QuoteEEnd-->

Hmm, %_file_mod_datetime_raw% gibt nur eine Integer Zahl aus ohne besonderes Format, so sollte man eine Formatieranweisung mitgeben, um für den Export eine bessere Spaltenansicht zu bekommen:
$num(%_file_mod_datetime_raw%,11)
... das erzeugt dann ...

01496828857    F:\MP3\Friendly DJs\The Future of Hardcore\The Future of Hardcore
00936552000    F:\MP3\Safe\Radio\Sampler\(Sampler)-The Best of MTV\(Brandy)-Almo

Beachte auch den Unterschied zwischen ...
%_file_create_datetime_raw%
%_file_mod_datetime_raw%

DD.20170609.1430.CEST

QUOTE (DetlevD @ Jun 9 2017, 14:18) <{POST_SNAPBACK}>
Hmm, %_file_mod_datetime_raw% gibt nur eine Integer Zahl aus ohne besonderes Format, so sollte man eine Formatieranweisung mitgeben, um für den Export eine bessere Spaltenansicht zu bekommen:

$num(%_file_mod_datetime_raw%,11)
... das erzeugt dann ...

01496828857    F:\MP3\Friendly DJs\The Future of Hardcore\The Future of Hardcore
00936552000    F:\MP3\Safe\Radio\Sampler\(Sampler)-The Best of MTV\(Brandy)-Almo<!--QuoteEnd--></div><!--QuoteEEnd-->

Das würde ich mal mit %_file_create_datetime_raw% probieren...

Ich sollte vielleicht erwähnen das das M3U Playlisten werden sollen. Der Timestamp wird dort nicht mit abgespeichert ist also eigentlich nur zum sortieren nützlich.
Hier mal der Code für MP3Tag. Es funktioniert damit genauso wie ich es wollte (Das ABER kommt weiter unten im Post).

$filename('D:\liquidsoap\playlists\buffer\newstuff.m3u',ansi)
'#EXTM3U'
$loop($sub(10000000000,%_file_mod_datetime_raw%))$puts(FilterStatus,1)

$puts(FilterStatus,$ifgreater($len(%replaygain_track_gain%),0,$get(FilterStatus),0))
$puts(FilterStatus,$ifgreater($strstr(%_folderpath%,'Amazon'),0,0,$get(FilterStatus)))

$ifgreater($get(FilterStatus),0,'#EXTINF:'%_length_seconds%','%ARTIST%' - '%TITLE%
%_path%,)
$loopend()

Wenn Ihr möchtet lege ich auch noch die CMD und VBS Dateien offen mit denen dann in der Kommandozeile die Textdatei nochmal überarbeitet wird.

Da muss ich jetzt nachfragen was Du damit sagen möchtest?

Ich möchte das nach Create sortiert wird weil eine Änderung in den MP3 Files eigenbtlich nur bei Schönheitskorrekturen auftritt. Und nur weil ich ein Cover oder einen Tag zugefügt habe wird der Track dadurch ja nicht zu einem "Neuen".

Daher wäre mir das Create Datum lieber wie das Change...

Was ich eben auch noch bemerke ist das die erzeugte Playlist noch nicht nach Artist sortiert ist. Ich muss die Datei also wenn Sie fertig ist und nur noch die Top XX beinhaltet beim einlesen durch PHP nach Artist sortieren.

Hier mal ein paar Screenshots wie das ganze eigentlich verwendet wird...

Mal so nebenbei. Ich bin wirklich sehr dankbar das Ihr mir nach den vielen Jahren wieder aus der Patsche helft. Auch die Tips von Ohrenkino waren hilfreich. Ich seid echt Klasse!

Wenn du den Unterschied kennst und es funktioniert so wie du willst, dann ist es ja gut.

Erstellungsdatum der Datei
%_file_create_date%
Created: 14 July 2016 09:05:45

Änderungsdatum der Datei
%_file_mod_date%
Modified: 12 Aug 2016 11:34:14

See also ...
http://www.techrepublic.com/article/build-...mps-in-windows/

DD.20170609.1613.CEST

:w00t:

Ich muss zugeben das Du mich jetzt ein wenig verwirrst... Empfiehlst Du mir unterschwellig beim ChangeDate zu bleiben?

Also folgender endgültiger Quelltext ist OPTIMAL für mich. $filename('D:\liquidsoap\playlists\buffer\newstuff.m3u',ansi)

'#EXTM3U'
$loop($sub(10000000000,$num(%_file_create_datetime_raw%,11)))$puts(FilterStatus,1)

$puts(FilterStatus,$ifgreater($len(%replaygain_track_gain%),0,$get(FilterStatus),0))
$puts(FilterStatus,$ifgreater($strstr(%_folderpath%,'Amazon'),0,0,$get(FilterStatus)))

$ifgreater($get(FilterStatus),0,'#EXTINF:'%_length_seconds%','%ARTIST%' - '%TITLE%
%_path%,)
$loopend()

Den Rest machen die cmd Batches und der PHP Interpreter aber so habe ich zumindest eine Datei wo alle meine Tracks vom CreateDate abwärts sortiert.

PERFEKT! Ihr seid die Besten. DANKE!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.