1. 下载视频
下载B站视频的方法很多,比如这个B站、哔哩哔哩视频解析下载在线工具,或者chrome插件bilibili哔哩哔哩下载助手都可以。Anyway,能下载就行。
2. 将视频转换为音频
这步是为了后面语音识别时比较省时。同样,转换软件或者在线 站有很多,这里就不介绍了。Anyway,能转换就行。
3. 语音识别
这里推荐一个很好用的在线平台 易见外工作台,不仅免费,而且可以将音频转换为带时间轴的文字,正好符合我们的需求。 易见外工作台支持的项目也很多:
可以看到,与 文参数不同的是,它的弹幕出现时间dm_time是一个浮点数,单位是秒。因此下面我们需要将弹幕内容和参数处理成接口要求的格式。
4.2. 处理srt文件的格式
打开下载的.srt文件,文件的格式如下:
0 // 序 00:00:06,420 –> 00:00:07,710 // 开始时间 –> 结束时间那些口口声声 // 内容// 空行1
00:00:09,480 –> 00:00:10,920
一代不如一代的人
2
00:00:12,870 –> 00:00:13,980
应该看着你们
……
发送弹幕我们其实只需要开始时间,那么我们把开始时间转换为秒为单位的float类型。处理完成后返回一个元素为(dm_time, dm_text)的list。
Ok,talk is cheap,直接show the code吧:
def process_srt_file():
srt_file_path = “path_to_your_srt_file”
danmaku_list = []
dm_time, dm_text = None, None
i = 0
for line in open(srt_file_path, “r”, encoding=”utf-8″):
line = line.strip()
if i % 4 == 1:
# 处理时间
start_time = line.split(“–>”)[0]
other_time, millisecond = start_time.split(“,”)
hour, minute, second = other_time.split(“:”)
dm_time = int(hour) * 3600 + int(minute) * 60 + int(second) + int(millisecond) / 1000
elif i % 4 == 2:
# 处理弹幕内容
dm_text = line
danmaku_list.append((dm_time, dm_text))
i += 1
return danmaku_list
4.3. 愉快的自动发送弹幕
先安装bilibili_api包:
pip install bilibili_api
然后也直接上代码吧:
from bilibili_api import video, Verify
from bilibili_api.video import Danmaku
import time
def auto_send_danmaku():
danmaku_list = process_srt_file()
sessdata = “your sessdata” # 用户的sessdata,获取方法见下文
csrf = “your csrf” # 用户的csrf,获取方法见下文
bvid = “BVxxxxxxxxxx” # 视频的bv
dm_color_pink = 16758465 # 弹幕的颜色,我用的骚粉色
dm_mode = 4 # 弹幕类型,字幕当然用底端弹幕
dm_font_size = 18 # 弹幕字 ,有节操的字幕菌还是用小字 吧
# 设置验证
verify = Verify(sessdata=sessdata, csrf=csrf)
# 初始化VideoOperator类
my_video_operator = video.VideoOperate(bvid=bvid, verify=verify)
for danmaku_content in danmaku_list:
dm_time, dm_text = danmaku_content
dm_text = “? ” + dm_text + ” ?” # 两边加个小花花(你也可以不加)
# 实例化一个弹幕类
danmaku = Danmaku(text=dm_text, dm_time=dm_time, color=dm_color_pink, mode=dm_mode, font_size=dm_font_size,
is_sub=False)
# 发送弹幕
result = my_video_operator.send_danmaku(0, danmaku)
print(result)
print(“发送成功:”, danmaku.dm_time, danmaku.text)
print(“休眠15s中……”)
time.sleep(15) # 发送弹幕频率过快会被服务器禁止发送弹幕
注意:B站现在设定的发送弹幕间隔时间至少为5s,但在实操中发现即使间隔10-15s,连续发弹幕仍有可能被暂停发送一段时间。因此大家可以根据程序执行情况删掉srt文件中已经发送成功的部分,等待一段时间重启程序即可。
5. 效果展示
下面是我用以上过程给视频“来到这个世界的第二十三年”-by猫夏小卡 加上野生字幕的效果展示(悄悄安利这个可爱的汉服小姐姐(????)~):

B站现在已经支持了投稿外挂字幕的功能,如果up主开放了此功能,直接投稿外挂字幕要比野生字幕的效果更好。另外,如果想给BGM加上野生字幕,可以对.lrc歌词文件做格式处理,然后自动发送即可,就交给感兴趣的读者自己撸码吧:)~
Reference:
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览209014 人正在系统学习中 相关资源:橘子快速启动软件(橘子启动器)v3.0绿色免费版-其它代码类资源…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!