Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?
Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?
Hallo,
ich möchte Verzeichnisse durchsuchen, Text- oder json-Dateien, oder Verzeichnisnamen, auslesen. Entsprechend eine Datenbank anlegen, befüllen, aktualiiseren. Evtl. auch danach Musikdateien taggen - wohl eher nicht direkt, sondern per Programmaufruf, also ggf. zusätzliche Software. Es können z.B. 4.000 Verzeichnisse, ggf. Unterverzeichnisse, und z.B. 30.000 Einträge sein. Per Shell-Skript wird es wohl schon vor der Datenbank bei komplexeren Arrays schwierig?
LG
ich möchte Verzeichnisse durchsuchen, Text- oder json-Dateien, oder Verzeichnisnamen, auslesen. Entsprechend eine Datenbank anlegen, befüllen, aktualiiseren. Evtl. auch danach Musikdateien taggen - wohl eher nicht direkt, sondern per Programmaufruf, also ggf. zusätzliche Software. Es können z.B. 4.000 Verzeichnisse, ggf. Unterverzeichnisse, und z.B. 30.000 Einträge sein. Per Shell-Skript wird es wohl schon vor der Datenbank bei komplexeren Arrays schwierig?
LG
Zuletzt geändert von Meillo am 17.09.2020 17:43:40, insgesamt 1-mal geändert.
Grund: Titel angepasst
Grund: Titel angepasst
Re: Programmieren: bash oder was anderes?
Wenn du mit ``Datenbank'' SQL meinst, dann ist ein Shellscript dafuer eher nicht die beste Option. Aber du koenntest ggf. die Daten in Textdateien (das kann man auch als eine Datenbank verstehen) vorerfassen und in einem spaeten Schritt diese strukturierten Daten in eine SQL-Datenbank uebertragen. Das geht auch ohne Arrays; du kannst direkt in Textdateien schreiben, z.B. auch mit einer Datei je SQL-Spalte, immer Key-Tab-Value. Dann kannst du sie spaeter mit join(1) zusammenfuegen.curt123 hat geschrieben:17.09.2020 09:55:34ich möchte Verzeichnisse durchsuchen, Text- oder json-Dateien, oder Verzeichnisnamen, auslesen. Entsprechend eine Datenbank anlegen, befüllen, aktualiiseren. Evtl. auch danach Musikdateien taggen - wohl eher nicht direkt, sondern per Programmaufruf, also ggf. zusätzliche Software. Es können z.B. 4.000 Verzeichnisse, ggf. Unterverzeichnisse, und z.B. 30.000 Einträge sein. Per Shell-Skript wird es wohl schon vor der Datenbank bei komplexeren Arrays schwierig?
Vermutlich waere eine moderne Scriptsprache (wie Python, Ruby, PHP, Perl) dafuer die beste Wahl. Die haben auch z.B. fertige json-Funktionen, die du nutzen kannst.
Ich denke, in erster Linie kommt es darauf an, welche Technologien du (gut) beherrschst. Wenn du z.B. gut Java kannst, dann macht es vielleicht mehr Sinn das in Java umzusetzen als in einer Scriptsprache, die du kaum kannst. (Ausser du siehst das als Gelegenheit eine neue Sprache zu lernen.)
Use ed once in a while!
- Lord_Carlos
- Beiträge: 5578
- Registriert: 30.04.2006 17:58:52
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Dänemark
Re: Programmieren: bash oder was anderes?
Ich stimme Meillo Einhundertprozent zu.
Wenn du bereits eine Sprache beherrscht und du nicht gerade was neue lernen willst, dann kannst du das Problem mit fast allen modernen Sprachen loesen. Egal ob bash, python oder java.
Gerade bei Json empfehlt es sich eine Sprache oder Library zu nehmen die Json zu Objekten macht. So das du nicht was selber mit grep und regex basteln musst.
Wenn du bereits eine Sprache beherrscht und du nicht gerade was neue lernen willst, dann kannst du das Problem mit fast allen modernen Sprachen loesen. Egal ob bash, python oder java.
Gerade bei Json empfehlt es sich eine Sprache oder Library zu nehmen die Json zu Objekten macht. So das du nicht was selber mit grep und regex basteln musst.
Code: Alles auswählen
╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!
Re: Programmieren: bash oder was anderes?
Deine erste Sprache?
Versuch Dich mal an Python.
Es ist relativ leicht zu lernen, gut strukturiert und damit einsteigerfreundlicher als die meisten anderen Sprachen.
Und achte drauf, dass Dein Lernscript/Buch/Tutorial/etc für python3 ist und nicht das veraltete Python2 behandelt.
Versuch Dich mal an Python.
Es ist relativ leicht zu lernen, gut strukturiert und damit einsteigerfreundlicher als die meisten anderen Sprachen.
Und achte drauf, dass Dein Lernscript/Buch/Tutorial/etc für python3 ist und nicht das veraltete Python2 behandelt.
Re: Programmieren: bash oder was anderes?
Das Konzept ist noch etwas unscharfMeillo hat geschrieben:17.09.2020 10:07:36Wenn du mit ``Datenbank'' SQL meinst, dann ist ein Shellscript dafuer eher nicht die beste Option. Aber du koenntest ggf. die Daten in Textdateien (das kann man auch als eine Datenbank verstehen) vorerfassen
Zunächst geht es um das Auslesen von separaten (Script/Text-) Tagdateien bzw. tags a la CUE file.
Das Format hat mich an json erinnert, mal ein Beispiel für einen Titel:
Code: Alles auswählen
[
{
"@" : "01_blaine's_wedding_rmx_by_nonex.flac",
"ALBUM" : "musique legère",
"ARTIST" : "Trance Groove",
"DATE" : "1999",
"GENRE" : "Jazz",
"TITLE" : "Blaine's Wedding - RMX by Nonex",
"TOTALTRACKS" : "12",
"TRACKNUMBER" : "01"
}
]
(Evtl. auch ausnahmsweise eine Tag-Datei pro Album, das könnte ich vielleicht zuerst mit einem separaten Durchgang behändelt.)
Bei Unterschieden soll eine Übertragung der separaten tag-Werte in die Musikdatei selbst erfolgen. Dafür müßten die Tags gar nicht lange gespeichert sein.
Zudem bin ich aber auch an den Taginhalten in einer Gesamt-Datenbank mit Such- Filter- und Sortieroptionen interessiert,
Da sehe ich erstmal PHP, JavaScript, SQL, Java.Vermutlich waere eine moderne Scriptsprache (wie Python, Ruby, PHP, Perl) dafuer die beste Wahl. Die haben auch z.B. fertige json-Funktionen, die du nutzen kannst.
Ich denke, in erster Linie kommt es darauf an, welche Technologien du (gut) beherrschst. Wenn du z.B. gut Java kannst, dann macht es vielleicht mehr Sinn das in Java umzusetzen als in einer Scriptsprache, die du kaum kannst. (Ausser du siehst das als Gelegenheit eine neue Sprache zu lernen.)
Webbrowser sind auf den eigenen lokalen Systemen hinsichtlich eigener "Datenbank" aus "Sicherheitsgründen" leider extrem dicht, sonst ginge schon sehr viel nur mit JavaScript und Sachen wie z.B. localStorage.
Den nötigen Aufwand mit laufendem Server wie Apache, PHP wollte ich reduzieren, auch wenn es z.B. für PHP viele Möglichkeiten gibt. Ausserdem bin ich gerade unsicher, wie ich damit auf Dateien externer, ggf. Windowskompatibler, Laufwerke zugreifen kann. Vielleicht per vhost.conf.
Json ginge wohl auch fürs Speichern statt SQL. Beim Lesen bin ich noch nicht ganz sicher, wie sauber das Format mit den eckigen Klammern ist.Lord_Carlos hat geschrieben:17.09.2020 10:28:03Gerade bei Json empfehlt es sich eine Sprache oder Library zu nehmen die Json zu Objekten macht. So das du nicht was selber mit grep und regex basteln musst.
Ok, wenns Phyton wird.eggy hat geschrieben:17.09.2020 10:29:46Und achte drauf, dass Dein Lernscript/Buch/Tutorial/etc für python3 ist und nicht das veraltete Python2 behandelt.
Ich dachte erstmal an möglichst wenig Abhängigkeit von Servern etc., und dann ist vielleicht die Dateisicherheit beim Schreiben von tags in die vorhandenen *.wav und flac, oder übehaupt die Fähigkeit, die Dateien zu bearbeiten, oder ggf. ein enstpr. Programm zu steuern, wichtig.
Re: Programmieren: bash oder was anderes?
Macht hier auch eher weniger Sinn, wie mir scheint.curt123 hat geschrieben:17.09.2020 13:02:33Das Konzept ist noch etwas unscharfMeillo hat geschrieben:17.09.2020 10:07:36Wenn du mit ``Datenbank'' SQL meinst, dann ist ein Shellscript dafuer eher nicht die beste Option. Aber du koenntest ggf. die Daten in Textdateien (das kann man auch als eine Datenbank verstehen) vorerfassen
Mir scheint, es waere gut, das Problem zunaechst genauer zu strukturieren und zu unterteilen. Z.B. wuerde ich versuchen alle Informationen an einer zentralen Stelle zusammenzutragen, so dass alle Datenfluesse nur in eine Richtung gehen. Dann Prioritaeten festlegen, welche Informationsquellen wichtiger sind und welche unwichtiger, damit klar ist was was ueberschreibt. Der zweite Schritt waere dann, die zentral gesammelten Informationen in die Dateien zu bringen.Zunächst geht es um das Auslesen von separaten (Script/Text-) Tagdateien bzw. tags a la CUE file.
Das Format hat mich an json erinnert, mal ein Beispiel für einen Titel:Nach dem Auslesen käme dann der Vergleich mit den evtl, schon vorhandenen tags in *.wav oder *.flac (Dateien mit gleichem/ähnliche Bezeichner, bzw. in der externen Tag-Datei aufgeführt), also i.d.R. eine Tag-datei pro wav oder flac.Code: Alles auswählen
[ { "@" : "01_blaine's_wedding_rmx_by_nonex.flac", "ALBUM" : "musique legère", "ARTIST" : "Trance Groove", "DATE" : "1999", "GENRE" : "Jazz", "TITLE" : "Blaine's Wedding - RMX by Nonex", "TOTALTRACKS" : "12", "TRACKNUMBER" : "01" } ]
(Evtl. auch ausnahmsweise eine Tag-Datei pro Album, das könnte ich vielleicht zuerst mit einem separaten Durchgang behändelt.)
Bei Unterschieden soll eine Übertragung der separaten tag-Werte in die Musikdatei selbst erfolgen. Dafür müßten die Tags gar nicht lange gespeichert sein.
Zudem bin ich aber auch an den Taginhalten in einer Gesamt-Datenbank mit Such- Filter- und Sortieroptionen interessiert,
Spaetere Updates wuerden wieder so laufen: Die Informationen in der DB aktualisieren, dann von dort aus die Dateien mit passenden Tags versorgen.
Interessant wird noch in welcher Weise du die Informationen zuordnest. Am einfachsten waere es wohl die kleinste Einheit, also die Musikdatei zu verwenden und somit als Key den absoluten Dateipfad einzutragen. Wenn du Metadaten zu einem Album hast, wuerdest du diese Information halt identisch fuer alle Dateien des Albums eintragen.
PHP kann man nicht nur im Webbrowser verwenden (auch wenn das die bekannteste Verwendung ist), man kann es auch fuer lokale Anwendungen nutzen, genauso wie Python, Perl, Bash, usw. Dazu installierst du PHP als CLI-Interpreter, dann erstellst du eine Scriptdatei mit PHP-Code und rufst die auf der Kommadozeile mittels `php script.php' auf. Du kannst dann ganz normal auf lokale Pfade zugreifen, wie aus einem Bash-Script auch.Da sehe ich erstmal PHP, JavaScript, SQL, Java.Vermutlich waere eine moderne Scriptsprache (wie Python, Ruby, PHP, Perl) dafuer die beste Wahl. Die haben auch z.B. fertige json-Funktionen, die du nutzen kannst.
Ich denke, in erster Linie kommt es darauf an, welche Technologien du (gut) beherrschst. Wenn du z.B. gut Java kannst, dann macht es vielleicht mehr Sinn das in Java umzusetzen als in einer Scriptsprache, die du kaum kannst. (Ausser du siehst das als Gelegenheit eine neue Sprache zu lernen.)
Webbrowser sind auf den eigenen lokalen Systemen hinsichtlich eigener "Datenbank" aus "Sicherheitsgründen" leider extrem dicht, sonst ginge schon sehr viel nur mit JavaScript und Sachen wie z.B. localStorage.
Den nötigen Aufwand mit laufendem Server wie Apache, PHP wollte ich reduzieren, auch wenn es z.B. für PHP viele Möglichkeiten gibt. Ausserdem bin ich gerade unsicher, wie ich damit auf Dateien externer, ggf. Windowskompatibler, Laufwerke zugreifen kann. Vielleicht per vhost.conf.
Eine SQL-Datenbank, evtl. Sqlite das ist nur eine Datei, zum Speichern der gesammelten Werte waere wohl sinnvoll, in dem Szenario. (JSON dafuer zu verwenden faende ich eher unpassend.)
Wenn du Metadaten *in* Musikdateien schreiben willst, dann solltest du dafuer auf jeden Fall auf fertige CLI-Programme oder Libraries zurueckgreifen. Das ist aber doch ein spaeterer Schritt, auf Basis der nun zuerst mal gesammelten Daten? Wenn dem so ist, dann kannst du den losgeloest vom Sammeln der Daten betrachten, und folglich mit einem separaten Script/Programm abwickeln.Ich dachte erstmal an möglichst wenig Abhängigkeit von Servern etc., und dann ist vielleicht die Dateisicherheit beim Schreiben von tags in die vorhandenen *.wav und flac, oder übehaupt die Fähigkeit, die Dateien zu bearbeiten, oder ggf. ein enstpr. Programm zu steuern, wichtig.
Divide and Conquer!
Use ed once in a while!
Re: Programmieren: bash oder was anderes?
Ich hatte daran gedacht, die Datenbank nach Bedarf zu aktualisiieren, halbautomatisch abhängig von Dateiänderungsdatum. Mag aber bei kopierten Dateien ja nach Datumsänderung womöglich versagen.Meillo hat geschrieben:17.09.2020 13:50:18Interessant wird noch in welcher Weise du die Informationen zuordnest. Am einfachsten waere es wohl die kleinste Einheit, also die Musikdatei zu verwenden und somit als Key den absoluten Dateipfad einzutragen. Wenn du Metadaten zu einem Album hast, wuerdest du diese Information halt identisch fuer alle Dateien des Albums eintragen.
Also ggf. PHP.PHP kann man nicht nur im Webbrowser verwenden (auch wenn das die bekannteste Verwendung ist), man kann es auch fuer lokale Anwendungen nutzen, genauso wie Python, Perl, Bash, usw. Dazu installierst du PHP als CLI-Interpreter, dann erstellst du eine Scriptdatei mit PHP-Code und rufst die auf der Kommadozeile mittels `php script.php' auf. Du kannst dann ganz normal auf lokale Pfade zugreifen, wie aus einem Bash-Script auch.
Eine SQL-Datenbank, evtl. Sqlite das ist nur eine Datei, zum Speichern der gesammelten Werte waere wohl sinnvoll, in dem Szenario. (JSON dafuer zu verwenden faende ich eher unpassend.)
Das ist eher der erste Schritt.Wenn du Metadaten *in* Musikdateien schreiben willst, dann solltest du dafuer auf jeden Fall auf fertige CLI-Programme oder Libraries zurueckgreifen. Das ist aber doch ein spaeterer Schritt, auf Basis der nun zuerst mal gesammelten Daten?
Ich habe momentan den Schwerpunkt bei den (existierenden) externen Tags, was bei foobar mit enstprechendem plugin ganz gut klappt. Die Auslagerung der Tags halte ich grundsätzlich für optimal, aber nun wird das Projekt der externen Tags offenbar nicht weiter gepflegt, und andere (oder "Linux"-) Software kommt vermutlich mit den exteren tags auch nicht klar. Ich sehe mich da momentan auch wenig berufen oder in der Lage, externe Tags in andere Programme zu integrieren. Es geht also zunächst darum, die externen Tags in die Dateien zu schreiben. Da wäre eine möglichst sichere Bibliothek beruhigend und Zeit sparend.
Danach kommen die Möglichkeiten der Verwaltung anhand der Informationen, wobei natürlich auch vorstellbar wäre, dass es Software mit entspr. Fähigkeiten, eine Datenbank aus internen Tags zu generieren, bereits gibt. Wobei es da für mich auch mal ganz profaner Funktionen bedarf, wie eine einfache Liste selektierter Daten auszugeben.
Also dann sollte ich viellleicht danach gehen, wo die nötigen Dateoperationen, auslesen, schreiben, gut unterstützt werden.unitra hat geschrieben:17.09.2020 13:45:43Also programieren mit der bash, mach das nicht, Du wirst Dich ärgern im Nachhinein.
Re: Programmieren: bash oder was anderes?
@curt123: Mir ist gerade nicht ganz klar, ob hier grundsaetzlich zum Thema Shellscripting vs. ``richtige'' Programmiersprachen diskutiert werden soll, oder zur Umsetzung deines konkreten Problems. Falls zweiteres, dann wuerde ich die Grundsatzdiskussion in einen separaten Thread abtrennen wollen, denn das hat Potenzial noch umfangreicher zu werden.
Use ed once in a while!
Re: Programmieren: bash oder was anderes?
Hab nochmal Python angeschaut, da mag so etwas schonmal passen: http://audiotools.sourceforge.net/ .
Ob das dann ohne Klimmzüge installiert werden kann, das geht über eine Python-Shell und ohne dass Debian betroffen wäre?
Allerdings scheint bei Buster, wenn ich gerade auf die Schnelle bei Synaptic richtig hingeguckt habe, noch die Version 2.7 üblich zu sein.
Ob das dann ohne Klimmzüge installiert werden kann, das geht über eine Python-Shell und ohne dass Debian betroffen wäre?
Allerdings scheint bei Buster, wenn ich gerade auf die Schnelle bei Synaptic richtig hingeguckt habe, noch die Version 2.7 üblich zu sein.
Re: Programmieren: bash oder was anderes?
Ja danke. Etwas Weitsicht ist immer gut, ansonsten geht es mir aber schon noch relativ pragmatisch mehr um das konkrete Problem, bzw. zweiteres.Meillo hat geschrieben:17.09.2020 16:53:55@curt123: Mir ist gerade nicht ganz klar, ob hier grundsaetzlich zum Thema Shellscripting vs. ``richtige'' Programmiersprachen diskutiert werden soll, oder zur Umsetzung deines konkreten Problems. Falls zweiteres, dann wuerde ich die Grundsatzdiskussion in einen separaten Thread abtrennen wollen, denn das hat Potenzial noch umfangreicher zu werden.
Re: Programmieren: bash oder was anderes?
Die Grundsatzdiskussion findet sich nun hier: viewtopic.php?f=34&t=178657curt123 hat geschrieben:17.09.2020 17:23:05Ja danke. Etwas Weitsicht ist immer gut, ansonsten geht es mir aber schon noch relativ pragmatisch mehr um das konkrete Problem, bzw. zweiteres.Meillo hat geschrieben:17.09.2020 16:53:55@curt123: Mir ist gerade nicht ganz klar, ob hier grundsaetzlich zum Thema Shellscripting vs. ``richtige'' Programmiersprachen diskutiert werden soll, oder zur Umsetzung deines konkreten Problems. Falls zweiteres, dann wuerde ich die Grundsatzdiskussion in einen separaten Thread abtrennen wollen, denn das hat Potenzial noch umfangreicher zu werden.
Desweiteren habe ich den Thread in den Scripting-Bereich verschoben.
Use ed once in a while!
Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?
Bekomme ich im besten Fall mit Python eine möglichst einfache Komplettlösung, die auch unter späteren version-updates von Debian läuft?
SQLite ist wohl in Phyton enthalten. Dann gibt es offenbar Erweiterungen wie iJson, wobei ich aber nicht sicher bin, ob da die Schreibweise mit den eckigen Klammern für einen Import passt. SQL wäre aber womöglich nicht optimal, wenn ich wirklich alle Informationen übertragen wollte, da die Tags frei definierbar, auch erweiterbar, sind und variieren. Also entweder Beschränkung auf bekannte wichtige Felder, oder aber etwas wie JSON, NoSQL usw..
Die Python Audio Tools müßten wohl nachinstalliert werden, http://audiotools.sourceforge.net/ , fürs tagging der Dateien ist das Stickwort hier wohl MetaData http://audiotools.sourceforge.net/progr ... s.MetaData , da muß ich nochmal schauen, ob für wav- und flac-Dateien Lesen und Schreiben der Tags geht. Es gibt offenbar auch Python Wave Module.
Oder https://github.com/quodlibet/mutagen , https://pypi.org/project/pytaglib/ , https://github.com/hipstas/audio-tagging-toolkit
Da kann ich schlecht abschätzen, was sinnvoll ist.
SQLite ist wohl in Phyton enthalten. Dann gibt es offenbar Erweiterungen wie iJson, wobei ich aber nicht sicher bin, ob da die Schreibweise mit den eckigen Klammern für einen Import passt. SQL wäre aber womöglich nicht optimal, wenn ich wirklich alle Informationen übertragen wollte, da die Tags frei definierbar, auch erweiterbar, sind und variieren. Also entweder Beschränkung auf bekannte wichtige Felder, oder aber etwas wie JSON, NoSQL usw..
Die Python Audio Tools müßten wohl nachinstalliert werden, http://audiotools.sourceforge.net/ , fürs tagging der Dateien ist das Stickwort hier wohl MetaData http://audiotools.sourceforge.net/progr ... s.MetaData , da muß ich nochmal schauen, ob für wav- und flac-Dateien Lesen und Schreiben der Tags geht. Es gibt offenbar auch Python Wave Module.
Oder https://github.com/quodlibet/mutagen , https://pypi.org/project/pytaglib/ , https://github.com/hipstas/audio-tagging-toolkit
Da kann ich schlecht abschätzen, was sinnvoll ist.
- Lord_Carlos
- Beiträge: 5578
- Registriert: 30.04.2006 17:58:52
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Dänemark
Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?
Die [] sind ein array, mit Objekten in {}curt123 hat geschrieben:17.09.2020 19:53:10SQLite ist wohl in Phyton enthalten. Dann gibt es offenbar Erweiterungen wie iJson, wobei ich aber nicht sicher bin, ob da die Schreibweise mit den eckigen Klammern für einen Import passt.
Du kannst also sagen, gib mir bitte das erste Objekt, und davon den Wert "Album" und du bekommst "musique legère"
Das ist ganz normales json. Guckst du hier: https://jsfiddle.net/6td218jr/1/
Sicher das deine .flac Daten nicht schon die Tags beinhalten?
Ich glaube .wav koennen keine Tags haben.
Ich bin mir gerade nicht 100% sicher wie es genau bei Python funktioniert, aber ich meine bei vielen Projekten liegt eine requirements.txt beiseite. Dann kannst du einfach mit pip install -r requirements.txt die abhaenichkeiten installieren.curt123 hat geschrieben:17.09.2020 19:53:10Die Python Audio Tools müßten wohl nachinstalliert werden
Dazu gibt es auch noch Virtual Environment damit das nicht alles Systemweit installiert wird.
https://blog.usejournal.com/why-and-how ... 29c685181e
Experte bin ich da aber auch nicht. Kannst das ganze natuerlich auch ~irgendwie~ als deb packen. Da kenne ich mich aber garnicht aus.
Code: Alles auswählen
╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!
Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?
Es gibt einen entsprechenden Menupunkt für aktuell ausgewählte Stücke. Ich habe da wenig Vetrauen, dass das problemlos für große Datenmengen geht, und es dewegen meist ignoriert. Für jeweils ein Album in einem Verzeichnis klappt es.willy4711 hat geschrieben:17.09.2020 19:59:13Ich habe mich etwas mit der m-TAGS Methode belesen, Metadaten zu speichern.
https://hydrogenaud.io/index.php/topic,97164.0.html sagt:Version 1.0 now available. Main upgrades are:
1) you can now write the tags from an m-TAGS file back to the media files;
Aber, danke für die Anregung, vielleicht hast du recht und ich sollte ich es tatsächlich, natürlich erst nach solider Sicherung, doch nochmal mit mehr Dateien am Stück versuchen.
Und das alles, um die Metadaten seiner Musikdateien mit externen Tags weiter zu pflegen,
die eh kein Linux-Programm und auch unter Windows nur Foobar lesen kann?
Es geht ja um das Kopieren der Daten in die Musikdateien, nicht umgekehrt. Also die Nutzbarkeit unter Linux, ebenso die vielleicht immer noch sinnvolle Datenbank, falls die verfügbaren Programme was nicht können. Foobar z.B. kann m.W. nicht einfach eine einfache Liste selektierter Stücke oder Alben ausgeben (vielleicht ginge was mit kopierten Playlists über die Zwischenablage), das fehlt mir manchmal, auch wenn eine extra Datenbank ein Umweg wäre. Vielleicht gibt es doch ein passendes Linuxprogramm.
Zuletzt geändert von curt123 am 17.09.2020 21:03:38, insgesamt 1-mal geändert.
Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?
Ja danke für den Link. Ich hatte das auch ähnlich gesehen und schonmal (vmtl. php) mit einer üblichen json-Schnittstelle importieren wollen, das ging damals nicht.Lord_Carlos hat geschrieben:17.09.2020 20:23:11Die [] sind ein array, mit Objekten in {}
Du kannst also sagen, gib mir bitte das erste Objekt, und davon den Wert "Album" und du bekommst "musique legère"
Das ist ganz normales json. Guckst du hier: https://jsfiddle.net/6td218jr/1/
Irgendwann, irgendwie ging es offenbar mit wav, früher gab es das m.E. nicht. Ich hoffe, dass es Standard ist und keine Probleme macht. Audacity speichert wav auch mit Tags.Sicher das deine .flac Daten nicht schon die Tags beinhalten?
Ich glaube .wav koennen keine Tags haben.
Und ich habe auch flac ohne Tags erzeugt, oder die externen Tags sind auch mal aktueller.
Ich möchte nicht gleich das nächste distri-update von Debian versemmeln, aber auch nicht übervorsichtig sein...Ich bin mir gerade nicht 100% sicher wie es genau bei Python funktioniert, aber ich meine bei vielen Projekten liegt eine requirements.txt beiseite. Dann kannst du einfach mit pip install -r requirements.txt die abhaenichkeiten installieren.
Dazu gibt es auch noch Virtual Environment damit das nicht alles Systemweit installiert wird.
https://blog.usejournal.com/why-and-how ... 29c685181e
Experte bin ich da aber auch nicht. Kannst das ganze natuerlich auch ~irgendwie~ als deb packen. Da kenne ich mich aber garnicht aus.
Virtual Environment klingt interessant.
Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?
Das geht.curt123 hat geschrieben:17.09.2020 20:59:24Ja danke für den Link. Ich hatte das auch ähnlich gesehen und schonmal (vmtl. php) mit einer üblichen json-Schnittstelle importieren wollen, das ging damals nicht.Lord_Carlos hat geschrieben:17.09.2020 20:23:11Die [] sind ein array, mit Objekten in {}
Du kannst also sagen, gib mir bitte das erste Objekt, und davon den Wert "Album" und du bekommst "musique legère"
Das ist ganz normales json. Guckst du hier: https://jsfiddle.net/6td218jr/1/
Code: Alles auswählen
$json = '
[
{
"@" : "01_blaine\'s_wedding_rmx_by_nonex.flac",
"ALBUM" : "musique legère",
"ARTIST" : "Trance Groove",
"DATE" : "1999",
"GENRE" : "Jazz",
"TITLE" : "Blaine\'s Wedding - RMX by Nonex",
"TOTALTRACKS" : "12",
"TRACKNUMBER" : "01"
}
]';
var_dump(json_decode($json));
Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?
Danke, das sieht gut aus. Das hast du mit PHP getestet?thoerb hat geschrieben:17.09.2020 21:35:11
Das geht.Code: Alles auswählen
$json = ' [ { "@" : "01_blaine\'s_wedding_rmx_by_nonex.flac", "ALBUM" : "musique legère", "ARTIST" : "Trance Groove", "DATE" : "1999", "GENRE" : "Jazz", "TITLE" : "Blaine\'s Wedding - RMX by Nonex", "TOTALTRACKS" : "12", "TRACKNUMBER" : "01" } ]'; var_dump(json_decode($json));
Sonst müßte ich noch abschätzen, ob ich kurzfristig sowieso auf externe Tags verzichte, und dann Datenbank, Listen etc. aus den Mediendaten erstelle. Oder doch noch extern, und Daten aus den zusätzlichen Dateien holen. Auf jeden Fall muß ich durch alle Unterverzeichnisse, und vor der Festlegung auf Python wüßte gerne noch mehr über die Tools für die Metadaten. Oder ausprobieren, wenn es sowieso bei Debian dabei ist. Für PHP gibt es wohl schonmal Bibliotheken, um Metadaten zu lesen.
Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?
Ja, hier das Ergebnis:curt123 hat geschrieben:17.09.2020 22:30:03Danke, das sieht gut aus. Das hast du mit PHP getestet?
Code: Alles auswählen
array(1) {
[0]=>
object(stdClass)#1 (8) {
["@"]=>
string(37) "01_blaine's_wedding_rmx_by_nonex.flac"
["ALBUM"]=>
string(15) "musique legère"
["ARTIST"]=>
string(13) "Trance Groove"
["DATE"]=>
string(4) "1999"
["GENRE"]=>
string(4) "Jazz"
["TITLE"]=>
string(31) "Blaine's Wedding - RMX by Nonex"
["TOTALTRACKS"]=>
string(2) "12"
["TRACKNUMBER"]=>
string(2) "01"
}
}
"01_blaine\'s_wedding_rmx_by_nonex.flac"
Aber wenn du Json aus einer Datei einliest, musst du dir darüber ja eigentlich keine Gedanken machen.
Edit:
Code: Alles auswählen
$json = json_decode(file_get_contents('json.txt'));
Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?
Das Auslesen der externen Tags, auch aus diversen Unterverzeichnissen, und das Eintragen in eine Datenbank sollte mit PHP sehr gut möglich sein.thoerb hat geschrieben:17.09.2020 22:43:15Ja, hier das Ergebnis:curt123 hat geschrieben:17.09.2020 22:30:03Danke, das sieht gut aus. Das hast du mit PHP getestet?
//Code: Alles auswählen
$json = json_decode(file_get_contents('json.txt'));
Nun hab ich noch zwei unklare Punkte:
Einmal, vmtl. kein großes Problem, die möglichst "harmlose" Installation von PHP, wobei ich sowieso noch einen lokalen Webserver für Tests und Entwickliungen, ggf. Intranet, a la XAMPP, einrichten möchte.
Kann eine PHP Installation beides abdecken, bzw. muß ich bei der Installation etwas beachten, damit später alle Anwendungsfälle klappen?
Dann der Punkt, dass ich bislang keinen m.E. brauchbaren "music tagger" o.ä. für PHP gefunden habe. Eigentlich wollte ich da auf eine vorhandene Bibliothek zugreifen. Hier wird wohl nur gelesen: https://www.phpclasses.org/package/1018 ... files.html .
Auch interessant, aber wohl kein PHP: https://taglib.org/
TagLib is a library for reading and editing the meta-data of several popular audio formats.
Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?
Auf die Schnelle ein Versuch, die Tag-Dateien per python auszulesen:
Und weiter:
Ich hoffe, dass das noch ausbaufähig ist wenn ich mich mehr mit Python beschäftige, und dass auch das Schreiben von Tags in *.wav Dateien klappen kann.
Code: Alles auswählen
>>> import json
>>>
>>> with open('musik-test.tags', encoding='utf-8') as file:
... json.load(file)
...
[{'@': "01_blaine's_wedding_rmx_by_nonex.flac", 'ALBUM': 'musique legère', 'ARTIST': 'Trance Groove', 'DATE': '1999', 'GENRE': 'Jazz', 'TITLE': "Blaine's Wedding - RMX by Nonex", 'TOTALTRACKS': '12', 'TRACKNUMBER': '01'}]
>>>
Code: Alles auswählen
>>> with open('musik-test.tags', encoding='utf-8') as file:
... m_arr = json.load(file)
... json.dumps(m_arr[0]["ARTIST"])
...
'"Trance Groove"'