Редактор тегов с QT GUI и интерфейсом командной строки. Поддерживает MP4 (iTunes), ID3, Vorbis, Opus, Flac и Matroska.
Редактор тегов может читать и написать следующие форматы тегов:
Дальнейшие замечания:
Редактор тегов также может отображать техническую информацию, такую как идентификатор, формат, язык, битрейт, продолжительность, размер, временные метки, частота выборки, FPS и другая информация треков.
Это также позволяет проверять и проверять структуру элементов файлов MP4 и Matroska.
Иногда редактор тегов должен переписать весь файл, чтобы применить изменения. Это приводит к созданию временного файла. С настройками по умолчанию графического интерфейса это даже обеспечивается консервативным , так как временные файлы также служат резервной копией , если что -то пойдет не так, например, ваш компьютер вылетает при сохранении или ошибке в редакторе тегов, особенно структурированные файлы. Поэтому при использовании CLI он также рекомендуется использовать --force-rewrite
.
В следующем разделе описывается, как настраивать настройки, чтобы избежать переписывания за счет отсутствия резервного копирования, имея некоторую накладку в файлах и/или хранение тегов в конце файла.
Тем не менее, не всегда будет возможно избегать переписывания файла во всех случаях. Вы можете настроить каталог для временных файлов в настройках графического интерфейса или опции CLI --temp-dir
. Затем вы можете легко очистить все временные файлы в какой -то момент вместе. Для эффективности временный каталог должен находиться в той же файловой системе, что и файлы, которые вы редактируете. Функция для автоматического удаления временных файлов еще не была реализована.
Редактор позволяет выбирать, следует ли размещать теги в начале или в конце файла MP4/Matroska. Размещение тегов в конце файла может избежать необходимости переписать весь файл, чтобы применить изменения.
В CLI это контролируется через опцию --tag-pos
. Чтобы обеспечить соблюдение конкретного --tag-pos
, даже если это требует перезаписываемого файла, в сочетании с --force
Теги ID3V2 и комментарии Vorbis/Opus могут быть размещены только в начале. Теги ID3V1 могут быть размещены только в конце файла. Следовательно, эта конфигурация не имеет никакого влияния при работе с такими тегами.
Также возможно контролировать положение индекса/сигналов. Тем не менее, в настоящее время это поддерживается только при работе с файлами Matroska.
Примечание. Это не может быть реализовано для MP4, поскольку теги и индекс связаны друг с другом. При работе с файлами MP4 позиция индекса всегда будет такой же, как и позиция тега.
Помещение индекса в начале файла иногда называется FastStart .
Для привлечения FastStart через CLI требуются следующие варианты:
tageditor set --index-pos front --force
Заполнение позволяет добавлять дополнительную информацию, не переписывая весь файл и не добавляя тег. Можно настроить использование прокладки:
Также можно заставить переписать весь файл для обеспечения соблюдения предпочтительной прокладки.
Соответствующими вариантами CLI являются --min-padding
, --max-padding
, --preferred-padding
и --force-rewrite
.
Использование преимущества прокладки в настоящее время не поддерживается при работе с потоками OGG (оно поддерживается при работе с необработанными потоками FLAC).
Как объяснено в разделе «Резервные/временные файлы», это не очень хорошая идея, поскольку временный файл, который создается при переписывании всего файла, также служит резервной копией. Однако, если вы, тем не менее, хотите избежать переписывания файла как можно больше, установите следующее в настройках «макета файла» графического интерфейса:
При использовании CLI вам просто нужно добавить --max-padding 429496729
к аргументам CLI (и избегайте любого из других аргументов, упомянутых в предыдущих разделах).
Редактирование больших файлов (особенно файлов Matroska) может занять некоторое время. Чтобы улучшить производительность, поместите индекс в конце файла (опция CLI --index-pos back
), потому что тогда размер индекса никогда не придется пересматривать. Также следуйте совету из раздела «Резервные/временные файлы», чтобы заставить переписать и поместить временный каталог в ту же файловую систему, что и файл, который вы редактируете. Принудительное переписывание может улучшить производительность, потому что тогда редактор тегов даже не попытается увидеть, можно ли избежать, и, таким образом, может пропустить вычисления, которые могут занять заметное время для больших файлов матроски.
Конечно, возможность избежать переписывания все равно будет более оптимальной. Ознакомьтесь с предыдущим разделом, как это достичь. Чтобы повысить производительность, избегая переписывания, поместите тег в конце (опция CLI --tag-pos back
). Тогда редактор тегов даже не попытается положить теги спереди и, таким образом, может пропустить несколько вычислений. (Избегать переписывания все еще не очень хорошая идея в целом.)
Формат контейнера Matroska (и WebM, основанный на Матроске), разбивается с общими соглашениями. Поэтому не все примеры CLI, упомянутые ниже, имеют смысл использовать в таких файлах.
Как правило, один файл Matroska может иметь несколько тегов, и каждый тег имеет «цель», которая решает, к чему применяются поля тега, например, песня или весь альбом. Поэтому при использовании CLI или графического интерфейса вы должны знать, к какой теге/цели добавить поля.
Matroska также не использует одно комбинированное поле для номера трека/диска, и это, как и другие форматы. Вместо этого он использует отдельные part
поля и totalparts
, которые снова необходимо добавить в тег желаемой цели (например, 50/«альбом» для номера трека и общего числа).
Ознакомьтесь с официальной документацией Matroska по тегам для получения подробной информации. Он также содержит примеры для аудиоконтента и видеоконтента.
Обратите внимание, что редактор тегов не поддерживает формат XML, упомянутый в документации Matroska. В графическом интерфейсе вы можете просто добавить/удалить/редактировать теги и их цели через элементы управления в верхней части редактора. В настройках вы также можете указать, что теги определенных целей следует автоматически добавлять при загрузке файла. При использовании CLI вы можете указать, что поле следует добавить в тег определенной цели, указав цель до этого поля. Вы также можете явно удалить теги определенных целей. Примеры использования бетона CLI можно найти ниже.
См. Раздел «Выпуск» на GitHub.
tageditor-qt6
если доступен для вашей ОС.tageditor
от официальных репозиториевlibopengl0
установлен на Debian/Ubuntu)QT_QPA_PLATFORM=xcb
чтобы отключить поддержку Native Wayland, если она не работает в вашей системе)B9E36A7275FC61B464B67907E06FE8F53CDC6A4C
.B9E36A7275FC61B464B67907E06FE8F53CDC6A4C
.Редактор тегов имеет графический интерфейс на основе QT и интерфейс командной строки. Для просмотра интерфейса библиотеки C ++ оценить базовую библиотеку Tagparser.
GUI должен быть эксплуатируется - многие элементы пользовательского интерфейса имеют мощные подсказки с дальнейшими объяснениями. Основной рабочий процесс довольно прост:
Вы можете установить поведение редактора, чтобы сохранить предыдущие значения, поэтому вам не нужно вводить информацию, такую как имя альбома или артист, для всех файлов в альбоме снова и снова.
GUI не поддерживает установление нескольких значений одного и того же поля (кроме покрытий разных типов). Если файл уже содержит поля с несколькими значениями, дополнительные значения отбрасываются. Используйте CLI, если требуется поддержка нескольких значений на поле. В любом случае не все форматы тегов поддерживают это.
GUI не поддерживает партийную обработку. Я рекомендую использовать CLI для этого.
Этот скриншот показывает экспериментальный музыкальный поиск Musicbrainz/Lyricwiki.
Осмотрите диалог настроек. Ты можешь
Настройки графического интерфейса не влияют на CLI.
Существует также инструмент для переименования файлов, используя информацию тега, хранящуюся в файлах. Новое имя для каждого файла генерируется небольшим JavaScript, который можно настроить. Пример сценария приведен. Прежде чем внести какие -либо фактические изменения, вы увидите предварительный просмотр с сгенерированными именами файлов. Как показано в примере скрипта, также возможно переместить файлы в другой каталог.
Редактор тегов также включает в себя Musicbrainz, Cover Art Archive и Lyricwiki Search.
tageditor <operation> [options]
Проверьте доступные операции и опции с помощью --help
. Для списка всех доступных имен поля, имен атрибутов трека и модификатор, используйте опцию CLI --print-field-names
. Не все поля поддерживаются всеми форматами тегов/контейнеров. В частности, в формате контейнера Matroska не используется track
/ disk
для хранения номера трека / диска в одном поле. Вместо этого необходимо использовать part
полей и totalparts
на желаемой цели.
Обратите внимание, что пользователи Windows должны использовать tageditor-cli.exe
вместо tageditor.exe
или использовать Mintty в качестве терминала. Проверьте раздел «Проблемы с конкретными Windows» для получения подробной информации.
Вот несколько примеров BASH, которые иллюстрируют получение и настройку информации тега:
Отображает название, альбом и артист всех *.m4a файлов в указанном каталоге:
tageditor get title album artist --files /some/dir/*.m4a
Отображает все поддерживаемые поля всех *.mkv файлов в указанном каталоге:
tageditor get --files /some/dir/*.mkv
Извлекает обложку указанного (Opus) файла:
tageditor extract cover --output-file the-cover.jpg --file some-file.opus
--attachment
.Отображает техническую информацию обо всех файлах .m4a в указанном каталоге:
tageditor info --files /some/dir/*.m4a
Устанавливает заголовок, альбом, артист, обложка и номера отслеживания всех *.m4a файлов в указанном каталоге:
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
указанного файла. Это также работает и для других областей и подразумевается для cover
.+
после track
имени поля указывает, что значение поля должно быть увеличено после обработки файла./path/to/image
, а также текст из файла /path/to/lyrics
.Устанавливает заголовок обоих указанных файлов и альбома второго указанного файла:
tageditor set title0="Title for both files" album1="Album for 2nd file"
--files file1.ogg file2.mp3
Номер после имени поля указывает индекс первого файла для использования значения для. Первый индекс 0.
Устанавливает заголовок специально для трека с ID 3134325680
и удаляет теги, нацеленные на песню/трек и альбом/фильм/эпизод в целом:
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
Для получения дополнительной информации оценить спецификацию Матроски.
Устанавливает пользовательские поля:
tageditor set mkv:FOO=bar1 mp4:©foo=bar2 -f file.mkv file.m4a
FOO
установлено в bar1
в file.mkv, а пользовательское поле ©foo
установлено в bar2
в файле.m4a. Таким образом, префиксы сообщают редактору тегов, что указанный идентификатор поля является собственным идентификатором поля определенного формата тега, а не общего идентификатора. Нативные поля применяются только к соответствующему формату, конечно.mp4
: Itune-стиль MP4/M4A ID (должно быть ровно 4 символа)mkv
: Matroska IDid3
: ID3V2 ID (должно быть ровно 3 или 4 символа в зависимости от версии тега)vorbis
: идентификатор комментариев Vorbis, также работает в Opus (который также использует комментарии Vorbis)Удаляет флаг «принудительного» со всех треков, помечает трек с ID 2 как «по умолчанию» и устанавливает свой язык на «GER»:
tageditor set track-id=all forced=no track-id=2 default=yes language=ger
Вот еще один пример, демонстрирующий использование массивов и синтаксиса для автоматических численных полей, таких как номер дорожки:
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
Устанавливает обложку специального типа с описанием:
tageditor set cover=":front-cover" cover0="/path/to/back-cover.jpg:back-cover:The description" -f foo.mp3
path:cover-type:description
. Тип обложки и описание необязательны. Разделитель может быть изменен с помощью --cover-type-delimiter
, который полезен, если путь включает в себя :
.0
после 2 -й cover
требуется. В противном случае 2 -я обложка будет установлен только во 2 -м файле (что даже не указано в этом примере).… cover= cover0="/path/to/back-cover.jpg:back-cover"
.:
отсутствует), все существующие обложки указанного типа заменяются, а новая обложка будет иметь пустое описание.:
.… cover=":back-cover"
.tageditor --print-field-names
.Устанавливает поля, выполняя сценарий для динамического вычисления изменений:
tageditor set --pedantic debug --script path/to/script.js -f foo.mp3
main()
. Эта функция вызывается для каждого файла и передает объект, представляющий текущий файл в качестве первого аргумента. Файл изменен только если main()
возвращает правдивое значение или undefined
; В противном случае файл полностью пропущен (и, следовательно, вообще не изменяется, поэтому значения, передаваемые через --values
не применяются).testfiles/set-tags.js
в этом репозитории для примера, который применяет основные исправления и пытается принести текст и обложку при передаче настроек (например, --script-settings addCover=1 addLyrics=1
).--pedantic debug
очень полезна. Вы также можете добавить --script-settings dryRun=1
и проверить этот настройка в сценарии, как показано в testfiles/set-tags.js
.testfiles/set-tags.js
файлов.ArrayBuffer
. Использование также должно использовать ArrayBuffer
для установки значения двоичных полей, таких как крышка.String
или Number
. Вы также должны использовать один из этих типов, чтобы установить значение этих полей. Повторное представление назначенного контента будет автоматически преобразована в то, что необходимо внутри.utility
раскрывает полезные методы, например, для ведения журнала и контроля цикла событий.testfiles/http.js
в этом репозитории для примера использования XHR и управления циклом события.--id3v1-usage
). Таким образом, теги, присутствующие во время выполнения скрипта, не обязательно представляют теги, которые фактически присутствуют в файле на диске (скорее теги, которые будут присутствовать после сохранения файла).--values
), то эти значения имеют приоритет над значениями, установленными сценарием.file.rename(newPath)
). Это будет сделано немедленно, а также, если main()
возвращает фальсификационное значение (поэтому можно только переименовать файл без изменения его путем возвращения фальсификационного значения). Если указанный путь является относительным, он интерпретируется относительно текущего каталога файла (а не для текущего рабочего каталога редактора тегов).utility.openFile(path)
. Это позволяет копировать теги из другого файла, например, вставить теги обратно из исходных файлов, которые были потеряны при преобразовании в другой формат. Упомянутый пример сценария set-tags.js
также демонстрирует это для обложки и текстов, когда в соответствии с настройками скрипта передаются (например, --script-settings addCover=1 originalDir=… originalExt=…
). Пример: 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
и в настройках графического интерфейса.Приложение зависит от утилит C ++ и Tagparser и построено так же, как и эти библиотеки. Для базовых инструкций. Проверьте файл readme утилит C ++. Когда QT GUI включен, также требуются QT и QTUTIONDIENS.
Чтобы избежать создания утилит C ++/Tagparser/QTUTITIONS отдельно, следуйте инструкциям «Построить это прямо». Есть также документация о различных переменных сборки, которые могут быть переданы в Cmake, чтобы повлиять на сборку.
QT GUI включен по умолчанию. Требуются следующие модули QT (только последняя проверка версии QT 5 и QT 6): основные параллельные виджеты с сетью графического интерфейса декларатив/скрипт webenginewidgets/webkitwidgets
Обратите внимание, что старые версии QT не имеют поддержки современных функций JavaScript. Чтобы использовать инструмент переименования на основе JavaScript, рекомендуется использовать как минимум QT 5.12.
Чтобы указать основную версию QT для использования, установите QT_PACKAGE_PREFIX
(например, добавление -DQT_PACKAGE_PREFIX:STRING=Qt6
в аргументы Cmake).
-DWEBVIEW_PROVIDER:STRING=webkit/webengine/none
в аргументы Cmake для использования либо QT Webkit (также работает с «возрожденной» версией), QT Webengine или вообще нет. Если веб -представление не используется, информация о файле может быть показана только с помощью простого представления дерева. В противном случае пользователь может выбрать между веб -страницей и представлением дерева.-DJS_PROVIDER:STRING=script/qml/none
в аргументы Cmake для использования либо сценария QT, QT QML или отсутствие двигателя JavaScript. Если двигатель JavaScript не используется, утилита переименования отключена.Можно построить без графического интерфейса, если требуется только CLI. В этом случае не требуется зависимости QT (включая QTUTIOLIS).
Чтобы построить без графического интерфейса, добавьте следующие параметры в вызов Cmake:
-DWIDGETS_GUI=OFF -DQUICK_GUI=OFF
В качестве небольшой демонстрации рефлексивного Rapidjson редактор TAG оснащен дополнительным экспортом JSON. Чтобы включить это, добавьте -DENABLE_JSON_EXPORT=ON
на аргументы Cmake.
При включении требуются следующие дополнительные зависимости (только во время сборки): Rapidjson, Reflective-Rapidjson и 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
требуется только в Windows для правильной обработки символов. Это требует недавней версии GIT и файловой системы, которая поддерживает Symlinks (NTFS работает). Кроме того, вам необходимо включить режим разработчика Windows. Если вы столкнетесь с ошибками «не найдены» при создании символики, используйте git reset --hard
в репозитории, чтобы исправить это. 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
в каталог, в который вы хотите установить./usr/…/iso_639-2.json
с путем для вашей установки ISO-CODES. cd "$BUILD_DIR"
ninja install
DESTDIR
в место для записи (например, DESTDIR="temporary/install/dir" ninja install
), и впоследствии переместите файлы оттуда в желаемое место. Следующие предостережения могут быть проработаны, используя Cli-Wrapper вместо основного исполняемого файла. Это файл, который заканчивается с -cli.exe
. В качестве альтернативы вы можете использовать Mintty (например, через MSYS2), который также не влияет на эти проблемы:
set ENABLE_CP_UTF8=0
если это не нужно.set ENABLE_CONSOLE=0
чтобы отключить это поведение.Темный режим должен работать из коробки под Windows 11 и в противном случае можно включить, выбрав стиль слияния.
Редактор тегов поддерживает PMV2 из коробки как QT 6. Вы можете настроить настройки в соответствии с документацией QT.
Copyright © 2015-2024 Marius Kittler
Весь код лицензирован в рамках GPL-2-OR-Later.