| 705 | 博客 | 2 条评论 | Glen Liu
今天为foobar2000添加200多个学习英语的Mp3音频,在列表中显示的全是一样的kuowa,完全分不清楚谁是谁。为了便于学习,我就了解了下如何批量foobar2000的 标题,专辑,艺术家,音轨号等属性(200多手动一个个的来太耗时了),于是就找到了这个“foobar2000标题格式化语法参考”,百度网盘有,但是需要开通会员才能下载,我又找了其它的资源,再做也下简单的整理,需要的收藏一下吧。
标题格式化语法参考
一般字段
语法 | 解释 | |
---|---|---|
%title% | 音轨标题。若元数据 “title” 不存在则使用文件名代替。 | |
%artist% | 艺术家名。依次检查下列元数据字段: “artist”, “album artist”, “composer”, “performer”。 | |
%album artist% | 专辑艺术家名。依次检查下列元数据字段: “album artist”, “artist”, “composer”, “performer”。与 %artist% 不同的是 %album artist% 用于在整张专辑有不同艺术家的情况。 | |
%track artist% | 音轨艺术家名。仅在 %album artist% 与 %artist% 不同的时候有效。用于与 %album artist% 共同使用以指定专辑中的不同艺术家,例如: ”%album artist% – %title%[ ‘//’ %track artist%]” ;在这种情况下,最后一部分内容仅会在有根据音轨指定的艺术家存在时才会显示。 | |
%album% | 专辑名。依次检查下列元数据字段: “album”, “venue”. | |
%date% | 年代。使用元数据 “date” 字段。 | |
%genre% | 流派,使用元数据 “genre” 字段。 | |
%tracknumber% | 音轨号。仅在存在元数据 “tracknumber” 字段时有效。 | |
%totaltracks% | 合计音轨。仅在存在元数据 “totaltracks” 字段时有效。 | |
%discnumber% | 光盘编号。仅在存在元数据 “discnumber” 或 “disc” 字段时有效。 | |
%totaldiscs% | 合计光盘。仅在存在元数据 “totaldiscs” 字段时有效。 | |
%codec% | 编码格式名。若无法有效取得准确的编码格式,使用文件后缀。 | |
%codec_profile% | 关于编码设置的附加信息,并不总是有效。 | |
%filename% | 文件名,不包括后缀名和目录 | |
%filename_ext% | 文件名,包括后缀名但不包括目录。 | |
%directoryname% | 文件所处目录名。 | |
%path% | 文件路径,注意排序时应使用 %path_sort% 而非 %path%。 | |
%subsong% | 文件内的音轨编号,用于单文件支持多音轨的文件格式(例如章节和CUE)。 | |
%path_sort% | 结合了音轨号的文件路径,用于排序;返回值不确定,因此不应依赖其返回值。 | |
%length% | 长度,格式为 [HH:]MM:SS。 | |
%length_seconds% | 长度,单位为秒,格式是整数。 | |
%bitrate% | 比特率,单位为千比特每秒(kbps);支持动态 VBR 比特率。 | |
%channels% | 声道数(mono/stereo/etc)。 | |
%samplerate% | 采样率,单位为 Hz。 | |
%replaygain_track_gain%, %replaygain_album_gain%, %replaygain_track_peak%, %replaygain_album_peak% | 播放增益相关信息。 | |
%filesize% | 文件大小,单位为字节。 | |
%filesize_natural% | 文件大小,将根据实际情况返回如MB或KB的形式。 | |
%last_modified% | 返回文件最后更改时间,格式为 YYYY-MM-DD HH:MM:SS。 |
以上列表内容没有完成,还有一些不太重要的字段如 %field%、元数据和 %__field%、技术信息映射,它们用于保持向后兼容性。
上下文字段
语法 | 解释 |
---|---|
%list_index% | 指定项目所在的列表编号。应用于:播放列表,由 masstagger/massrenamer 处理过的项目的列表,等等。在结果前补足0以适应列表中最大数的位数。 |
%list_total% | 指定项目所在列表的总项目数。应用于:播放列表,由 masstagger/massrenamer 处理过的列表,等等。 |
%isplaying% | 若当前项目正在播放则有效,例如: 一个播放列表项正在播放。用于 $if() 中的条件。 |
%ispaused% | 若当前项目正在播放并处于暂停状态则有效,例如: 一个播放列表项已暂停。用于 $if() 中的条件。 |
%playback_time% | 当前播放时间,格式为 [HH:]MM:SS。仅在某些使用播放上下文信息的地方有效,例如状态栏。 |
%playback_time_seconds% | 当前播放时间,单位为秒。格式为整数。仅在某些使用播放上下文信息的地方有效,例如状态栏。 |
%playback_time_remaining% | 剩余播放时间,格式为 [HH:]MM:SS。仅在某些会使用播放上下文信息的地方有效,例如状态栏。若当前播放音轨无持续时间信息则无效。 |
%playback_time_remaining_seconds% | 剩余播放时间,单位为秒。格式为整数。仅在某些使用播放上下文信息的地方有效,例如状态栏。若当前播放音轨无持续时间信息则无效。 |
%queue_index% | 指定项目所处队列的编号,仅对播放列表有效。 |
%queue_indexes% | 指定项目所处队列的编号列表,仅对播放列表有效。当指定项目仅在队列中出现一次则与 %queue_index% 等价。 |
%queue_total% | 队列的项目总数。由于技术上的原因该字段仅对属于队列中音轨有效。 |
函数
语法 | 解释 | 示例 |
---|---|---|
$abbr(X) | 返回 X 的缩写。 | $abbr(%album%) |
$abbr(X,Y) | 若 X 的长度不大于 Y,则返回 X 的缩写,否则返回 X。 | $abbr(%album%,5) |
$ansi(X) | 返回字符串 X 中属于当前代码页的部分,否则替换为相应最适合的字符。一般用于清理文件名与外部一些对Unicode支持不好的软件交互。 | $ansi(%title%), $ansi(%filename%) |
$ascii(X) | 返回字符串 X 中属于ASCII表部分,否则替换为相应最适合的字符。一般用于与外部一些对Unicode支持不好的软件交互。 | $ascii(%title%), $ascii(%filename%) |
$lower(X), $upper(X) | 将 X 转换到小写/大写。 | $upper(%title%) |
$num(X,Y) | 显示数字 X 并在前补足0使其长度不小于 Y (用于音轨号等)。 | $num(%tracknumber%,3) |
$caps(X) | 将所有单词的第一个字母转换为大写,所有其他字母转换为小写,例如: “blah BLAH” ? “Blah Blah”. | $caps(%title%) |
$caps2(X) | 类似于 $caps,但是不改变已为大写的字母,例如: “blah BLAH” ? “Blah BLAH”. | $caps2(%title%) |
$if(X,Y,Z) | 若 X 包含了至少一个有效字段,则执行/显示 Y, 否则执行/显示 Z。 | $if(%artist%,%artist%,unknown artist) |
$if2(X,Y) | 与 $if(X,X,Y) 相同。 | |
$if3(X,Y,Z,..) | 返回首先包含至少一个有效字段的参数。 | |
$ifgreater(A,B,C,D) | 若数字 A 大于 B, 则执行/返回 C,否则执行/返回 D。 | |
$iflonger(A,B,C,D) | 若字符串 A 长度大于 B,则执行/返回 C,否则执行/返回 D。 | |
$ifequal(A,B,C,D) | 若数字 A 等于 B,则执行/返回 C,否则执行/返回 D。 | |
$longest(A,B,C,….) | 比较字符串 A,B,C,…并返回最大长度的字符串。 | $longest(%title%,%filename%) |
$len(X) | 返回字符串 X 的长度。 | |
$pad(X,Y), $pad_right(X,Y) | 对字符串 X 前/后补足空格使其长度不小于 Y。 | |
$pad(X,Y,Z), $pad_right(X,Y,Z) | 对字符串 X 前/后补足字符 Z 使其长度不小于 Y。 | |
$cut(X,Y) | 截取 X 使其长度为 Y。 | |
$padcut(X,Y), $padcut_right(X,Y) | 对字符串 X 前/后补足空格,并截取结果使其长度不大于 Y。 | |
$insert(A,B,N) | 向字符串 A 中 N 个字符后插入字符串 B。 | |
$add(X,Y), $sub(X,Y), $mul(X,Y), $div(X,Y), $mod(X,Y), $min(X,Y), $max(X,Y) | 数学运算,依次为:加、减、乘、除、取模、最小值、最大值。 | |
$left(X,Y) | 返回字符串 X 的头 Y 个字符。 | |
$right(X,Y) | 返回字符串 X 的后 Y 个字符。 | |
$and(X,Y), $or(X,Y), $xor(X,Y), $not(X) | 逻辑运算符,依次为:与、或、异或、非。用于与 $if() 协作。 | |
$fix_eol(x), $fix_eol(x,y) | 截取多行字符串,在字符串尾添加 ” (…)” (第一个版本) 或 y (第二个版本)。 | |
$meta(X) | 返回元数据字段 X 的值。 | $meta(artist) |
$meta_sep(X,Y), $meta_sep(X,Y,Z) | 返回元数据字段 X 中的值,对于多值情况,加上自定义分隔符。 | $meta(artist,’, ‘,’ and ‘) ? “artist1, artist2 and artist3” |
$meta_num(X) | 返回元数据字段 X 中值的数目。 | |
$info(X) | 返回名为 X 的技术信息。 | $info(bitrate) |
$char(X) | 插入编号为 X 的 Unicode 字符。 | $char(9674) |
$strcmp(X,Y) | 当字符串 X 和 Y 相同时返回 “1”,否则返回空字符串,用于与 $if() 协同使用。 | |
$stricmp(X,Y) | $strcmp(X,Y) 的不区分大小写版本。 | |
$directory(X), $directory(X,N) | 从文件路径 X 中提取目录名,附加选项指定提取上 N 级目录名。 | $directory(%path%,2) |
$directory_path(X) | 从文件路径 X 中获取相应目录路径。 | $directory_path(%path%) |
$greater(X,Y) | 比较两个整数,检测是否 X > Y,用于与 $if() 和 逻辑运算符共同使用。 | |
$longer(X,Y) | 比较两个字符串,检测是否 X 长度大于 Y,用于与 $if() 和 逻辑运算符共同使用。 | |
$strchr(X,Y) | 查找字符串 X 中字符 Y 首先出现位置。 | |
$strrchr(X,Y) | 查找字符串 X 中字符 Y 最后出现位置。 | |
$strstr(X,Y) | 查找字符串 X 中字符串 Y 中首先出现位置。 | |
$progress(A,B,C,D,E) | 创建进度条。(版本1) | $progress(%playback_time_seconds%,%length_seconds%,20,’#’,’=’) ? ”====#===============” |
$progress2(A,B,C,D,E) | 创建进度条。(版本2) | $progress2(%playback_time_seconds%,%length%,20,’#’,’=’) ? ”#####===============” |
$select(N,A,B,C,….) | 返回从 A,B,C… 的第 N 个参数。 | |
$repeat(X,N) | 重复X N 次。 | |
$replace(A,B,C) | 将字符串 A 中所有出现的字符串 B 替换为字符串 C。 | |
$ext(X) | 从文件名/路径 X 中提取后缀名。 | $ext(%path%) |
$substr(A,B,C) | 返回 A 的子串,从第 B 个字符到 第C 个字符。 | $substr(blah,1,2) ? “bl” |
$rgb(), $rgb(R,G,B), $rgb(R,G,B,RS,GS,BS) | 生成颜色代码。参数为0到255间的整数,分别代表红、绿、蓝的成分。无参数的版本返回默认颜色。6个参数的版本允许定义文本被选中时的颜色(默认是反色)。警告: $rgb() 不能用于纯文本处理的函数,其结果不确定。 | $rgb(255,0,0)asdf$rgb() ? “asdf” |
$transition(A,B,C) | 在字符串 A 中插入渐变色。使文本的颜色从 B 渐变到 C。 | $transition(%title%,$rgb(255,255,255),$rgb(0,0,0)) |
$blend(A,B,C,D) | 生成A 和 B之间的混合色。以分数 C/D 作为混合条件。 | $blend($rgb(0,0,0),$rgb(255,255,255),50,100) |
$trim(A) | 移除字符串 A 中首/尾空白字符。 | $trim(%title%) |
$tab() | 生成一个制表符,等同于 $char(9)。参见下面 “Tab(制表符)” 以获取详尽信息。 | $tab() |
$stripprefix(X) | 将前缀 “A” 和 “The” 从X中移除。 | $strippefix(%artist%) ? “The Prodigy” 变为 “Prodigy” |
$stripprefix(X,prefix1,prefix2,…) | 将指定前缀从 X 中移除。 | $stripprefix(%artist%,a,the) ? “The Prodigy” 变为 “Prodigy” |
$swapprefix(X) | 将前缀 “A” 和 “The” 移动到 X 尾。 | $swapprefix(%artist%) ? “The Prodigy” 变为 “Prodigy, The” |
$swapprefix(X,prefix1,prefix2,…) | 将指定前缀移动到 X 尾。 | $swapprefix(%artist%,a,the) ? “The Prodigy” 变为 “Prodigy, The” |
$year(time) | 从时间/日期字符串中得到“年”(格式为4位数字)。 | $year(%last_modified%) |
$month(time) | 从时间/日期字符串中得到“月”(格式为2位数字)。 | $month(%last_modified%) |
$day_of_month(time) | 从时间/日期字符串中得到月中的第几天(格式为2位数字)。 | $day_of_month(%last_modified%) |
$date(time) | 从时间/日期字符串中得到日期信息(格式为 YYYY-MM-DD)。 | $date(%last_modified%) |
$time(time) | 从时间/日期字符串中得到时间信息(格式为 HH:MM:SS 或 HH:MM)。 | $time(%last_modified%) |
变量操作
- 变量允许你立即保存文本处理的结果减少冗余格式化文本。
- 变量不能在多个运行实例中进行交换,并且无法修改实际文件信息。
- 变量的作用仅仅是缩短过于复杂脚本的尺寸,而不是有其它作用。
语法 | 解释 | 示例 |
---|---|---|
$put(name,text) | 设置名为 name 的变量的值为 text 并且返回 text。 | “$put(x,blah)” 设置变量 x 为 “blah” 并且返回 “blah”. |
$puts(name,text) | $put() 的静默版本。与 $put(name,text) 作用相同,但返回空字符串。 | |
$get(name) | 返回名为 name 的值,若变量不存在,返回空字符串。 | “$puts(x,blah)$get(x)$get(x)” 返回 “blahblah” |
其它
语法 | 解释 | 示例 |
---|---|---|
[ …. ] | 若字段不存在引用则丢弃方括号中的所有内容。主要用于创建部分仅在相关字段有效时的格式化脚本。 | %artist% – [%album% / ]%title% |
‘ (单引号) | 插入指定文本忽略语法处理;允许有特殊字符比如”%”、”$”、”[“和”]”。若需要在文本中插入单引号,可以使用 ” (两个单引号)。 | |
// | 注释,仅能用于行首;注释后的文本从行首到行尾不会被解析。 | |
EOL字符 | 忽略; 你可以使你的脚本拆分为多行以增加可读性,而不会影响结果。 | |
Tab(制表符) | 用于对特定上下文文本进行对齐,例如状态栏。参见: $tab() | %title%$tab()%length% |
2 条评论
好好学习下
2022-07-08T15:33:34+08:00Way cool! Some very valid points! I appreciate you penning this
2022-06-24T17:42:27+08:00write-up plus the rest of the site is really good.