Ein Tag-Editor mit QT-GUI und Befehlszeilenschnittstelle. Unterstützt MP4 (iTunes), ID3, Vorbis, Opus, FLAC und Matroska.
Der Tag -Editor kann die folgenden Tag -Formate lesen und schreiben:
Weitere Bemerkungen:
Der Tag -Editor kann auch technische Informationen wie ID, Format, Sprache, Bitrate, Dauer, Größe, Zeitstempel, Stichprobenfrequenz, FPS und andere Informationen der Tracks anzeigen.
Außerdem können die Elementstruktur von MP4- und Matroska -Dateien inspizieren und validieren.
Manchmal muss der Tag -Editor die gesamte Datei neu schreiben, um Änderungen anzuwenden. Dies führt zur Erstellung einer temporären Datei. Angesichts der Standardeinstellungen der GUI wird sogar erzwungen, konservativ zu sein , da die temporären Dateien auch als Sicherung dienen , falls etwas schief geht, z. B. Ihr Computer beim Speichern oder als Fehler im Tag -Editor brechen besonders strukturierte Dateien. Bei der Verwendung der CLI wird daher auch --force-rewrite
verwendet.
Im nächsten Abschnitt wird beschrieben, wie die Einstellungen angepasst werden können, um das Umschreiben auf Kosten für keine Sicherung zu vermeiden, einige Polster innerhalb der Dateien und/oder das Speichern von Tags am Ende der Datei zu speichern.
Trotzdem wird es nicht immer möglich sein, in allen Fällen in allen Fällen umzuschreiben. Sie können ein Verzeichnis für temporäre Dateien in den GUI-Einstellungen oder in der CLI-Option --temp-dir
konfigurieren. Anschließend können Sie alle temporären Dateien irgendwann zusammen zusammenräumen. Für die Effizienz sollte das temporäre Verzeichnis auf demselben Dateisystem wie die von Ihnen bearbeitenden Dateien sein. Eine Funktion zum Löschen von temporären Dateien wurde automatisch noch nicht implementiert.
Mit dem Editor können Sie auswählen, ob Tags am Anfang oder am Ende einer MP4/Matroska -Datei platziert werden sollen. Durch das Platzieren von Tags am Ende der Datei kann es vermeiden, dass die gesamte Datei umgeschrieben wird, um Änderungen anzuwenden.
In der CLI wird diese über die Option --tag-pos
gesteuert. Um ein bestimmtes --tag-pos
durchzusetzen, auch wenn dies die Datei umgeschrieben werden muss, kombinieren Sie sich mit der Option --force
.
ID3V2 -Tags und Vorbis/Opus -Kommentare können erst am Anfang platziert werden. ID3V1 -Tags können nur am Ende der Datei platziert werden. Daher hat diese Konfiguration keinen Einfluss auf solche Tags.
Es ist auch möglich, die Position des Index/der Cues zu steuern. Dies wird jedoch derzeit nur beim Umgang mit Matroska -Dateien unterstützt.
Hinweis: Dies kann nicht für MP4 implementiert werden, da Tags und Index miteinander gebunden sind. Beim Umgang mit MP4 -Dateien entspricht die Indexposition immer die gleiche mit der Tag -Position.
Das Einsetzen des Index am Anfang der Datei wird manchmal als Faststart bezeichnet.
Um Faststart über CLI zu zwingen, sind die folgenden Optionen erforderlich:
tageditor set --index-pos front --force
Durch das Padding werden zusätzliche Tag -Informationen hinzugefügt, ohne die gesamte Datei neu zu schreiben oder das Tag anzuhängen. Die Verwendung von Polsterung kann konfiguriert werden:
Es ist auch möglich, die gesamte Datei neu zu schreiben, um die bevorzugte Polsterung zu erzwingen.
Die relevanten CLI-Optionen sind --min-padding
, --max-padding
, --preferred-padding
und --force-rewrite
.
Die Nutzung von Polsterung wird derzeit nicht unterstützt, wenn es um OGG -Streams geht (es wird beim Umgang mit rohen FLAC -Streams unterstützt).
Wie im Abschnitt "Backup/Temporary Dateien" erläutert, ist dies keine gute Idee, da die temporäre Datei, die beim Umschreiben der gesamten Datei erstellt wird, auch als Sicherung dient. Wenn Sie jedoch nicht vermeiden möchten, dass die Datei so weit wie möglich umschreiben, stellen Sie Folgendes in den Einstellungen "Dateilayout" der GUI ein:
Bei der Verwendung der CLI --max-padding 429496729
Sie nur die CLI-Argumente (und vermeiden Sie die anderen in früheren Abschnitten genannten Argumente vermeiden).
Das Bearbeiten großer Dateien (insbesondere Matroska -Dateien) kann einige Zeit in Anspruch nehmen. Um die Leistung zu verbessern, setzen Sie den Index am Ende der Datei (CLI-Option --index-pos back
), da die Größe des Index niemals neu berechnet werden muss. Befolgen Sie auch den Rat aus dem Abschnitt "Backup/Temporary Dateien", um das Umschreiben zu erzwingen und das temporäre Verzeichnis auf demselben Dateisystem wie die von Ihnen bearbeitende Datei zu setzen. Das Erzwingen eines Umschreibens kann die Leistung verbessern, da der Tag -Editor nicht einmal versucht zu sehen, ob er vermieden werden kann, und somit Berechnungen überspringen kann, die eine bemerkenswerte Zeit für große Matroska -Dateien in Anspruch nehmen können.
Natürlich wäre es immer noch optimaler, ein Umschreiben zu vermeiden. Checkout im vorherigen Abschnitt, um dies zu erreichen. Um die Leistung weiter zu verbessern, wenn ein Umschreiben vermieden wird, setzen Sie das Tag am Ende (CLI-Option --tag-pos back
). Anschließend versucht der Tag -Editor nicht einmal, Tags an der Vorderseite zu setzen und kann somit ein paar Berechnungen überspringen. (Eine Umschreibung zu vermeiden ist im Allgemeinen immer noch keine gute Idee.)
Das Matroska -Containerformat (und das auf Matroska basierende WebM) brechen mit gemeinsamen Konventionen. Daher sind nicht alle nachstehend erwähnten CLI -Beispiele sinnvoll, um in solchen Dateien zu verwenden.
Im Allgemeinen kann eine Matroska -Datei mehrere Tags haben und jedes Tag hat ein "Ziel", das entscheidet, was die Felder des Tags für das Lied oder das gesamte Album gelten. Wenn Sie also die CLI oder die GUI verwenden, müssen Sie sich bewusst sein, zu welchem Tag/Ziel/Ziel Felder hinzugefügt werden.
Matroska verwendet auch kein kombiniertes Feld für die Spur-/Festplattennummer und insgesamt wie andere Formate. Stattdessen verwendet es den separaten Felder part
und totalparts
, die erneut zu einem Tag des gewünschten Ziels hinzugefügt werden müssen (z. B. 50/"Album" für die Tracknummer und die Gesamtstrecke).
Schauen Sie sich die offizielle Matroska -Dokumentation zum Tagging an. Es enthält auch Beispiele für Audioinhalte und Videoinhalte.
Beachten Sie, dass Tag -Editor das in der Matroska -Dokumentation genannte XML -Format nicht unterstützt. In der GUI können Sie Tags und ihre Ziele einfach über die Steuerelemente oben im Editor hinzufügen/entfernen/bearbeiten. In den Einstellungen können Sie auch angeben, dass Tags bestimmter Ziele beim Laden einer Datei automatisch hinzugefügt werden sollten. Wenn Sie die CLI verwenden, können Sie angeben, dass ein Feld zu einem Tag eines bestimmten Ziels hinzugefügt werden sollte, indem das Ziel vor diesem Feld angegeben wird. Sie können auch explizit Tags bestimmter Ziele entfernen. Beispiele für die konkrete CLI -Verwendung finden Sie unten.
Siehe den Abschnitt Release auf GitHub.
tageditor-qt6
Paket, sofern für Ihr Betriebssystem verfügbar.tageditor
bei den offiziellen Repositorieslibopengl0
auf Debian/Ubuntu installiert ist)QT_QPA_PLATFORM=xcb
um die Unterstützung der nativen Wayland zu deaktivieren, wenn sie nicht in Ihrem System funktioniert).B9E36A7275FC61B464B67907E06FE8F53CDC6A4C
unterzeichnet.B9E36A7275FC61B464B67907E06FE8F53CDC6A4C
unterzeichnet.Der Tag-Editor verfügt über eine QT-basierte GUI und eine Befehlszeilenschnittstelle. Für eine C ++ - Bibliotheksschnittstelle Checkout der zugrunde liegenden TagParser -Bibliothek.
Die GUI sollte sich selbst erläutern - viele der UI -Elemente haben Tooltips mit weiteren Erklärungen. Der grundlegende Workflow ist recht einfach:
Sie können das Verhalten des Editors so festlegen, dass Sie frühere Werte aufbewahren, damit Sie keine Informationen wie Albumname oder Künstler für alle Dateien in einem Album immer wieder eingeben müssen.
Die GUI unterstützt nicht mehrere Werte desselben Feldes (neben Abdeckungen verschiedener Typen). Wenn eine Datei bereits Felder mit mehreren Werten enthält, werden die zusätzlichen Werte verworfen. Verwenden Sie die CLI, wenn die Unterstützung mehrerer Werte pro Feld erforderlich ist. Nicht alle Tag -Formate unterstützen dies jedoch sowieso.
Die GUI unterstützt keine Stapelverarbeitung. Ich empfehle, die CLI dafür zu verwenden.
Dieser Screenshot zeigt die experimentelle Musicbrainz/Lyricwiki -Suche.
Checkout des Dialogfelds Einstellungen. Du kannst
Einstellungen der GUI beeinflussen die CLI nicht.
Es gibt auch ein Tool zum Umbenennen von Dateien mithilfe der in den Dateien gespeicherten Tag -Informationen. Der neue Name für jede Datei wird von einem kleinen JavaScript generiert, das angepasst werden kann. Ein Beispielskript wird bereitgestellt. Bevor tatsächliche Änderungen vorgenommen werden, sehen Sie eine Vorschau mit den generierten Dateinamen. Wie im Beispielskript gezeigt, ist es auch möglich, Dateien in ein anderes Verzeichnis zu verschieben.
Der Tag -Editor bietet auch eine MusicBrainz, Cover Art Archive und Lyricwiki Search.
tageditor <operation> [options]
Überprüfen Sie die verfügbaren Vorgänge und Optionen mit --help
. Für eine Liste aller verfügbaren Feldnamen, Track-Attributnamen und Modifikator, verwenden Sie die CLI-Option --print-field-names
. Nicht alle Felder werden von allen Tag-/Containerformaten unterstützt. Vor allem das Matroska -Containerformat verwendet keine track
/ disk
um die Spur- / Festplattennummer und die Gesamtzahl in einem Feld zu speichern. Stattdessen müssen der Felder part
und totalparts
für das gewünschte Ziel verwendet werden.
Beachten Sie, dass Windows-Benutzer tageditor-cli.exe
anstelle von tageditor.exe
verwenden müssen oder Mintty als Terminal verwenden. Schauen Sie sich den Abschnitt "Windows-spezifische Probleme" an.
Hier sind einige Bash -Beispiele, die das Erhalten und Festlegen von Tag -Informationen veranschaulichen:
Zeigt Titel, Album und Künstler aller *.M4A -Dateien im angegebenen Verzeichnis an:
tageditor get title album artist --files /some/dir/*.m4a
Zeigt alle unterstützten Felder aller *.MKV -Dateien im angegebenen Verzeichnis an:
tageditor get --files /some/dir/*.mkv
Extrahiert die Abdeckung der angegebenen Datei (OPUS):
tageditor extract cover --output-file the-cover.jpg --file some-file.opus
--attachment
verwenden.Zeigt technische Informationen zu allen *.m4a -Dateien im angegebenen Verzeichnis an:
tageditor info --files /some/dir/*.m4a
Setzt Titel, Album, Künstler, Cover und Tracknummer aller *.M4A -Dateien im angegebenen Verzeichnis:
tageditor set title="Title of "{1st,2nd,3rd}" file" title="Title of "{4..16}"th file"
album="The Album" artist="The Artist"
cover'=/path/to/image' lyrics'>=/path/to/lyrics' track'+=1/16' --files /some/dir/*.m4a
lyrics
wird der Tag -Editor >
Wert aus der angegebenen Datei gelesen. Dies funktioniert auch für andere Felder und ist für cover
impliziert.+
Zeichen nach dem Feldname track
gibt an, dass der Feldwert nach Verarbeitung einer Datei erhöht werden sollte./path/to/image
und die Texte aus der Datei /path/to/lyrics
.Legt den Titel beider angegebenen Dateien und das Album der zweiten angegebenen Datei fest:
tageditor set title0="Title for both files" album1="Album for 2nd file"
--files file1.ogg file2.mp3
Die Nummer nach dem Feldnamen gibt den Index der ersten Datei an, um den Wert für zu verwenden. Der erste Index ist 0.
Legt den Titel speziell für den Titel mit dem ID 3134325680
fest und entfernt die Tags, die auf den Song/Track und das Album/Film/Folge im Allgemeinen abzielen:
tageditor set target-level=30 target-tracks=3134325680 title="Title for track 3134325680"
--remove-target target-level=50 --remove-target target-level=30
--files file.mka
Weitere Informationen finden Sie in der Matroska -Spezifikation.
Legt benutzerdefinierte Felder fest:
tageditor set mkv:FOO=bar1 mp4:©foo=bar2 -f file.mkv file.m4a
FOO
auf bar1
in Datei.mkv und das benutzerdefinierte Feld ©foo
ist auf bar2
in Datei.m4a eingestellt. Daher geben die Präfixe dem Tag -Editor an, dass die angegebene Feld -ID eine native Feld -ID eines bestimmten Tag -Formats ist und nicht eine generische Bezeichnung. Native Felder werden natürlich nur auf das entsprechende Format angewendet.mp4
: MP4/M4A-ID im ITune-Stil (muss genau 4 Zeichen sein)mkv
: Matroska -IDid3
: ID3V2 ID (muss genau 3 oder 4 Zeichen abhängig von der Tag -Version sein)vorbis
: Vorbis Kommentar -ID, funktioniert auch für OPUS (das auch Vorbis -Kommentare verwendet)Entfernt das "erzwungene" Flag aus allen Tracks, kennzeichnet den Track mit der ID 2 als "Standard" und setzt seine Sprache auf "Ger":
tageditor set track-id=all forced=no track-id=2 default=yes language=ger
Hier ist ein weiteres Beispiel, in dem die Verwendung von Arrays und die Syntax zur automatischen Erhöhung numerischer Felder wie der Spurnummer demonstrieren:
cd some/dir
# create an empty array
titles=()
# iterate through all music files in the directory
for file in *.m4a; do
# truncate the first 10 characters
title="${file:10}";
# append the title truncating the extension
titles+=("title=${title%.*}");
done
# now set the titles and other tag information
tageditor set "${titles[@]}" album="Some Album" track+=1/25 disk=1/1 -f *.m4a
Legt ein Cover eines speziellen Typs mit einer Beschreibung fest:
tageditor set cover=":front-cover" cover0="/path/to/back-cover.jpg:back-cover:The description" -f foo.mp3
path:cover-type:description
. Der Deckentyp und die Beschreibung sind optional. Der Trennzeichen kann durch den --cover-type-delimiter
geändert werden, was nützlich ist, wenn der Pfad a :
.0
nach der 2. cover
ist erforderlich. Andernfalls würde das 2. Cover nur in der 2. Datei festgelegt (die in diesem Beispiel nicht einmal angegeben ist).… cover= cover0="/path/to/back-cover.jpg:back-cover"
:
Ist fehlen) werden jedoch alle vorhandenen Abdeckungen des angegebenen Typs ersetzt und die neue Abdeckung hat eine leere Beschreibung.:
.… cover=":back-cover"
.tageditor --print-field-names
angezeigt werden.Legt Felder fest, indem ein Skript ausgeführt wird, um Änderungen dynamisch zu berechnen:
tageditor set --pedantic debug --script path/to/script.js -f foo.mp3
main()
-Funktion exportieren. Diese Funktion wird für jede Datei aufgerufen und ein Objekt übergeben, das die aktuelle Datei als erstes Argument darstellt. Die Datei modifiziert nur, wenn main()
einen wahren Wert oder undefined
zurückgibt. Andernfalls wird die Datei vollständig übersprungen (und somit überhaupt nicht geändert, sodass die Werte über --values
nicht angewendet werden).testfiles/set-tags.js
in diesem Repository an, um ein Beispiel zu erhalten, das grundlegende Korrekturen anwendet und versucht, Texte zu holen und Kunst abzudecken, wenn die Einstellungen übergeben werden (z. B. --script-settings addCover=1 addLyrics=1
).--pedantic debug
ist sehr nützlich. Sie können auch --script-settings dryRun=1
hinzufügen und diese Einstellung innerhalb des Skripts wie in testfiles/set-tags.js
überprüfen.testfiles/set-tags.js
gezeigt.ArrayBuffer
aufgedeckt. Die Verwendung muss auch mit einem ArrayBuffer
den Wert von Binärfeldern wie der Abdeckung festlegen.String
oder Number
freigelegt. Sie müssen auch einen dieser Typen verwenden, um den Wert dieser Felder festzulegen. Die String-Repräsentation des zugewiesenen Inhalts wird dann automatisch in das, was intern benötigt wird, konvertiert.utility
enthält nützliche Methoden, z. B. für die Protokollierung und Kontrolle der Ereignisschleife.testfiles/http.js
in diesem Repository an, um ein Beispiel für die Verwendung von XHR und die Steuerung der Ereignisschleife zu erhalten.--id3v1-usage
). Die während der Skriptausführung vorhandenen Tags stellen also nicht unbedingt Tags dar, die tatsächlich in der Datei auf der Festplatte vorhanden sind (sondern die Tags, die nach dem Speichern der Datei vorhanden sind).--values
), haben diese Werte Vorrang gegenüber den vom Skript festgelegten Werten.file.rename(newPath)
). Dies erfolgt sofort und auch, wenn main()
einen falsy -Wert zurückgibt (daher ist es möglich, eine Datei nur umzubenennen, ohne sie durch Rückgabe eines falsy -Werts zu ändern). Wenn der angegebene Pfad relativ ist, wird er relativ zum aktuellen Verzeichnis der Datei (und nicht zum aktuellen Arbeitsverzeichnis des Tag -Editors) interpretiert.utility.openFile(path)
zu öffnen. Dies ermöglicht es, Tags aus einer anderen Datei zu kopieren, z. B. das Einfügen von Tags aus Originaldateien, die beim Konvertieren in ein anderes Format verloren gegangen sind. Das genannte Beispiel-Skript- set-tags.js
zeigt dies auch für Cover und Texte, wenn die Einstellungen der Skripts übergeben werden (z. B. --script-settings addCover=1 originalDir=… originalExt=…
). Beispiel: cd '/…/music'
find 'artist/album' -iname '*.m4a' -exec tageditor set
--pedantic debug
--script /…/tageditor/testfiles/set-tags.js
--script-settings dryRun=1 originalDir='../music-lossless' originalExt=.flac addCover=1 addLyrics=1
--temp-dir /…/tmp/tageditor
--files {} +
tageditor set ... --pedantic warning -f ...
tageditor info --pedantic warning --validate -f ...
--encoding
und in den GUI -Einstellungen zu verwenden.Die Anwendung hängt von C ++ - Dienstprogrammen und TagParser ab und ist genauso erstellt wie diese Bibliotheken. Grundlegende Anweisungen finden Sie in der Readme -Datei von C ++ - Dienstprogramme. Wenn die QT -GUI aktiviert ist, sind auch QT und QTutilities erforderlich.
Befolgen Sie die Anweisungen unter "Aufbau dieses Geradens". Es gibt auch Dokumentationen zu verschiedenen Build -Variablen, die an CMake übergeben werden können, um den Build zu beeinflussen.
Die QT -GUI ist standardmäßig aktiviert. Die folgenden QT -Module sind erforderlich (nur die neueste QT 5- und QT 6 -Version getestet): Core Concurrent GUI -Netzwerk -Widgets deklarativ/skript WebEngineWidgets/webkitwidgets
Beachten Sie, dass alte QT -Versionen keine Unterstützung für moderne JavaScript -Funktionen haben. Um das JavaScript-basierte Umbenennungstool zu verwenden, wird empfohlen, mindestens QT 5.12 zu verwenden.
Um die zu verwendende Haupt -QT -Version anzugeben, setzen Sie QT_PACKAGE_PREFIX
(z. B. add -DQT_PACKAGE_PREFIX:STRING=Qt6
zu den cmake -Argumenten).
-DWEBVIEW_PROVIDER:STRING=webkit/webengine/none
zu den cmake -Argumenten hinzu, um entweder QT Webkit (funktioniert auch mit der "Wiederbelebten" -Version), QT WebEngine oder gar keine Webansicht. Wenn keine Webansicht verwendet wird, können die Dateiinformationen nur mit einer einfachen Baumansicht angezeigt werden. Andernfalls kann der Benutzer zwischen einer Webseite und einer Baumansicht wählen.-DJS_PROVIDER:STRING=script/qml/none
zu den cmake -Argumenten, um entweder QT -Skript, QT -QML oder gar keine JavaScript -Engine zu verwenden. Wenn keine JavaScript -Engine verwendet wird, ist das Umbenennen von Dienstprogramme deaktiviert.Es ist möglich, ohne die GUI zu bauen, wenn nur die CLI benötigt wird. In diesem Fall sind keine QT -Abhängigkeiten (einschließlich QTutilities) erforderlich.
Um ohne GUI zu erstellen, fügen Sie dem CMake -Aufruf die folgenden Parameter hinzu:
-DWIDGETS_GUI=OFF -DQUICK_GUI=OFF
Als kleine Demo für reflektierende Rapidjson bietet der Tag -Editor einen optionalen JSON -Export. Um dies zu aktivieren, fügen Sie die CMAKE -Argumente -DENABLE_JSON_EXPORT=ON
.
Wenn dies aktiviert ist, sind die folgenden zusätzlichen Abhängigkeiten erforderlich (nur zur Bauzeit): Rapidjson, Reflective-Rapidjson und LLVM/Clang
cd "$SOURCES"
git config core.symlinks true # only required on Windows
git clone https://github.com/Martchus/cpp-utilities.git c++utilities
git clone https://github.com/Martchus/tagparser.git
git clone https://github.com/Martchus/qtutilities.git # only required for Qt GUI
git clone https://github.com/Martchus/reflective-rapidjson.git # only required for JSON export
git clone https://github.com/Martchus/tageditor.git
git clone https://github.com/Martchus/subdirs.git
git config core.symlinks=true
nur unter Windows erforderlich ist, um Symlinks korrekt zu verarbeiten. Dies erfordert eine aktuelle GIT -Version und ein Dateisystem, das Symlinks (NTFS Works) unterstützt. Zusätzlich müssen Sie den Windows Developer -Modus aktivieren. Wenn Sie auf "nicht gefundene" Fehler bei der Symlink -Erstellung stoßen, verwenden Sie git reset --hard
im Repository, um dies zu beheben. cd "$BUILD_DIR"
cmake
-G Ninja
-DCMAKE_BUILD_TYPE=Release
-DLANGUAGE_FILE_ISO_639_2="/usr/share/iso-codes/json/iso_639-2.json"
-DCMAKE_INSTALL_PREFIX="/install/prefix"
"$SOURCES/subdirs/tageditor"
/install/prefix
durch das Verzeichnis, in dem Sie installieren möchten./usr/…/iso_639-2.json
durch den Pfad für Ihre ISO-Codes-Installation. cd "$BUILD_DIR"
ninja install
DESTDIR
auf einen beschreibbaren Speicherort (z. B. DESTDIR="temporary/install/dir" ninja install
) und verschieben Sie die Dateien danach an den gewünschten Ort. Die folgenden Vorbehalte können mit dem Cli-Wrapper anstelle der ausführbaren Hauptdatüren herumgeworfen werden. Dies ist die Datei, die mit -cli.exe
endet. Alternativ können Sie Mintty (z. B. über MSYS2) verwenden, was auch von diesen Problemen nicht beeinflusst wird:
set ENABLE_CP_UTF8=0
wenn dies nicht gesucht wird.set ENABLE_CONSOLE=0
um dieses Verhalten zu deaktivieren.Der Dunkle -Modus sollte unter Windows 11 nicht über das Box funktionieren und ansonsten durch Auswahl des Fusionsstils aktiviert werden.
Tag -Editor unterstützt PMV2 ab QT.
Copyright © 2015-2024 Marius Kittler
Der gesamte Code ist unter GPL-2-oder-Later lizenziert.