TL;DR,使用脚本请看:https://github.com/valkjsaaa/auto-bilibili-recorder/
最近 B 站的直播很火。为了愉快而高效的关注 up 主的最新动向(磕 CP )又不用费劲的看每一场录播,我搞了本账号 以及 @460录播bot ,用来自动录制,上传录播,并且提取录播中的高能点。既然已经写了相关的代码(https://github.com/valkjsaaa/auto-bilibili-recorder/),就来这里分享一下。
使用脚本的步骤去 GitHub 看就好了,这里介绍一下大概是怎么实现的。
录播用的 B 站录播姬(https://github.com/Bililive/BililiveRecorder),他们写的特别好,虽然 GUI 只能在 Windows 下跑,不过核心部分因为只依赖 dotnet core,所以是跨平台的。然后 录播姬有一个 webhook,可以让本脚本知道什么时候录播完毕了。
录播完成后,本脚本会调用 DanmakuFactory (https://github.com/hihkm/DanmakuFactory)来制作 ASS 格式的弹幕。原 repo 好像用了一些微软编译器独有的头文件,所以我有一个魔改版本(https://github.com/valkjsaaa/DanmakuFactory)可以在 Linux 下运行。
另外,本脚本会调用我自己写的一个小程序(https://github.com/valkjsaaa/bilibili-danmaku-energy-map)来提取高能点。大概的思路是因为每次直播出现高能的时候大家都会发弹幕,而发弹幕有一个 45s(经验值)左右的延迟,所以就用了一个有 45s 前移的弹幕密度做高能曲线,然后搞了一些经验公式来判断高能区域,并且输出了高能区域最密集的地方输出为高能点。

比如 BV11b4y1Q7x5 的高能曲线,橙色是高能区域,黄色是其他区域
最后脚本里有一些奇妙的 FFMPEG 命令用于根据最高能的地方获取一个封面,并且生成弹幕高能版的录播。以下是一些脚本自动生成的标题党封面:
其中生成弹幕高能版的命令尤其魔性,想锻炼下自己 FFMPEG 水平的同学可以试着理解一下 🤪。
FILE="https://tsxk.jya.ng/128308-碳酸熊卡/录制-128308-20210328-023103-又是阴间直播人" && TIME=`ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "${FILE}.flv"`&& ffmpeg -loop 1 -t ${TIME} -i "${FILE}.he.png" -i "${FILE}.flv" -filter_complex "
[0:v][1:v]scale2ref=iw:iw*(main_h/main_w)[color][ref];
[color]split[color1][color2];
[color1]hue=s=0[gray];
[color2]negate=negate_alpha=1[color_neg];
[gray]negate=negate_alpha=1[gray_neg];
color=black:d=${TIME}[black];
[black][ref]scale2ref[blackref][ref2];
[blackref]split[blackref1][blackref2];
[color_neg][blackref1]overlay=x=t/${TIME}*W-W[color_crop_neg];
[gray_neg][blackref2]overlay=x=t/${TIME}*W[gray_crop_neg];
[color_crop_neg]negate=negate_alpha=1[color_crop];
[gray_crop_neg]negate=negate_alpha=1[gray_crop];
[ref2][color_crop]overlay=y=main_h-overlay_h[out_color];
[out_color][gray_crop]overlay=y=main_h-overlay_h[out];
[out]ass='${FILE}.ass'[out_sub]" -map "[out_sub]" -map 1:a -c:v h264_nvenc -preset slow -b:v 4500K -b:a 320K -ar 44100 "${FILE}.bar.mp4" 最后还用了 Passkou 的 Python bilibili API (https://github.com/Passkou/bilibili-api) 来进行录播上传和换源。原版大文件几乎永远会 timeout,不支持换源,而且没法使用我当地的 b 站上传 cdn,所以我也有魔改版本:https://github.com/valkjsaaa/bilibili_api。
最后欢迎大家用这个脚本传各种主播的录播,注意征得相关主播的同意哦。另外,用本脚本上传录播请著名脚本来自本账号。有问题可以 GitHub 留 issue 、回复本帖子或者私信我。
最后的最后想说一句,我本人非常非常喜欢我自己的高能进度条,希望以后 B 站的所有录播都能有高能进度条,实在是太节省看录播的时间了。