我摊牌了!我用Python帮B站的小姐姐配好看的字幕!

公众号 “菜鸟学Python”

438篇原创,设为 “星标”,一起学Python!

对于很多B站的忠实小伙伴们来说,在B站上看各个Up主们为大家分享各种内容是一件非常幸福的事情,可是大家也会遇到视频中没有提供弹幕的尴尬局面,比如大家在B站看小姐姐的时候,经常会遇到没有字幕的情况,这种听不清小姐姐说什么,又没有弹幕加以解释的情况,会很别扭~~

因此,小编今天就带领大家来为B站的小姐姐们配上好看的字幕,让大家在欣赏小姐姐的同时也能有字幕的陪伴。

00.整体的思路如下:

01.视频下载及音频处理

首先,我们要选定我们想要添加字幕的视频,然后,将视频下载到本地,这里下载B站视频方式有很多,比如可以利用Chrome浏览器的插件《bilibili哔哩哔哩下载助手》来进行视频的下载。将视频下载完成后,我们就可以提取视频中的音频数据,这里可以利用moivepy这个库来进行处理,一行代码即可搞定。程序如下:

audio = AudioFileClip("video.flv").write_audiofile("audio.mp3")

上述的程序中,利用AudioFileClip来提取视频中的音频信息,然后保存到本地的音频文件中即可。以上我们便提取完成了音频。

02.音频转字幕文件

有的小伙伴可能会疑惑,为什么要提取音频数据呢,这是因为我们要利用技术来将我们听不清的音频转成文字,我们虽然听的不清楚,但是利用技术可以帮助我们很好的“听音识字”。对于处理好的音频,我们可以利用下面的网站,进行音频到字幕文件的转换

网址:https://aismartvip.com/

大家可以按照上述的操作,点击上传音频,然后按照自己的喜好设置任务的名称,最后点击开始上传,网页会自动进行语音的识别,并转换成字幕文件。这里为什么要转换为字幕文件呢,因为字幕文件中带有时间,我们可以根据时间信息,来设定弹幕的发送时间。

转换完成后,大家还可以进行字幕的完善,包括时间的调整,字幕文字的更改和时间段的增加或者删除。修改完成后,大家就可以直接下载字幕文件了,生成的字幕文件如下图所示。

生成的字幕文件中,分别包含了字幕的序号,还有每个字幕的时间段以及字幕的内容,接下来就是如何将字幕文件发送到B站视频上去了。


03.发送弹幕

对于弹幕的发送,这里我们利用的是bilibili_api库,注意,小编使用的是1.0.0版本的,由于bilibili_api库更新的非常快,而且不同版本之间兼容性不是特别好,所以要想运行下面的程序且不出错误的话,需要大家安装1.0.0版本的bilibili_api库。安装方式也很简单,只需要pip install bilibili-api==1.0.0即可完成安装。

01).首先,需要将弹幕文件处理为列表形式,而列表中的元素是“(时间,弹幕内容)”的元组形式。程序如下图所示:

上述的程序中,首先读入字幕文件,然后按照弹幕文件的行号,来进行处理,如果是时间,那么就处理成相应的时间格式,如果是弹幕内容,则直接放入到元组中。

02).处理好字幕文件后,接下来就可以发送弹幕了,对于弹幕,我们需要设置一个弹幕类对象,它的要求如下所示:

这里需要重点关注四个参数,分别是text,表示弹幕的内容,dm_time表示的是弹幕出现的时间,这两个内容我们已经在上面的弹幕文件处理中设置完成,然后是mode参数,指定的是弹幕在屏幕中的位置是哪里,而font_size指定的就是弹幕的大小。弹幕的发送程序如下所示:

上述程序中的sessdata和csrf是用来进行身份验证的信息,程序首先初始化一个VideoOperator类,用来向视频发送弹幕,而发送的弹幕信息则是通过构造Danmaku类来进行实现。需要注意的是,这里要间隔一定的时间才能进行弹幕的发送,否则会被检测为刷屏而不允许发弹幕。间隔时间的话,在20秒以上最为稳妥。

03).如何获取key,这里的sessdata和csrf该如何获取呢?

大家点击想要添加字幕的视频页面,点击左上方的小锁,然后点击Cookie后,找到右边的SESSDATA和bili_jct,这两个cookie下的“内容”就是我们需要的sessdata和csrf信息。

说了这么多,最后一起来看一下效果展示:

怎么样,学Python很有意思吧,还等啥赶紧操练起来给喜欢的小姐姐up主发送一波排山倒海的字幕吧。

如果您觉得本篇对你有用,可以收藏或者转发给有兴趣学Python的同学,原创不易记得来个三连哦!再次感谢!我们下篇见!

程序员GitHub,现已正式上线!

接下来我们将会在该公众号上,专注为大家分享GitHub上有趣的开源库包括Python,Java,Go,前端开发等优质的学习资源和技术,分享一些程序员圈的新鲜趣事。

年度爆款文案

点这里,获取新手福利
<think>我们正在为准备CCF系列比赛(如NOIP/NOI)的算法竞赛选手提供训练建议。根据引用[1],选手已经掌握至少一门程序设计语言,对算法设计有入门性认识,目标是达到NOIP一等奖以上水平。以下将系统性地分阶段给出训练方案:</think>### CCF系列算法竞赛系统训练指南 #### 一、核心知识体系构建(NOI大纲标准) 1. **基础数据结构** - 线性结构:数组/链表($O(1)$随机访问 vs $O(n)$插入删除) - 树形结构:二叉堆/线段树(区间查询$O(\log n)$)[^1] - 高级结构:并查集(路径压缩优化)/$Trie$树(字符串处理) 2. **经典算法模块** - 动态规划:背包问题(状态转移方程 $dp[i][j] = \max(dp[i-1][j], dp[i-1][j-w_i] + v_i)$) - 图论算法:Dijkstra($O((V+E)\log V)$)/ 网络流(Edmonds-Karp) - 数学基础:模运算/组合数学(卢卡斯定理 $C(n,m)\mod p$) #### 二、训练阶段规划(按竞赛级别) | 阶段 | 目标赛事 | 训练重点 | 每日题量 | |------------|------------|------------------------------|----------| | **入门** | CSP-J | 基础语法+暴力搜索 | 3-5题 | | **进阶** | CSP-S/NOIP | DP优化+数据结构应用 | 5-8题 | | **高阶** | NOI/省选 | 网络流/FFT/动态树 | 8-12题 | #### 三、实战能力提升策略 1. **代码模板化** ```cpp // 快速幂模板 (取模优化) ll qpow(ll a, ll b, ll mod) { ll res = 1; while (b) { if (b & 1) res = res * a % mod; a = a * a % mod; b >>= 1; } return res; } ``` 2. **调试技巧** - 对拍程序:随机数据生成 + 暴力程序验证 - 边界测试:$n=0,1,10^5$ 等临界值验证 3. **竞赛策略** - 时间分:简单题(40min) + 中等题(60min) + 难题(80min) - 骗分技巧:特殊数据点特判(如$n≤10$直接枚举) #### 四、权威学习资源 1. **教材体系** - 《算法竞赛进阶指南》(李煜东):NOI金牌选手编写,覆盖省选知识点 - 《挑战程序设计竞赛》(秋叶拓哉):经典红书,含300+真题 2. **在线平台** - **洛谷**:国内最大OJ,按赛事分类题库([NOI官方合作](https://www.luogu.com.cn)) - **Codeforces**:每周赛事(Div2适合NOIP级选手) 3. **模拟训练** ```mermaid timeline title 备赛周期规划 2024-09 : CSP-J/S初赛模拟 2024-10 : NOIP历年真题轮训 2025-03 : 省选专题突破(网络流/平衡树) ``` #### 五、常见失误规避 1. **复杂度误判**:$O(n^2)$算法在$n=10^5$时必然超时 2. **溢出问题**:int类型上限$2^{31}-1≈2×10^9$,long long更安全 3. **STL陷阱**:`vector`的$O(n)$插入可能成为性能瓶颈 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值