震惊!小伙竟然用python找出了马大师视频中的名场面

  • 前言
  • 一、爬取视频弹幕
  • 二、弹幕分析
    • 1. 弹幕频数统计
    • 2. 绘制频数分布图
    • 3. 标红高潮部分
  • 三、大师的名场面
  • 写在最后

前言

最近江湖中涌现出了一位风云人物,他的语录成为了不少小伙的“精神食粮”,而其名场面也是数不胜数,他便是——混元形意太极门掌门马大师

今天,kimol君将通过B站上马大师视频的弹幕分析出其中的高潮部分(即名场面),选取其中播放量靠前的视频(视频地址)进行分析,效果如下:

红色部分代表视频中弹幕数较多的位置,而这通常出现在视频的高潮部分,图中时间点表示高潮部分出现在视频中的位置。对照着原视频进行比较,结果定会让你大吃一惊

详细分析过程,客官您往下看~
理论来说,该方法是通用的,完全可以用来分析不同的视频,发现其中高潮的部分(通常是戏剧冲突、高潮桥段、爆点等部分)。因此,具有较高的实用性!

一、爬取视频弹幕

爬取马大师视频(bvid为BV1HJ411L7DP)的弹幕,并将结果存于本地csv中:

一共有3W+条弹幕。至于弹幕的具体爬取过程,由于篇幅原因这里不在赘述,大家可以参考我的另一篇博文。

二、弹幕分析

弹幕分析的思路也比较简单,通过统计弹幕在视频中不同时间出现的频数来表示出当时观众的反映:通常来讲,当视频出现高潮时,弹幕数量也会相应增加。那么,整个分析过程可以分为三步:

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 = False
start = 0 # 开始位置
end = 0   # 结束位置
level = np.percentile(y,90)
for i in range(len(y)):if flag == False and y[i] >= level:flag = Truestart = i-1 if i-1 >= 0 else 0 # 避免低于0if flag == True and y[i] < level:flag = Falseend = i+1end = 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才认为是高潮部分。通过对它的设定,即可控制高潮标红的部分。

三、大师的名场面

通过对高潮部分进行标红后,可以得到下图:

可以看出,短短2分多钟的视频可谓是高潮迭起。(小声嘀咕:“不要想歪了…”)

其中02:27的位置弹幕数量最高,打开视频一看,妹有错,名场面来了,年轻人耗子尾汁呀:

其中01:39的位置同样是名场面,我大E了啊,没有闪

其余的部分也是类似的,由于时间原因这里就不全都展示了,感兴趣的小伙伴可以自己一一对应看看。

写在最后

通过简单的测试,该代码除了可以发掘马大师的名场面外,在诸如其他电影、电视剧上的分析效果也都不错。理论上来说,只要有比较充足的弹幕数据,就能找到视频的高潮所在,您还不心动吗?

震惊!小伙竟然用python找出了马大师视频中的名场面相关推荐

  1. 在哪里能收到python实例代码-Python找出最小的K个数实例代码

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复 ...

  2. Python找出列表中出现次数最多的元素三种方式

    通过三种方式给大家介绍,具体详情如下所示: 方式一: 原理:创建一个新的空字典,用循环的方式来获取列表中的每一个元素,判断获取的元素是否存在字典中的key,如果不存在的话,将元素作为key,值为列表中 ...

  3. linux 端口tnpl,利用Python找出9个连续的空闲端口

    这篇文章主要介绍了Python找出9个连续的空闲端口的方法,感兴趣的小伙伴们可以参考一下 一.项目需求 安装某软件,配置时候需要填写空闲的端口.查看5个平台的某个端口是否被占用 5个平台为window ...

  4. python找出某个文件夹下某个后缀的文件

    python找出某个文件夹下某个后缀的文件 import osdef find_files_with_suffix(folder_path, suffix):# 使用os模块获取文件夹中所有文件的路径 ...

  5. python找最长的单词,Python 找出英文单词列表(list)中最长单词链

    这篇文章主要介绍了Python 找出英文单词列表(list)中最长单词链,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 本文主要 ...

  6. Python -- 找出100以内的所有质数

    Python – 找出100以内的所有质数 质数:除了1和本身没有其他因数 i=2 for i in range(2,100): # 取i从2开始,2 最小的质数for j in range(2,i) ...

  7. python分词统计词频_-用python找出一篇文章中词频最高的20个单词

    python统计一个大文件中很多小文件里面的词频 #!/usr/bin/env python3.6 from collections import Counter from functools imp ...

  8. python找出素数_[Python 1] 如何使用Python找质数?

    学习生物信息需要熟练掌握一门甚至多门编程语言,比如Python.R.C++,这取决于你的需求. 但语言只是工具,最关键的是如何合理使用工具去解决生物学问题,这需要你去多写.多查.多看来锻炼.不然给你把 ...

  9. 如何用 Python 找出某月的第一天

    博客翻译自:https://www.mytecbits.com/internet/python/first-day-of-the-month Python 没有直接地方法获取某月的第一天,但只需要一些 ...

最新文章

  1. idea使用git上传项目到coding
  2. 11 Java NIO Non-blocking Server-翻译
  3. Varnish 4.0.3详细配置
  4. Redis RDB文件格式全解析
  5. springboot如何盈利_彻底透析SpringBoot jar可执行原理
  6. 对管理学的认识 知乎摘抄
  7. owaspbwa tickets
  8. scratch desktop的基本使用 - 如何使用积木
  9. Ajax基本案例详解之$.getjson的实现
  10. 同时面了腾讯三个部门,拿下offer!
  11. Ubuntu 12.04 更新重启无法进入桌面 -转
  12. AD RMS高可用(四)添加rms成员服务器
  13. 09. 利用destructors避免泄漏资源
  14. 多线程并发编程之构建自定义同步工具
  15. ZOJ 3429 Cube Simulation (思维题)
  16. python爬取别人qq空间相册_Python网络爬虫5 - 爬取QQ空间相册
  17. ubuntu防火墙安装arm架构说明
  18. MIMO信道容量仿真MATLAB,MIMO系统的信道容量分析 及Matlab仿真
  19. 笔记本计算机声音小,笔记本没有声音,小编教你笔记本没有声音怎么修复
  20. oracle rrsf_Oracle实战笔记(第三天)

热门文章

  1. 网络游戏服务器架构流程
  2. 计算机网络技术三级英文,计算机三级网络技术真题整理(国外英文资料).doc...
  3. 数学图形之莫比乌斯带(mobius)
  4. 笑一笑十年少,大家来笑笑吧
  5. vs2008编译QT开源项目--太阳神三国杀源码分析(三) 皮肤
  6. 本体李俊|区块链的实际业务场景需要哪些技术模块?
  7. linux usb3 转hdmi,USB TYPE-C转HDMI+PD3.0+USB3.0/USB3.1多功能扩展坞设计方法和设计电路...
  8. MATLAB Mann-Kendall突变检验 (mk突变检验)
  9. 出现这个错误的解决方法No enclosing instance of type 类名 is accessible. Must qualify the allocation with
  10. nginx日志---log_format详解