带有QT GUI和命令行接口的标签编辑器。支持MP4(iTunes),ID3,Vorbis,Opus,Flac和Matroska。
标签编辑器可以读写以下标签格式:
进一步的评论:
标签编辑器还可以显示技术信息,例如ID,格式,语言,比特率,持续时间,大小,时间戳,采样频率,FPS和其他轨道的信息。
它还允许检查和验证MP4和Matroska文件的元素结构。
有时,标签编辑器必须重写整个文件才能应用更改。这导致创建临时文件。使用GUI的默认设置,这甚至可以执行保守,因为临时文件也可以作为备份,以防万一出现问题,例如您的计算机在保存时会崩溃,或者在标签编辑器中保存错误,特别是结构化文件。因此,当使用CLI时,还建议使用--force-rewrite
。
下一节介绍如何调整设置以避免以没有备份的费用重写,在文件末尾存储标签中有一些填充,并在文件末尾存储标签。
但是,无论如何,在所有情况下,都不会总是避免重写文件。您可以在GUI设置或CLI选项--temp-dir
中为临时文件配置目录。然后,您可以在某个时候轻松清理所有临时文件。为了效率,临时目录应与您要编辑的文件同一文件系统。尚未实现一个自动删除临时文件的功能。
编辑器允许您选择是否应将标签放置在MP4/Matroska文件的开头还是结尾处。在文件末尾放置标签可以避免重写整个文件以应用更改。
在CLI中,这是通过--tag-pos
选项控制的。为了强制执行特定的--tag-pos
,即使需要重写文件,也将与--force
选项结合使用。
ID3V2标签和Vorbis/Opus注释只能在开始时放置。 ID3V1标签只能放置在文件末尾。因此,在处理此类标签时,这种配置没有效果。
也可以控制索引/提示的位置。但是,目前仅在处理Matroska文件时得到支持。
注意:由于标签和索引相互绑定,因此无法实现MP4。处理MP4文件时,索引位置将始终与标签位置相同。
将索引放在文件的开头有时称为faststart 。
对于通过CLI强迫FastStart,需要以下选项:
tageditor set --index-pos front --force
填充允许添加其他标签信息,而无需重写整个文件或附加标签。可以配置使用填充物:
也可以强制重写整个文件以强制使用首选的填充。
相关的CLI选项是--min-padding
, --max-padding
, --preferred-padding
和--force-rewrite
。
目前,在处理OGG流时,目前不支持填充(在处理RAW FLAC流时得到支持)。
如“备份/临时文件”部分中所述,这不是一个好主意,因为重写整个文件时创建的临时文件也可以用作备份。但是,如果您想避免尽可能多地重写文件,请在GUI的“文件布局”设置中设置以下内容:
使用CLI时,您只需要在CLI参数中添加--max-padding 429496729
(并避免以前部分中提到的任何其他参数)。
编辑大文件(尤其是matroska文件)可能需要一些时间。为了提高性能,请将索引放在文件的末尾(CLI选项--index-pos back
),因为不必重新计算索引的大小。还要遵循“备份/临时文件”部分的建议,以强制重写,并将临时目录放在与您正在编辑的文件相同的文件系统上。强迫重写可以提高性能,因为那样的标签编辑器甚至都不会尝试查看是否可以避免它,因此可以跳过计算,这些计算可能会花费很大的时间来获得大型Matroska文件。
当然,能够避免重写仍然更加最佳。结帐有关如何实现这一目标的部分。为了避免重写时进一步提高性能,请将标签放在末端(CLI选项--tag-pos back
)。然后,标签编辑器甚至不会尝试将标签放在前面,因此可以跳过一些计算。 (避免重写仍然不是一个好主意。)
Matroska容器格式(以及基于Matroska的WebM)正在与共同的约定中分解。因此,并非下面提到的所有CLI示例在此类文件上使用都是有意义的。
通常,一个Matroska文件可以具有多个标签,并且每个标签都有一个“目标”,该标签决定了标签的字段应用的内容,例如歌曲或整张专辑。因此,使用CLI或GUI时,您需要了解要添加字段的标签/目标。
Matroska也不像其他格式一样使用一个组合字段来进行轨道/磁盘编号。相反,它使用了单独的字段part
和totalparts
这些部分需要再次将其添加到所需目标的标签(例如50/“专辑”曲目编号和Total)。
请查看有关标签的官方Matroska文档以获取详细信息。它还包含音频内容和视频内容的示例。
请注意,标签编辑器不支持Matroska文档中提到的XML格式。在GUI中,您只需通过编辑器顶部的控件添加/删除/编辑标签及其目标。在设置中,您还可以指定加载文件时应自动添加某些目标的标签。使用CLI时,您可以通过在该字段之前指定目标来指定将字段添加到某个目标的标签中。您还可以明确删除某些目标的标签。可以在下面找到混凝土CLI使用的示例。
请参阅Github上的发布部分。
tageditor-qt6
软件包,如果可用于操作系统。tageditor
可用libopengl0
安装在Debian/Ubuntu上)QT_QPA_PLATFORM=xcb
如果在系统上不起作用,请禁用本地Wayland支持)B9E36A7275FC61B464B67907E06FE8F53CDC6A4C
签名。B9E36A7275FC61B464B67907E06FE8F53CDC6A4C
签名。标签编辑器具有基于QT的GUI和命令行接口。对于C ++库接口查看基础TagParser库。
GUI应该是自我解释的 - 许多UI元素都具有带有进一步解释的工具提示。基本工作流程非常简单:
您可以将编辑器的行为设置为保持以前的值,因此您不必一次又一次地输入专辑名称或艺术家的信息。
GUI不支持设置同一字段的多个值(除了不同类型的封面)。如果文件已经包含具有多个值的字段,则将丢弃附加值。如果需要每个字段的多个值,则使用CLI。不过,并非所有标签格式都支持这一点。
GUI不支持批处理处理。我建议对此使用CLI。
此屏幕截图显示了实验性音乐brainz/Lyricwiki搜索。
结帐“设置对话框”。你可以
GUI的设置不会影响CLI。
还有一个工具可以使用文件中存储的标签信息重命名文件。每个文件的新名称是由可以自定义的小JavaScript生成的。提供了一个示例脚本。在进行任何实际更改之前,您将看到带有生成文件名称的预览。如示例脚本所示,也可以将文件移动到另一个目录中。
标签编辑器还具有Musicbrainz,Cover Art Archive和Lyricwiki搜索。
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
提取指定文件的封面:
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
有关更多信息,请查看Matroska规范。
设置自定义字段:
tageditor set mkv:FOO=bar1 mp4:©foo=bar2 -f file.mkv file.m4a
FOO
设置为file.mkv中的bar1
,并且自定义字段©foo
设置为file.m4a中的bar2
。因此,前缀告诉标签编辑器,指定的字段ID是特定标签格式的本机字段ID,而不是通用标识符。当然,天然字段仅应用于相应的格式。mp4
:Itune风格的MP4/M4A ID(必须是4个字符)mkv
:Matroska IDid3
:ID3V2 ID(必须完全是3或4个字符,具体取决于标签版本)vorbis
:Vorbis评论ID,也适用于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
更改定界符,如果路径包含a :
cover
后的0
。否则,第二个封面仅在第二个文件中设置(在此示例中甚至没有指定)。… 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
和GUI设置设置标签中使用的首选编码。该应用程序取决于C ++实用程序和TagParser,并且以与这些库相同的方式构建。有关基本说明,请查看C ++实用程序的读数文件。启用QT GUI时,也需要QT和QTUTISINES。
为避免分别构建C ++实用程序/TagParser/QTutilitys,请按照“构建此笔直”下的说明。还有有关各种构建变量的文档,可以将其传递给CMAKE以影响构建。
默认情况下启用了QT GUI。需要以下QT模块(仅测试了最新的QT 5和QT 6版本):核心并发GUI网络窗口小部件声明/脚本WebEngineWidgets/webkitwidgets
请注意,旧QT版本缺乏对现代JavaScript功能的支持。要使用基于JavaScript的重命名工具,建议至少使用QT 5.12。
要指定要使用的主要QT版本,请设置QT_PACKAGE_PREFIX
(例如add -DQT_PACKAGE_PREFIX:STRING=Qt6
to cmake garmuments)。
-DWEBVIEW_PROVIDER:STRING=webkit/webengine/none
to cmake参数使用QT WebKit(也可以与'Revived'版本一起使用),QT WebEngine或根本没有Web视图。如果没有使用Web视图,则只能使用普通树视图显示文件信息。否则,用户可以在网页和树视图之间进行选择。-DJS_PROVIDER:STRING=script/qml/none
to cmake参数使用qt脚本,qt qml或根本没有JavaScript引擎。如果没有使用JavaScript引擎,则将禁用重命名实用程序。如果仅需要CLI,则可以在没有GUI的情况下构建。在这种情况下,无需QT依赖项(包括QTutilitys)。
要在没有GUI的情况下构建,请在CMAKE调用中添加以下参数:
-DWIDGETS_GUI=OFF -DQUICK_GUI=OFF
作为反射式Rapidjson的小型演示,标签编辑器具有可选的JSON导出。要启用它,请在cmake参数中添加-DENABLE_JSON_EXPORT=ON
。
启用后,需要以下其他依赖项(仅在构建时间):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 Works)的文件系统。此外,您需要启用Windows开发人员模式。如果您遇到symlink创建上的“找不到”错误,请使用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-编码安装的路径。 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下的框开箱即用,否则可以通过选择融合样式来启用。
TAG编辑器在QT 6开始支持PMV2。您可以根据QT文档进行调整。
版权所有©2015-2024 Marius Kittler
所有代码均在GPL-2或陪同人员下获得许可。