#tags #metadata #flac #field-name #query #querying #modifying

app flaq

用于修改和查询 .flac 文件元数据的简单 CLI 工具

4 个版本 (2 个重大更改)

0.4.0 2024 年 5 月 14 日
0.3.1 2024 年 5 月 13 日
0.3.0 2024 年 5 月 9 日
0.2.0 2024 年 5 月 8 日

#89音频

Download history 233/week @ 2024-05-03 350/week @ 2024-05-10 33/week @ 2024-05-17 3/week @ 2024-05-24 1/week @ 2024-06-07 2/week @ 2024-06-14

每月下载量 168

MIT 许可证

50KB
956

Flaq

Build Status codecov crates.io

内容

安装

Cargo 安装

crates.io 列表可以在这里找到。

以下是用 cargo 安装的示例。

cargo install flaq

请注意,cargo 安装不包含自动完成脚本,因此除非您手动将脚本复制到相应的 /usr/share/ 目录,否则 shell 自动完成将不会工作。

Arch Linux AUR

AUR 列表可以在这里找到。

以下是用 yay 安装的示例。如果您使用 paru,只需将 paru 替换为 yay 即可。

yay -S flaq

用法

以下是简短的帮助说明用法(可通过 flaq -h 访问)。要获取详细帮助,请运行 flac --help

A CLI tool for editing and query `.flac` files metadata tags

Usage: flaq [OPTIONS]

Options:
  -v, --version-number  Print version
  -c, --clean           Clean duplicated fields, where both the tag field and value match
      --clean-all       [Caution] Clean duplicated fields, and deletes ALL non-standard header comments
      --set             [Default] Set field to new given values. Previous values are deleted
      --append          Append flag. If set appends values leaving existing values untouched
      --delete          Deletes associated values for provided fields, leaving the field unset
  -L, --list-detailed   Provides a formated list of all tags associated with each matching file
  -l, --list            Provides a machine readable listing of matching files
      --dry-run         Performs the modification, ready for previewing, without saving/commiting the change
  -h, --help            Print help (see more with '--help')

Tag Fields:
  -t, --title [<TITLE>...]
          Track/Work name
      --song-version [<VERSION>...]
          Recording version (e.g. remix info)
  -A, --album [<ALBUM>...]
          The collection name to which this track belongs
  -n, --tracknumber [<TRACKNUMBER>...]
          The track number of this piece if part of a specific larger collection or album
  -a, --artist [<ARTIST>...]
          The artist generally considered responsible for the work
      --performer [<PERFORMER>...]
          The artist(s) who performed the work
      --copyright [<COPYRIGHT>...]
          Copyright attribution, e.g., '2001 Nobody's Band' or '1999 Jack Moffitt'
      --license [<LICENSE>...]
          License information, for example, 'All Rights Reserved'
  -o, --organization [<ORGANIZATION>...]
          Name of the organization producing the track (i.e. the 'record label')
      --description [<DESCRIPTION>...]
          A short text description of the contents
  -g, --genre [<GENRE>...]
          A short text indication of music genre
  -d, --date [<DATE>...]
          Date the track was recorded
      --location [<LOCATION>...]
          Location where track was recorded
      --contact [<CONTACT>...]
          Contact information for the creators or distributors of the track
      --isrc [<ISRC>...]
          ISRC number for the track

Arguments:
  -q, --query <QUERY>
  -f, --files [<FILES>...]

查询

查询是一系列操作,将针对每个提供的文件进行评估,不包括不满足查询的文件。

查询是变量、字面量和运算符的组合。查询是一个表达式,可以是任何其他表达式的组合,但最终必须评估为布尔值。

变量

任何标准标签都可以用作变量。该变量将替换为每个相应文件匹配的标签列表。变量通过其完整标签名称使用,该名称不区分大小写(例如,TitletracknumberArtISt 都是变量的有效使用)。

如果提供的文件中任何必需的变量未设置,查询将出错。

  • 日期
    • 第一个用于 date 标签的标记,必须以 YYYYYYYY-MMYYYY-MM-DD 的格式存储。注意,查询的日期字面量以 d 前缀,但存储的日期不是
  • Tracknumber
    • 第一个用于 tracknumber 标签的标记,必须可以解析为无符号32位整数。
    • 如果 Tracknumber 未设置或无法解析,将引发错误并导致查询失败
  • 其他标签
    • 所有其他标签都将替换为为该标签设置的字符串列表

字面量

  • 字符串字面量 "<string>"
    • 字符串字面量必须用引号括起来,允许使用转义字符(包括额外的引号)。字符串可以包含任何Unicode字符
    • 例如: "Casiopea""瀬葉淳""Some \"Escape Characters\""
  • 整数字面量 <num>
    • 整数字面量必须可以解析为32位无符号整数(包括0在内的正整数)
    • 例如: 1001234
  • 日期字面量(《d<YYYY>、《d<YYYY>-<MM>d<YYYY>-<MM>-<DD>
    • 日期必须以 d 前缀,并可以按年、年-月或年-月-日形式给出。
    • 例如: d1980d2001-01d1192-03-12

运算符

比较运算符

比较任何两个匹配类型的对。结果是一个布尔表达式。

  • == 等于
  • ?= 包含
  • != 不等于

数值比较运算符

对任何两个日期或整数进行操作。结果是一个布尔表达式。

  • > 大于
  • >= 大于等于
  • < 小于
  • <= 小于等于

逻辑运算符

对两个布尔表达式(或一个逻辑非)进行操作。结果是一个布尔表达式。

  • !
  • &&
  • ||

标准

以下列出的是标准,它不是特别严格,有模糊的空间。该程序完全遵循此标准,但有以下例外;

  • 字段 DateTracknumber 将支持任意数量的参数,但是第0个标签必须符合以下格式
    • Date 必须给出为 YYYYYYYY-MMYYYY-MM-DD。为了比较的目的,更具体的日期将被截断以匹配不那么具体的日期(例如,比较 YYYY-MM-DDYYYY 将截断第一个日期,以便操作的结果只是比较年份)
    • Tracknumber 必须能够解析为 u32(无符号32位整数)。用户自己决定是否从 10(尽管建议从 1 开始,以保持与实际曲目编号的一致性)进行曲目索引。
  • 仅第0个 Date/Tracknumber 将用于比较(因此必须满足上述要求)。其他标签可以可选地包含以提供更多上下文。

Vorbis 注释标准(Flac 元数据标签)

字段名称

以下是建议的、最少的标准字段名称列表,以及对其预期用途的描述。没有单个或组字段名称是强制性的;注释标题可能包含此列表中的名称之一、所有名称或没有任何名称。

  • TITLE
    • 曲目/作品名称
  • VERSION
    • 版本字段可用于区分单个集合中同一曲目标题的多个版本。(例如,混音信息)
  • ALBUM
    • 属于此曲目的集合名称
  • TRACKNUMBER
    • 如果此曲目是特定较大集合或专辑的一部分,则该曲目的曲目编号
  • ARTIST
    • 通常被认为是作品责任人的艺术家。在流行音乐中,这通常是表演乐队或歌手。对于古典音乐,这将是指挥家、乐团、独奏家。对于有声书,这将是指原文的作者。
  • PERFORMER
    • 表演此作品的艺术家的姓名。在古典音乐中,这将是指挥家、乐团、独奏家。在有声书中,这将是指读的演员。在流行音乐中,这通常与 ARTIST 相同,并且被省略。
  • COPYRIGHT
    • 版权归属,例如,“2001无人乐队”或“1999杰克·莫菲特”
  • LICENSE
    • 许可信息,例如,“版权所有”,“任何使用许可”,指向许可的URL,例如创意共享许可(例如,“creativecommons.org/licenses/by/4.0/”),或类似内容。
  • ORGANIZATION
    • 制作此曲目的组织的名称(即“唱片公司”)
  • DESCRIPTION
    • 内容的简短文本描述
  • GENRE
    • 音乐类型的简短文本指示
  • DATE
    • 录制此曲目的日期
  • LOCATION
    • 录制此曲目的地点
  • CONTACT
    • 创作者或发行商的联系方式。这可能是一个URL,一个电子邮件地址,制作标签的物理地址。
  • ISRC
    • 此曲目的ISRC号码;有关ISRC号码的更多信息,请参阅ISRC简介页面。

影响

字段名称不应国际化;这是对简单性的让步,而非试图排除世界上不使用英语的绝大多数人。然而,字段内容使用UTF-8字符编码,以便容易地表示任何语言。我们拥有整个字段的长度的限制以及对字段名称的约束,因此字段名称以已知的方式进行限制。因此,我们也有字段内容的长度。个别“供应商”可以在合理范围内使用非标准字段名称。在此阶段,通过上下文应明确注释字段的正确使用。滥用将被禁止。非标准字段名称没有供应商特定的前缀。供应商应尽力避免任意污染公共命名空间。我们将通常收集更有用的标签以帮助标准化。字段名称在注释标题中不需要是唯一的(出现一次)。例如,假设一个音轨是由三位知名艺术家录制的;以下内容是允许的,并且受到鼓励

依赖项

~4–14MB
~131K SLoC