Un editor de etiquetas con GUI QT e interfaz de línea de comandos. Admite MP4 (iTunes), ID3, Vorbis, Opus, FLAC y Matroska.
El editor de etiquetas puede leer y escribir los siguientes formatos de etiqueta:
Otros comentarios:
El editor de etiquetas también puede mostrar información técnica como ID, formato, idioma, tasa de bits, duración, tamaño, marcas de tiempo, frecuencia de muestreo, FPS y otra información de las pistas.
También permite inspeccionar y validar la estructura de elementos de los archivos MP4 y Matroska.
A veces, el editor de etiquetas debe reescribir todo el archivo para aplicar cambios. Esto lleva a la creación de un archivo temporal. Con la configuración predeterminada de la GUI, esto incluso se aplica para ser conservador , ya que los archivos temporales también sirven como copia de seguridad en caso de que algo salga mal, por ejemplo, su computadora se bloquea mientras se guarda o un error dentro del editor de etiquetas rompe archivos particularmente estructurados. Por lo tanto, cuando se usa la CLI, también se recomienda usar --force-rewrite
.
La siguiente sección describe cómo ajustar la configuración para evitar reescribir a costa de no tener copias de seguridad, tener algo de relleno dentro de los archivos y/o almacenar etiquetas al final del archivo.
Sin embargo, no siempre será posible evitar reescribir un archivo en todos los casos de todos modos. Puede configurar un directorio para archivos temporales dentro de la configuración de GUI o la opción CLI --temp-dir
. Luego puede limpiar fácilmente todos los archivos temporales en algún momento juntos. Para la eficiencia, el directorio temporal debe estar en el mismo sistema de archivos que los archivos que está editando. Aún no se ha implementado una función para eliminar archivos temporales.
El editor le permite elegir si las etiquetas deben colocarse al principio o al final de un archivo MP4/Matroska. Colocar etiquetas al final del archivo puede evitar tener que reescribir todo el archivo para aplicar cambios.
En la CLI, esto se controla a través de la opción --tag-pos
. Para hacer cumplir una --tag-pos
específica, incluso si esto requiere reescribir el archivo, combine con la opción --force
.
Las etiquetas ID3V2 y los comentarios de Vorbis/Opus solo se pueden colocar al principio. Las etiquetas ID3V1 solo se pueden colocar al final del archivo. Por lo tanto, esta configuración no tiene ningún efecto cuando se trata de tales etiquetas.
También es posible controlar la posición del índice/señales. Sin embargo, esto solo solo es compatible cuando se trata de archivos Matroska.
Nota: Esto no se puede implementar para MP4, ya que las etiquetas y el índice están vinculados entre sí. Al tratar con archivos MP4, la posición del índice siempre será la misma que la posición de la etiqueta.
Poner el índice al comienzo del archivo a veces se llama FastStart .
Para forzar FastStart a través de CLI se requieren las siguientes opciones:
tageditor set --index-pos front --force
El relleno permite agregar información de etiqueta adicional sin reescribir el archivo completo o agregar la etiqueta. Se puede configurar el uso del relleno:
También es posible forzar la reescritura de todo el archivo para hacer cumplir el relleno preferido.
Las opciones de CLI relevantes son --min-padding
, --max-padding
, --preferred-padding
y --force-rewrite
.
Aprovechar el relleno actualmente no es compatible cuando se trata de transmisiones OGG (es compatible cuando se trata de corrientes flac crudas).
Como se explica en la sección "Copia de seguridad/archivos temporales", esta no es una buena idea ya que el archivo temporal que se crea al reescribir todo el archivo también sirve como copia de seguridad. Sin embargo, si, sin embargo, desea evitar reescribir el archivo tanto como sea posible, establezca lo siguiente en la configuración de "Diseño del archivo" de la GUI:
Al usar la CLI, solo necesita agregar --max-padding 429496729
a los argumentos de la CLI (y evitar cualquiera de los otros argumentos mencionados en secciones anteriores).
La edición de archivos grandes (especialmente los archivos de Matroska) puede llevar algún tiempo. Para mejorar el rendimiento, coloque el índice al final del archivo (opción CLI --index-pos back
) porque entonces el tamaño del índice nunca tendrá que ser recalculado. También siga el consejo de la sección "Copia de seguridad/archivos temporales" para forzar la reescritura y colocar el directorio temporal en el mismo sistema de archivos que el archivo que está editando. Forzar una reescritura puede mejorar el rendimiento porque el editor de etiquetas ni siquiera intentará ver si podría evitarse y, por lo tanto, puede omitir los cálculos que pueden llevar un tiempo notable para los grandes archivos de Matroska.
Por supuesto, poder evitar una reescritura aún sería más óptimo. Consulte la sección anterior sobre cómo lograrlo. Para mejorar aún más el rendimiento al evitar una reescritura, coloque la etiqueta al final (opción CLI --tag-pos back
). Luego, el editor de etiquetas ni siquiera intentará poner etiquetas en la parte delantera y, por lo tanto, puede omitir algunos cálculos. (Evitar una reescritura todavía no es una buena idea en general).
El formato de contenedor de Matroska (y WebM que se basa en Matroska) se rompen con convenciones comunes. Por lo tanto, no todos los ejemplos de CLI mencionados a continuación tienen sentido usar en dichos archivos.
En general, un archivo de Matroska puede tener múltiples etiquetas y cada etiqueta tiene un "objetivo" que decide a qué se aplican los campos de la etiqueta, por ejemplo, la canción o el álbum completo. Entonces, al usar la CLI o la GUI, debe ser consciente de a qué etiqueta/objetivo agregar campos.
Matroska tampoco usa un campo combinado para el número de pista/disco y total como lo hacen otros formatos. En su lugar, usa la part
de campos separados y totalparts
que nuevamente deben agregarse a una etiqueta del objetivo deseado (por ejemplo, 50/"álbum" para el número de pista y el total).
Consulte la documentación oficial de Matroska sobre el etiquetado para obtener más detalles. También contiene ejemplos de contenido de audio y contenido de video.
Tenga en cuenta que el editor de etiquetas no admite el formato XML mencionado en la documentación de Matroska. En la GUI simplemente puede agregar/eliminar/editar etiquetas y sus objetivos a través de los controles en la parte superior del editor. En la configuración, también puede especificar que las etiquetas de ciertos objetivos deben agregarse automáticamente al cargar un archivo. Al usar la CLI, puede especificar que se debe agregar un campo a una etiqueta de cierto objetivo especificando el objetivo antes de ese campo. También puede eliminar explícitamente etiquetas de ciertos objetivos. A continuación se pueden encontrar ejemplos del uso de CLI de concreto.
Vea la sección de lanzamiento en GitHub.
tageditor-qt6
si está disponible para su sistema operativo.tageditor
de paquetes de los repositorios oficialeslibopengl0
esté instalado en Debian/Ubuntu)QT_QPA_PLATFORM=xcb
para deshabilitar el soporte nativo de Wayland si no funciona en su sistema)B9E36A7275FC61B464B67907E06FE8F53CDC6A4C
.B9E36A7275FC61B464B67907E06FE8F53CDC6A4C
.El editor de etiquetas tiene una GUI basada en QT y una interfaz de línea de comandos. Para una interfaz de la biblioteca C ++, consulte la biblioteca TagParser subyacente.
La GUI debe explicarse por sí misma: muchos de los elementos de la interfaz de usuario tienen información sobre herramientas con más explicaciones. El flujo de trabajo básico es bastante simple:
Puede establecer el comportamiento del editor para mantener los valores anteriores, para que no tenga que ingresar información como el nombre del álbum o el artista para todos los archivos en un álbum una y otra vez.
La GUI no admite establecer múltiples valores del mismo campo (además de cubiertas de diferentes tipos). Si un archivo ya contiene campos con múltiples valores, se descartan los valores adicionales. Use la CLI si se requiere soporte para múltiples valores por campo. Sin embargo, no todos los formatos de etiqueta admiten esto de todos modos.
La GUI no admite el procesamiento por lotes. Recomiendo usar la CLI para esto.
Esta captura de pantalla muestra la búsqueda experimental de MusicBrainz/Lyricwiki.
Consulte el cuadro de diálogo Configuración. Puede
La configuración de la GUI no afecta la CLI.
También hay una herramienta para cambiar el nombre de los archivos utilizando la información de la etiqueta almacenada en los archivos. El nuevo nombre para cada archivo es generado por un pequeño JavaScript que se puede personalizar. Se proporciona un script de ejemplo. Antes de hacer cambios reales, verá una vista previa con los nombres de archivo generados. Como se muestra en el script de ejemplo, también es posible mover archivos a otro directorio.
El editor de etiquetas también presenta un MusicBrainz, el Archivo de Arte de la portada y la búsqueda de Lyricwiki.
tageditor <operation> [options]
Consulte las operaciones y opciones disponibles con --help
. Para obtener una lista de todos los nombres de campo disponibles, rastrear los nombres de los atributos y el modificador, use la opción CLI --print-field-names
. No todos los campos son compatibles con todos los formatos de etiqueta/contenedor. En particular, el formato de contenedor Matroska no usa track
/ disk
para almacenar el número de pista / disco y total en un campo. En cambio, la part
de los campos y totalparts
deben usarse en el objetivo deseado.
Tenga en cuenta que los usuarios de Windows deben usar tageditor-cli.exe
en lugar de tageditor.exe
o usar Mintty como terminal. Consulte la sección "Problemas específicos de Windows" para obtener más detalles.
Aquí hay algunos ejemplos bash que ilustran la información de obtención y configuración de la etiqueta:
Muestra el título, el álbum y el artista de todos los archivos *.m4a en el directorio especificado:
tageditor get title album artist --files /some/dir/*.m4a
Muestra todos los campos compatibles de todos los archivos *.mkv en el directorio especificado:
tageditor get --files /some/dir/*.mkv
Extrae la cubierta del archivo especificado (OPUS):
tageditor extract cover --output-file the-cover.jpg --file some-file.opus
--attachment
.Muestra información técnica sobre todos los archivos *.m4a en el directorio especificado:
tageditor info --files /some/dir/*.m4a
Establece título, álbum, artista, portada y número de pista de todos los archivos *.m4a en el directorio especificado:
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
>
después de la lyrics
del nombre del campo hace que el editor de etiquetas lea el valor del archivo especificado. Esto también funciona para otros campos y está implícito para cover
.+
después de la track
de nombre de campo indica que el valor de campo debe aumentarse después de que se haya procesado un archivo./path/to/image
y la letra del archivo /path/to/lyrics
.Establece el título de ambos archivos especificados y el álbum del segundo archivo especificado:
tageditor set title0="Title for both files" album1="Album for 2nd file"
--files file1.ogg file2.mp3
El número después del nombre del campo especifica el índice del primer archivo para usar el valor para. El primer índice es 0.
Establece el título específicamente para la pista con la ID 3134325680
y elimina las etiquetas dirigidas a la canción/pista y al álbum/película/episodio en general:
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
Para obtener más información, consulte la especificación de Matroska.
Establece campos personalizados:
tageditor set mkv:FOO=bar1 mp4:©foo=bar2 -f file.mkv file.m4a
FOO
se establece en bar1
en file.mkv y el campo personalizado ©foo
está configurado en bar2
en file.m4a. Entonces, los prefijos le dicen al editor de etiquetas que el ID de campo especificado es una ID de campo nativa de un formato de etiqueta particular en lugar de un identificador genérico. Los campos nativos solo se aplican al formato correspondiente, por supuesto.mp4
: ID MP4/M4A de estilo ITUNE (debe ser exactamente 4 caracteres)mkv
: ID de matroskaid3
: ID3V2 ID (debe ser exactamente 3 o 4 caracteres dependiendo de la versión de la etiqueta)vorbis
: ID de comentarios de Vorbis, también funciona para Opus (que también utiliza comentarios de Vorbis)Elimina la bandera "forzada" de todas las pistas, marca la pista con el ID 2 como "predeterminado" y establece su idioma en "GER":
tageditor set track-id=all forced=no track-id=2 default=yes language=ger
Aquí hay otro ejemplo, que demuestra el uso de matrices y la sintaxis para aumentar los campos numéricos de aumento automático, como el número de pista:
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
Establece una portada de un tipo especial con una descripción:
tageditor set cover=":front-cover" cover0="/path/to/back-cover.jpg:back-cover:The description" -f foo.mp3
path:cover-type:description
. El tipo de cobertura y la descripción son opcionales. El delimitador se puede cambiar a través de --cover-type-delimiter
que es útil si la ruta incluye A :
.0
después de la segunda cover
. De lo contrario, la segunda cubierta solo se establecería en el segundo archivo (que ni siquiera se especifica en este ejemplo).… cover= cover0="/path/to/back-cover.jpg:back-cover"
.:
está ausente), se reemplazan todas las cubiertas existentes del tipo especificado y la nueva cubierta tendrá una descripción vacía.:
.… cover=":back-cover"
.tageditor --print-field-names
.Establece campos ejecutando un script para calcular los cambios dinámicamente:
tageditor set --pedantic debug --script path/to/script.js -f foo.mp3
main()
. Esta función se invoca para cada archivo y se pasa un objeto que representa el archivo actual como primer argumento. El archivo solo modificado si main()
devuelve un valor de verdad o undefined
; de lo contrario, el archivo se omite por completo (y por lo tanto no se modifica en absoluto, por lo que no se aplican los valores a través de --values
).testfiles/set-tags.js
En este repositorio para obtener un ejemplo que aplica correcciones básicas e intenta obtener letras y arte de portada cuando se pasan según la configuración (por ejemplo, --script-settings addCover=1 addLyrics=1
).--pedantic debug
es muy útil. También puede agregar --script-settings dryRun=1
y verificar esa configuración dentro del script como se muestra en testfiles/set-tags.js
.testfiles/set-tags.js
.ArrayBuffer
. El uso también debe usar un ArrayBuffer
para establecer el valor de los campos binarios, como la cubierta.String
o Number
. También debe usar uno de esos tipos para establecer el valor de esos campos. La representación de cadena del contenido asignado se convertirá automáticamente a lo que se necesita internamente.utility
expone métodos útiles, por ejemplo, para registrar y controlar el bucle de eventos.testfiles/http.js
en este repositorio para obtener un ejemplo de usar XHR y controlar el bucle de eventos.--id3v1-usage
). Por lo tanto, las etiquetas presentes durante la ejecución del script no representan necesariamente etiquetas que realmente están presentes en el archivo en el disco (sino en las etiquetas que estarán presentes después de guardar el archivo).--values
), estos valores tienen precedencia sobre los valores establecidos por el script.file.rename(newPath)
). Esto se hará inmediatamente y también si main()
devuelve un valor de falsificación (por lo que es posible cambiar el nombre de un archivo sin modificarlo devolviendo un valor de falsificación). Si la ruta especificada es relativa, se interpreta en relación con el directorio actual del archivo (y no con el directorio de trabajo actual del editor de etiquetas).utility.openFile(path)
. Esto permite copiar etiquetas de otro archivo, por ejemplo, para insertar etiquetas de los archivos originales que se han perdido al convertirse en un formato diferente. El ejemplo de script de ejemplo de ejemplo set-tags.js
también demuestra esto para cubiertas y letras cuando se pasan según la configuración del script (por ejemplo --script-settings addCover=1 originalDir=… originalExt=…
). Ejemplo: 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
y en la configuración de la GUI.La aplicación depende de las utilidades de C ++ y TagParser y se construye de la misma manera que estas bibliotecas. Para obtener instrucciones básicas, consulte el archivo ReadMe de las utilidades de C ++. Cuando la GUI QT está habilitada, también se requieren QT y QtUtilidades.
Para evitar la construcción de utilidades C ++/TagParser/QtUtilidades por separado, siga las instrucciones en "Construir esto recto". También hay documentación sobre varias variables de compilación que se pueden pasar a Cmake para influir en la construcción.
La GUI QT está habilitada de forma predeterminada. Se requieren los siguientes módulos QT (solo la versión de QT 5 y QT 6 probada): Widgets de red de GUI concurrentes centrales Declarative/Script WebEngineWidgets/WebKitWidgets
Tenga en cuenta que las viejas versiones QT carecen de soporte para las características modernas de JavaScript. Para usar la herramienta de cambio de nombre basada en JavaScript, se recomienda usar al menos Qt 5.12.
Para especificar la versión principal de QT para usar, establezca QT_PACKAGE_PREFIX
(por ejemplo, add -DQT_PACKAGE_PREFIX:STRING=Qt6
a los argumentos cmake).
-DWEBVIEW_PROVIDER:STRING=webkit/webengine/none
a los argumentos CMake para usar QT WebKit (funciona también con la versión 'revivida'), QT WebEngine o ninguna vista web. Si no se usa una vista web, la información del archivo solo se puede mostrar utilizando una vista de árbol simple. De lo contrario, el usuario puede elegir entre una página web y una vista de árbol.-DJS_PROVIDER:STRING=script/qml/none
a los argumentos cmake para usar el script Qt, qt qml o ningún motor javaScript en absoluto. Si no se usa ningún motor JavaScript, la utilidad de cambio de nombre está deshabilitada.Es posible construir sin la GUI si solo se necesita la CLI. En este caso, no se requieren dependencias de QT (incluidas QtUtilidades).
Para construir sin GUI, agregue los siguientes parámetros a la llamada CMake:
-DWIDGETS_GUI=OFF -DQUICK_GUI=OFF
Como una pequeña demostración de RapidJson reflectante, el editor de etiquetas presenta una exportación opcional de JSON. Para habilitarlo, agregue -DENABLE_JSON_EXPORT=ON
en los argumentos CMake.
Cuando está habilitado, se requieren las siguientes dependencias adicionales (solo en el tiempo de compilación): RapidJson, Reflective-RapidJson y 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
solo se requiere en Windows para manejar correctamente los enlaces simbólicos. Esto requiere una versión reciente de Git y un sistema de archivos que admite enlaces simbólicos (NTFS funciona). Además, debe habilitar el modo de desarrollador de Windows. Si se encuentra con errores "no encontrados" en la creación de enlaces simbólicos, use git reset --hard
dentro del repositorio para solucionar esto. 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
con el directorio donde desea instalar./usr/…/iso_639-2.json
con la ruta para su instalación de ISO-codes. cd "$BUILD_DIR"
ninja install
DESTDIR
en una ubicación de escritura (por ejemplo DESTDIR="temporary/install/dir" ninja install
) y mueva los archivos desde allí a la ubicación deseada después. Las siguientes advertencias se pueden trabajar utilizando el CLI-Wrapper en lugar del ejecutable principal. Este es el archivo que termina con -cli.exe
. Alternativamente, puede usar MintTy (por ejemplo, a través de MSYS2), que tampoco se ve afectado por esos problemas:
set ENABLE_CP_UTF8=0
si esto no se quiere.set ENABLE_CONSOLE=0
para deshabilitar ese comportamiento.El modo oscuro debe funcionar fuera de la caja en Windows 11 y de lo contrario se puede habilitar seleccionando el estilo de fusión.
El editor de etiquetas admite PMV2 fuera de la caja a partir de QT 6. Puede ajustar la configuración de acuerdo con la documentación QT.
Copyright © 2015-2024 Marius Kittler
Todo el código tiene licencia bajo GPL-2-o-Later.