:点击上方[Python爬虫数据分析挖掘]→右上角[...]→[设为星标⭐]python
震惊!小伙居然用python找出了马大师视频中的名场面
前言sql
1、爬取视频弹幕bash
2、弹幕分析微信
1. 弹幕频数统计app
2. 绘制频数分布图ide
3. 标红高潮部分函数
3、大师的名场面学习
写在最后测试
前言
最近江湖中涌现出了一位风云人物,他的语录成为了避免少小伙的“精神食粮”,而其名场面也是数不胜数,他即是——混元形意太极门掌门马大师!ui
今天,kimol君将经过B站上马大师视频的弹幕分析出其中的高潮部分(即名场面),选取其中播放量靠前的视频(视频地址:https://www.bilibili.com/video/BV1HJ411L7DP)进行分析,效果以下:
红色部分表明视频中弹幕数较多的位置,而这一般出如今视频的高潮部分,图中时间点表示高潮部分出如今视频中的位置。对照着原视频:(https://www.bilibili.com/video/BV1HJ411L7DP)进行比较,结果定会让你大吃一惊!
详细分析过程,客官您往下看~理论来讲,该方法是通用的,彻底能够用来分析不一样的视频,发现其中高潮的部分(一般是戏剧冲突、高潮桥段、爆点等部分)。所以,具备较高的实用性!
1、爬取视频弹幕
爬取马大师视频(bvid为BV1HJ411L7DP)的弹幕,并将结果存于本地csv中:
一共有3W+条弹幕。至于弹幕的具体爬取过程,因为篇幅缘由这里不在赘述,你们能够参考个人另外一篇博文。
2、弹幕分析
弹幕分析的思路也比较简单,经过统计弹幕在视频中不一样时间出现的频数来表示出当时观众的反映:一般来说,当视频出现高潮时,弹幕数量也会相应增长。那么,整个分析过程能够分为三步:
1. 弹幕频数统计
按照指定的视频播放时间间隔来统计弹幕的数量,定义一个函数:
def count_fre(time_list,second=1): ''' 统计弹幕出现时间的频数(按指定second划分) 输入:出现时间的列表,划分的秒数 输出:频数分布 ''' f = lambda x:(x//second)*second time_list = time_list.apply(f) # 按照second将时间进行划分 counter = dict(Counter(time_list)) # 统计各时间段出现的频数 counter = sorted(counter.items(),key=lambda d:d[0]) # 按照字典的key排序 return dict(counter)
统计后的输出为一个字典,key为时间段,value为对应的弹幕数:
2. 绘制频数分布图
利用python中的matplotlib库将统计好的频数分布绘制出来:
# 绘制分布图plt.title('弹幕频数分布') plt.xlabel('播放时间(秒)')plt.ylabel('弹幕评论频数(个)')plt.grid()plt.plot(x,y)
结果以下:
3. 标红高潮部分
为了更直观地反映出高潮部分,用红色将其标出,并加上对应的时间点:
# 标红高潮部分flag = Falsestart = 0 # 开始位置end = 0 # 结束位置level = np.percentile(y,90)for i in range(len(y)): if flag == False and y[i] >= level: flag = True start = i-1 if i-1 >= 0 else 0 # 避免低于0 if flag == True and y[i] < level: flag = False end = i+1 end = i+1 if i+1 <= len(x) else len(x) # 避免超过最大值 plt.plot(x[start:end],y[start:end],color='red') # 标红 pos_y = max(y[start:end]) # 高潮 pos_x = y[start:end].index(pos_y)+start # 找到高潮对应的点 pos_x = x[pos_x] # 找到高潮对应的时间(秒) m,s = divmod(pos_x,60) text = '%02d:%02d'%(m,s) # 转为mm:ss的格式 plt.text(pos_x+1,pos_y,text)
其中level变量取弹幕数的X分位数,是高潮的阈值,即认为当弹幕数大于level才认为是高潮部分。经过对它的设定,便可控制高潮标红的部分。
3、大师的名场面
经过对高潮部分进行标红后,能够获得下图:
能够看出,短短2分多钟的视频可谓是高潮迭起。(小声嘀咕:“不要想歪了…”)
其中02:27的位置弹幕数量最高,打开视频一看,妹有错,名场面来了,年轻人耗子尾汁呀:
其中01:39的位置一样是名场面,我大E了啊,没有闪:
其他的部分也是相似的,因为时间缘由这里就不全都展现了,感兴趣的小伙伴能够本身一一对应看看。
写在最后
经过简单的测试,该代码除了能够发掘马大师的名场面外,在诸如其余电影、电视剧上的分析效果也都不错。理论上来讲,只要有比较充足的弹幕数据,就能找到视频的高潮所在,您还不心动吗?😉
- END -
【b站弹幕分析源码获取方式】
【各类爬虫源码获取方式】
欢迎关注公众号:Python爬虫数据分析挖掘,方便及时阅读最新文章
记录学习python的点点滴滴;
回复【开源源码】免费获取更多开源项目源码;
本文分享自微信公众号 - Python爬虫数据分析挖掘(zyzx3344)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。