Skip to content
This repository has been archived by the owner on Aug 2, 2021. It is now read-only.

Latest commit

 

History

History
212 lines (170 loc) · 8.04 KB

README.md

File metadata and controls

212 lines (170 loc) · 8.04 KB

本项目不再维护。请使用 CytoidCommunity/conflict 以获得更好的使用体验。

hikaru

此时此刻,你也一定,光辉耀目
/ 君は私の光〜


Docker 用法

提供两个版本的镜像tag,请按照需求选择:

wacky6/hikaru:lite 仅提供基础录屏功能(仅daemon和dmk),镜像大小 ~120MB
wacky6/hikaru:full 提供完整功能(包括自动提取),镜像大小 ~400MB

docker pull wacky6/hikaru:<tag>
docker run -v <local_dir>:/root/hikaru/ wacky6/hikaru <command> [args...]

在指令后追加 --help 选项查看帮助,参见Docker示例

直播监听 - daemon

hikaru daemon <room_id>   # 房间号(短号、长号均可)

捕捉直播视频,默认保存到 ~/hikaru/ ,文件名:<up昵称>__<日期>_<捕捉开始时间>.flv
时区为 中国标准时间 (CST / UTC+8)。

  • -C / --no-capture:配合 Telegram 通知使用。只发通知,不录制。 (那个 up 不够重要)
  • -f / --format:指定录播文件格式,支持: mp4 / mkv
  • -i / --interval:开播状态查询间隔,单位为秒。默认60s。过快可能导致被封禁

直播结束后自动上传录像

实现原理:直播结束后自动调用 uplink 指令将录播文件上传

向 daemon 指令后追加参数:

-U <minio_endpoint>   # minio_endpoint 与 uplink 指令下同名参数相同,将会被直接传递过去

Telegram 开播通知

Notification Screenshot

开播时投递 Telegram 消息。向 daemon 指令后追加以下两个参数:

-T https://api.telegram.org/    # 可选,Telegram API地址,绕墙
-t <tg_token>:<chat_id>    # Telegram Bot Token 和 聊天 ID,消息投送到目标聊天

个人使用示例:

  1. @BotFather 创建 Bot, 记下 token (例如 123456:abcdef-xyz)
  2. 搜索刚创建到 Bot, 和它聊天,并发送 /start 指令激活它
  3. @userinfobot 获取自己的 telegram_id,用来创建和 Bot 的私人聊天
  4. -t 选项和上面记下的信息开启通知: hikaru daemon <room_id> -t <token>:<telegram_id>

QQ 开播通知

用 Mirai 以及 Mirai HTTP API 插件作为 QQ 机器人后端。

开播时向 QQ 群内投递消息。向 daemon 指令后追加以下两个参数:

-M <qq>:<authkey>@<host>:<port> # 机器人的QQ号、Mirai-HTTP-API认证秘钥、后端地址和端口
-m [groups]       # 要投递的群,可以填多个,请用空格隔开

弹幕监听 / 超级弹幕姬 - dmk

hikaru dmk [-R] <room_id...>   # 房间号(短号、长号均可)

捕捉房间内弹幕,需配合 --dump--publish--log-path 选项指定记录方式。

  • -R / --raffle-filter:开启刷屏弹幕过滤(例如,节奏风暴、小电视),推荐使用。
  • -r / --redundancy <n>:设置冗余度(多连接 <n> 个弹幕服务器),范围0-3,默认1。
    可减少因小破站服务器繁忙而丢失弹幕的可能性 (未严格验证,依然有可能有丢弹幕)
  • -b / --publish-broadcast:推送广播弹幕(如,广播抽奖,小时榜),与 --publish 选项使用
  • -p / --publish:推送到 AMQP / RabbitMQ,用于构建复杂的实时应用 (比如抽奖、排行榜)
    使用 --publish-url--publish-name 指定 AMQP 服务器节点 和 Topic。
    默认 amqp://localhost/hikaru.danmaku
  • -l / --log-path <path>:输出日志,用于离线分析 (数据收集怪)
    启用日志输出,设置日志路径。使用 @roomid 表示 房间号(长号)。
    例如: --log-path /root/hikaru/[email protected]

身体姿势分析 - pose

hikaru pose <input>

分析身体姿势(Pose)并输出结果。输出可用于自动截取视频热点片段(白瞟姬)。

  • <input>- 表示 stdin;或者是文件路径
  • -o / --output <out>:输出文件,- 表示 stdout;或者是文件路径
    对stdin输入,默认stdout
    对文件输入,默认文件所在目录下 .pose/ 文件夹的同名文件,扩展名取决于 --format 选项
  • -f / --format <csv|ndjson>:输出格式;
    csv 只输出最显著身体姿态的可信度和位置
    ndjson 输出所有检测到的身体姿态
  • -c / --center-crop:只分析影像的中心部分(正方形中心区域),如果主体位于视频中心位置能加快处理速度
  • -m / --multiplier <0.5|0.75|1.0|1.01>:PoseNet 卷基层倍数;小 -> 快速,大 -> 精确
  • -r / --resolution <193|257|353|449|513>:PoseNet 输入分辨率;小 -> 快速,大 -> 精确
  • -s / --stride <8|16|32>:PoseNet 条带;小 -> 精确,大 -> 快速

热点片段截取 - extract

hikaru extract <media> -t <type>

分析视频内容,截取热点片段(白瞟姬)。

  • <media>:已保存的直播视频
  • -t / --type <T>:指定热点类型,目前支持:
    • dance:舞区(视频聊天 - 舞见),截取跳舞的片段,基于 Pose 分析
  • -X:指定提取过程的参数
  • -A:指定分析过程的参数

更多选项用 hikaru extract --help 查看。

自动上传 Minio - uplink

hikaru uplink -f [mtime_within] -e [extensions] -O <outdir> <minio_endpoint>

实现自动上传/自助获取录播,详见 uplink/README.md

现已支持阿里云OSS,对应<minio_endpoint>格式为:https://endpoint/bucket 示例:https://oss-cn-hangzhou.aliyuncs.com/hikaru

示例 (Docker环境)

### 基础录屏
# 录制 922045 房间
# 保存录像到 `/storage/hikaru/焦小玲珑`
# 绕墙发送开播通知,有弹出框
docker run \
  --restart=always -itd \
  --name hikaru-922045 \
  -v /storage/hikaru/焦小玲珑:/root/hikaru \
  wacky6/hikaru:lite daemon 922045 \
  -t 03108991:ABCDEFGHIJKLMN:19950418 \
  -T https://tg-api.example.com/
### 基础弹幕捕获
# 监听 922045、697773 房间的弹幕
# 每房间一个冗余的弹幕姬
# 推送弹幕到 AMQP,推送广播弹幕,开启刷屏弹幕过滤
# 保留原始弹幕日志到 `/storage/hikaru/dmk`
docker run \
  --restart=always -itd \
  --name hikaru-dmk-r1 \
  -v /storage/hikaru/dmk:/data \
  wacky6/hikaru:lite dmk \
  -r 1 \
  -pbR \
  -l '/data/[email protected]' \
  922045 697773
### 录屏并自动提取
# 录制并自动提取 424902 房间的跳舞片段
# 保存录像到 `/storage/hikaru/424902`
# 提取mp4片段到 `/cache/extracted`,保留分析结果和分段详情
# 用 -r 选项打开实时分析,在下播后数分钟内即可全部提取
docker run \
  --restart=always -itd \
  --name hikaru-dance-424902 \
  -v /storage/hikaru/424902:/root/hikaru \
  -v /cache/extracted:/root/hikaru/extracted \
  wacky6/hikaru:full daemon 424902 \
  -r \
  -x dance -X '-p -d -f mp4'
### 从已有录屏提取
# 提取 /storage/焦小玲珑/2018-09-04_180519.flv 录屏
# 提取跳舞片段为 mp4 到 /cache/extracted-922045
# 保留姿态分析结果,给出分段详情 PNG
# 使用本机优化编译的 /root/libtensorflow.native
docker run \
  --rm \
  -v /storage:/storage \
  -v /cache:/cache \
  -v /root/libtensorflow.native:/lib/libtensorflow.so
  wacky6/hikaru:full extract \
  -f mp4 \
  -pd \
  -O '/cache/extracted-922045' \
  '/storage/焦小玲珑/2018-09-04_180519.flv'

LICENSE

GPL-3.0