Skip to content

如何在后分P时代进行投稿——sswa使用详解

Published: at 04:44

大家好,好久不见,我是某昨。

众所周知,叔叔在今年的某个时间点悄悄地关闭了分P投稿的入口,目前唯一的分P投稿入口就只有投稿工具和旧版的手机客户端了。由于叔叔在去年某个时候增加的1000粉限制,普通用户本就不能投稿分P;但这次的全量化则是针对所有用户的一击重锤。

西西一哥也没有幸免
西西一哥也没有幸免

由此,sswa 诞生了。sswa 是在 biliup-rs 的基础上进行开发的,为的是符合我个人以及身边一些其他用户的投稿需求。sswa 支持的首要分区为官延区,一切与该分区投稿相关的功能均以最高优先级开发。

ToC

协议相关

biliup-rsMIT 协议开源。与之相对,sswaApache-2.0 协议开源,但其中任意涉及到与 biliup-rs 相关的部分遵循 MIT 协议。为不违反原协议,这个涉及的范围非常广泛。

后续 sswa 可能会将协议修改为 Rust 社区中更常用的 Apache-MIT 双协议。

下载

sswa 仍然处于开发阶段,因此暂时不提供 Release 包下载,但用户可以通过下载 GitHub Action 构建的 nightly 版本体验该工具的功能。

需要注意的是,下载 nightly 构建需要用户在 GitHub 已登录状态下进行。

首先,进入项目的 Actions。项目的 Actions 页为 [https://github.com/Yesterday17/sswa/actions](https://github.com/Yesterday17/sswa/actions),点击进入即可。如下图所示:

然后,点击最上方的 Workflow。例如上图就是点击 skip levels。最后将滚动条拉到页面底部,就可以看到不同平台的构建了。

所有构建均只支持 64 位操作系统,需要 32 位版本的可以手动构建。Linux 构建提供了 GLIBCMUSL 两个版本,可以按需选择。

登录

此处以 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](https://github.com/bheisler/TinyTemplate) 修改而来,支持变量、条件语句等。目前除 default-user 之外的所有字段均已支持模板字符串。

变量

嵌入变量的格式为 {{变量名}}。如上文中的 {{ s7i }}sswa 自带了部分系统变量,以 $ 字符开头,如下表所示:

变量名说明
$config_rootsswa 配置文件的根目录
$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 号均可。


Previous Post
JSON RPC 与 LSP 协议基础
Next Post
AsobiStage 直接播放链接