大家好,好久不见,我是某昨。
众所周知,叔叔在今年的某个时间点悄悄地关闭了分P投稿的入口,目前唯一的分P投稿入口就只有投稿工具和旧版的手机客户端了。由于叔叔在去年某个时候增加的1000粉限制,普通用户本就不能投稿分P;但这次的全量化则是针对所有用户的一击重锤。
由此,sswa 诞生了。sswa 是在 biliup-rs 的基础上进行开发的,为的是符合我个人以及身边一些其他用户的投稿需求。sswa 支持的首要分区为官延区,一切与该分区投稿相关的功能均以最高优先级开发。
协议相关
biliup-rs
以 MIT
协议开源。与之相对,sswa
以 Apache-2.0
协议开源,但其中任意涉及到与 biliup-rs
相关的部分遵循 MIT
协议。为不违反原协议,这个涉及的范围非常广泛。
后续 sswa
可能会将协议修改为 Rust
社区中更常用的 Apache-MIT
双协议。
下载
sswa
仍然处于开发阶段,因此暂时不提供 Release
包下载,但用户可以通过下载 GitHub Action
构建的 nightly
版本体验该工具的功能。
需要注意的是,下载 nightly
构建需要用户在 GitHub
已登录状态下进行。
首先,进入项目的 Actions。项目的 Actions
页为 https://github.com/Yesterday17/sswa/actions
,点击进入即可。如下图所示:
然后,点击最上方的 Workflow
。例如上图就是点击 skip levels
。最后将滚动条拉到页面底部,就可以看到不同平台的构建了。
所有构建均只支持 64 位操作系统,需要 32 位版本的可以手动构建。Linux
构建提供了 GLIBC
和 MUSL
两个版本,可以按需选择。
登录
此处以 Windows
为例,以 me
的身份登录。
./sswa.exe login me
会提示需要打开链接登录,在对应的链接中完成登录就可以了。
配置文件
sswa
是为重复投稿设计的,因此存在配置和模板的概念。配置所处的目录可以通过以下命令获得:
./sswa.exe config
这条命令会输出 sswa 使用的配置文件目录,此后对配置文件的修改都需要在该目录中进行,简称为 $HOME
。
全局配置
全局配置文件存储在 $HOME/config.toml
,内容如下:
# 投稿线路
line = "kodo"
# 默认使用的投稿帐号
default-user = "me"
# 是否自动缩放封面(依赖 ffmpeg)
scale-cover = false
通过指定 line
参数,可以手动选择一条投稿线路,供后续使用。建议不使用该项,这样每次投稿前都会对可用的线路进行测速,并选择最优线路投稿。
通过指定 default-user
,我们可以省略后续的一些参数。由于上文中登录使用的是 me
,因此这里也填写 me
。
scale-cover
则是自动生成合适大小封面的一个参数。当设置为 true
时,sswa
会针对原图生成适合作为 bilibili
封面的图片。我个人投稿一般会打开这个选项,但它毕竟会对封面图片作一定修改,所以默认值为 false
。
模板配置
模板配置存储在 $HOME/templates
目录下,须命名为 模板名.toml
。一个样例模板内容如下:
# 模板的默认投稿帐号
default-user = "me"
# 标题
title = "【字幕】【偶像大师百万广播{{num}}回】{{title}}【MillionRADIO】"
# 描述
description = '''片源:RabbitC
翻译:{{translators}}
校对:{{jiaodui}}
时间轴:{{subtitle}}'''
# 转载来源,该字段存在且不为空时以转载形式投稿,否则投成自制
forward-source = "765.million"
# 投稿分区
tid = 152
# 封面图片路径
# 当留空或值为 auto 时,自动从第一个视频(不包含前缀视频)中随机提取
cover = '''./
{%-if cover -%}
{{cover}}
{%- else -%}
folder
{%- endif %}/cover.png'''
# 动态文本
dynamic-text = ""
# 标签
tags = ["田所梓", "山崎遥", "麻仓桃", "偶像大师百万广播", "{{guests}}"]
# 定时投稿
display-time = "tomorrow 10:00"
# 前缀视频,在投稿时自动添加在选中视频**前面**
video-prefix = [
# 建议写绝对路径,相对路径是相对命令执行时候的 CWD
"D:\\prefix.mp4",
]
# 后缀视频,在投稿时自动添加在选中视频**后面**
video-suffix = []
# 变量对应的解释文本,在需要用户手动输入时作为提示文本展示
[variables]
translators = "翻译"
jiaodui = "校对"
subtitle = "时间轴"
guests = "嘉宾 Tag"
[variables.num]
description = "广播回数"
# 变量的默认值
default = "123"
[variables.title]
description = "标题"
default = "默认标题"
[variables.cover]
description = "封面图片目录"
# 当未提供时 变量是否必须填写
can-skip = true
模板解析
sswa
的模板功能基于 TinyTemplate
修改而来,支持变量、条件语句等。目前除 default-user
之外的所有字段均已支持模板字符串。
变量
嵌入变量的格式为 {{变量名}}
。如上文中的 {{ s7i }}
。sswa
自带了部分系统变量,以 $
字符开头,如下表所示:
变量名 | 说明 |
$config_root | sswa 配置文件的根目录 |
$file_name | 第一个投稿视频的文件名(包含后缀名) |
$file_stem | 第一个投稿视频的文件名(不包含后缀名) |
$file_pwd | 第一个投稿视频所在的目录 |
一个使用了较多变量的例子如下:
# 以去除扩展名的第一个文件的文件名为标题
title = "{{$file_stem}}"
description = "上传文件名:{{ss_file_name}},包含扩展名"
tid = 152
# 封面为 config 目录下的 cover.jpg
cover = "{{$config_path}}/cover.jpg"
dynamic-text = ""
video-prefix = [
# 第一个视频同目录下的 prefix.mkv
"{{$file_pwd}}/prefix.mkv",
# 重复上传一遍第一个视频(很神秘)
"{{$file_pwd}}/{{$file_name}}",
]
去除空字符(Trim)
上文中的 {{
、}}
、{%
和 %}
旁边有一个字符 -
,这个字符就是用来去除空字符的。空字符包括空格、换行、制表符等,-
字符在哪一侧,就去除哪一侧的空字符。
以下面的模板为例,假设 s7i
的内容为 s7i
,则输出的内容为 s7i123
。如果没有 -
,输出的内容则是 s7i 123
。-
去除了 <空格>123
字符串中靠近 {{ s7i }}
部分的空字符。
{{ s7i -}} 123
语句
语句以 {%
开始,%}
结束。条件语句包括 {% if <condition> %}
,{% else %}
和 {% endif %}
。
如下文中的 dynamic-text
就使用了 s7i
变量。当该变量存在时,动态的文本为 私は妻の(s7i的内容)を愛しています。
title = "Title"
description = '''Description'''
tid = 152
cover = "./cover.jpg"
dynamic-text = "{% if s7i -%} 私は妻の {{- s7i -}} を愛しています。{%- endif %}"
简单投稿
对于基本的投稿,可以通过以下命令完成。
./sswa.exe upload -t 模板名 视频1.mkv 视频2.mp4
当模板中存在变量时,sswa
会提示用户输入变量。所有变量均输入完成后,会向用户展示投稿内容,并要求用户复核。
复核通过后,sswa
会对视频和封面进行上传,之后要做的就只有等待了。
变量文件
通过命令行的提示输入变量内容固然可取,但一旦出现问题,所有的内容就需要重新输入一遍,有点麻烦。所以 sswa
支持通过变量文件的方式指定变量的内容,并通过 -f
指定变量文件的路径。
简单格式
变量文件的简单格式是以行为单位的 key=value
格式。如下例:
# 注释
num=459
title=炸红薯条与mocho认证食品
translators=名羊茨尔戈 千和铭 Yuki MochizukiShigure 悠风
jiaodui=てい
subtitle=某昨P
date=2022-04-14
cover=nagian-2.jpeg
以 #
开头的行是注释,不会被解析;普通的变量行则是 key=value
的形式进行解析,value
部分的 \n
会被替换成换行。
参数 --quote
用于控制 value
部分单双引号的处理行为。当未指定时,value
部分的成堆引号将会被移除,以保持和旧版 env
行为的一致。
JSON 格式
当变量文件的第一个字符为 {
时,会以 JSON
格式进行解析。JSON
格式下的变量不会被作任何特殊处理。
增加分P
对使用了 sswa
投稿的视频,如果投稿用户的粉丝数量在 1000
以上,即可通过网页端添加分P。但其他情况下,分P是无法增加的。因此 sswa
提供了添加分P 的功能。命令如下:
./sswa.exe append -v <视频ID> test.mp4
其中的 <视频ID>
使用 av
号或 BV
号均可。