Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?

Beitrag von curt123 » 17.09.2020 09:55:34

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
Zuletzt geändert von Meillo am 17.09.2020 17:43:40, insgesamt 1-mal geändert.
Grund: Titel angepasst

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Programmieren: bash oder was anderes?

Beitrag von Meillo » 17.09.2020 10:07:36

curt123 hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 09:55:34
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?
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.

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!

Benutzeravatar
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?

Beitrag von Lord_Carlos » 17.09.2020 10:28:03

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.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Programmieren: bash oder was anderes?

Beitrag von eggy » 17.09.2020 10:29:46

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.

curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Re: Programmieren: bash oder was anderes?

Beitrag von curt123 » 17.09.2020 13:02:33

Meillo hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 10:07:36
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
Das Konzept ist noch etwas unscharf

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"
   }
]
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.
(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,
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.)
Da sehe ich erstmal PHP, JavaScript, SQL, Java.

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.
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 10:28:03
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.
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.
eggy hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 10:29:46
Und achte drauf, dass Dein Lernscript/Buch/Tutorial/etc für python3 ist und nicht das veraltete Python2 behandelt.
Ok, wenns Phyton wird.

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.

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Programmieren: bash oder was anderes?

Beitrag von Meillo » 17.09.2020 13:50:18

curt123 hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 13:02:33
Meillo hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 10:07:36
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
Das Konzept ist noch etwas unscharf
Macht hier auch eher weniger Sinn, wie mir scheint.
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"
   }
]
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.
(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,
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.

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.

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.)
Da sehe ich erstmal PHP, JavaScript, SQL, Java.

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.
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.)
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.
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.

Divide and Conquer!
Use ed once in a while!

curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Re: Programmieren: bash oder was anderes?

Beitrag von curt123 » 17.09.2020 14:35:25

Meillo hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 13:50:18
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.
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.

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.)
Also ggf. PHP.
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?
Das ist eher der erste Schritt.

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.
unitra hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 13:45:43
Also programieren mit der bash, mach das nicht, Du wirst Dich ärgern im Nachhinein.
Also dann sollte ich viellleicht danach gehen, wo die nötigen Dateoperationen, auslesen, schreiben, gut unterstützt werden.

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Programmieren: bash oder was anderes?

Beitrag von Meillo » 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.
Use ed once in a while!

curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Re: Programmieren: bash oder was anderes?

Beitrag von curt123 » 17.09.2020 16:59:54

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.

curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Re: Programmieren: bash oder was anderes?

Beitrag von curt123 » 17.09.2020 17:23:05

Meillo hat geschrieben: ↑ zum Beitrag ↑
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.
Ja danke. Etwas Weitsicht ist immer gut, ansonsten geht es mir aber schon noch relativ pragmatisch mehr um das konkrete Problem, bzw. zweiteres.

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Programmieren: bash oder was anderes?

Beitrag von Meillo » 17.09.2020 17:41:27

curt123 hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 17:23:05
Meillo hat geschrieben: ↑ zum Beitrag ↑
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.
Ja danke. Etwas Weitsicht ist immer gut, ansonsten geht es mir aber schon noch relativ pragmatisch mehr um das konkrete Problem, bzw. zweiteres.
Die Grundsatzdiskussion findet sich nun hier: viewtopic.php?f=34&t=178657

Desweiteren habe ich den Thread in den Scripting-Bereich verschoben.
Use ed once in a while!

curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?

Beitrag von curt123 » 17.09.2020 19:53:10

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.

Benutzeravatar
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?

Beitrag von Lord_Carlos » 17.09.2020 20:23:11

curt123 hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 19:53:10
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.
Die [] 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/

Sicher das deine .flac Daten nicht schon die Tags beinhalten?

Ich glaube .wav koennen keine Tags haben.
curt123 hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 19:53:10
Die Python Audio Tools müßten wohl nachinstalliert werden
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.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?

Beitrag von curt123 » 17.09.2020 20:52:44

willy4711 hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 19:59:13
Ich 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;
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.

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.

curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?

Beitrag von curt123 » 17.09.2020 20:59:24

Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 20:23:11
Die [] 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/
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.
Sicher das deine .flac Daten nicht schon die Tags beinhalten?

Ich glaube .wav koennen keine Tags haben.
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.

Und ich habe auch flac ohne Tags erzeugt, oder die externen Tags sind auch mal aktueller.
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.
Ich möchte nicht gleich das nächste distri-update von Debian versemmeln, aber auch nicht übervorsichtig sein...

Virtual Environment klingt interessant.

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?

Beitrag von thoerb » 17.09.2020 21:35:11

curt123 hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 20:59:24
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 20:23:11
Die [] 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/
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.
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));

curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?

Beitrag von curt123 » 17.09.2020 22:30:03

thoerb hat geschrieben: ↑ zum Beitrag ↑
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));
Danke, das sieht gut aus. Das hast du mit PHP getestet?

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.

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?

Beitrag von thoerb » 17.09.2020 22:43:15

curt123 hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 22:30:03
Danke, das sieht gut aus. Das hast du mit PHP getestet?
Ja, hier das Ergebnis:

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"
  }
}
Ich musste aber die Hochkommata escapen.
"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')); 

curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?

Beitrag von curt123 » 18.09.2020 11:22:23

thoerb hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 22:43:15
curt123 hat geschrieben: ↑ zum Beitrag ↑
17.09.2020 22:30:03
Danke, das sieht gut aus. Das hast du mit PHP getestet?
Ja, hier das Ergebnis:
//

Code: Alles auswählen

$json = json_decode(file_get_contents('json.txt')); 
Das Auslesen der externen Tags, auch aus diversen Unterverzeichnissen, und das Eintragen in eine Datenbank sollte mit PHP sehr gut möglich sein.

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.

curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Re: Programmieren: Metadaten auslesen, Musik taggen -- bash oder was anderes?

Beitrag von curt123 » 19.09.2020 14:23:38

Auf die Schnelle ein Versuch, die Tag-Dateien per python auszulesen:

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'}]
>>> 
Und weiter:

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"'
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.

Antworten