python生成视频_成为视频分析专家:自动生成视频集锦(Python实现)
介绍
我是个超级板球迷。从我记事起,我就迷上了这项运动,至今它仍在我的日常生活中起着重要的作用。我相信很多读到这篇文章的人都会点头!
但是自从我开始工作以来,要跟上所有的比赛就成了一件棘手的事。我不能看一场完整的比赛,只能看一些短暂的片段,或者看文字解说。
所以作为数据科学家的我决定做点什么。有没有一种方法可以让我使用我的Python技能并剪辑出比赛的所有重要部分?实际上,我想用Python创建我自己的集锦集合。
事实证明,我甚至不需要依靠机器学习或深度学习技术来做到这一点!现在,我想分享我的代码,在后面附有代码。这将让你尝试我们将在这篇文章中使用的一个简单的语音分析方法:
我将讨论我如何编写这个集锦生成的处理流程,使你可以学习和应用到任何比赛(或任何你想要的其他运动)。
目录
体育视频集锦简介
集锦生成的不同方法
我自己生成集锦的方法
理解问题描述
在Python中实现集锦生成
体育视频集锦简介
我们都看过一些体育比赛的精彩部分。即使你对运动没有兴趣,你也会在餐馆、酒店等地方看到电视上的精彩镜头。
集锦生成是从体育视频中提取最有趣的部分的剪辑的过程。
你可以将其视为视频摘要的经典用例。在视频摘要中,全长视频将转换为较短的格式,以便保留最重要的内容。
在板球比赛中,完整的比赛视频包含了四分打、六分打、三柱门等动作。未经过剪辑的版本会捕捉一些无趣的事件,如防御、离场、歪球、失误点等。
另一方面,集锦是人们肾上腺素激增的开始。所有主要的视频集锦,例如四分打、六分打、三柱门,这些结合在一起就构成了典型的集锦组合。
从一场完整的比赛视频中手动提取集锦需要大量的人工。这是一项耗时的工作,除非你想日复一日地从事这项工作,否则你需要找到其他方法。
存储一场完整的比赛视频也占用大量资源。因此,一场完整的比赛视频中自动提取集锦可以为创作者和用户节省大量时间。这就是我们将在本文中讨论的内容。
集锦生成的不同方法
除了手动方法之外,我们还有其他方法可以生成集锦。我们可以使用两种常见的方法-自然语言处理(NLP)和计算机视觉。在开始使用我的方法之前,让我们简要讨论一下它们如何工作。
基于自然语言处理(NLP)的方法
在查看以下步骤之前,请先考虑一下。你如何使用NLP或基于文本的方法从板球比赛中提取重要的数据?
以下是流程:
从输入视频中提取音频
将音频转录为文本
对文本应用基于提取的摘要技术来识别最重要的短语
提取相应重要短语的片段,生成集锦
基于计算机视觉的方法
这种基于计算机视觉的方法会给人一种非常直观的印象。毕竟,计算机视觉是我们训练机器看图像和视频的领域。因此,使用计算机视觉生成集锦的一种方法是一直跟踪比赛的记分卡,只有在出四分打、六分打、三柱门时才进行提取。
我自己生成集锦的方法
在这一点上,你可能想知道,我们刚才谈到了机器学习和深度学习的两个子领域。但是文章的标题和介绍表明我们不会使用这两个领域。那么我们真的可以在不构建模型的情况下生成集锦吗?是的!
“并非每个问题都需要深度学习和机器学习。对领域和数据的透彻理解可以解决大多数问题。” – Sunil Ray
我将讨论使用自动生成的集锦的概念——简易语音分析(Simple Speech Analysis)。在讨论最终方法之前,让我们讨论一些术语。
什么是短时能量?
我们可以在时域或频域中分析音频信号。在时域中,针对时间分量分析音频信号,而在频域中,针对频率分量进行分析:
音频信号的能量是指声音的响度。它是由时域中音频信号幅度的平方和求出的。当为整个音频信号的一部分计算能量时,则称为短时能量。
解决方案背后的基本思想是,在大多数体育比赛中,每当发生有趣的事件时,评论员和观众的声音都会增加。
让我们以板球为例。每当击球手击中界线或投球手取球时,评论员的声音就会上升。观众的欢呼声就开始爆发。我们可以使用音频中的这些更改来捕捉视频中有趣的时刻。
以下是流程:
输入完整匹配的视频
提取音频
将音频分成块
计算每个块的短时能量
将每个块归为是否"兴奋"(简单的基于阈值)
合并所有"兴奋"片段,以形成视频集锦
理解问题描述
板球运动是印度最著名的运动,在印度几乎所有地区都可以玩。因此,作为顽固的板球迷,我决定自动从完整比赛的板球视频中提取集锦。但是,相同的想法也可以应用于其他运动。
在Python中实现集锦生成
filename='powerplay.wav'
import librosa
x, sr = librosa.load(filename,sr=16000)
我们可以使用以下代码以分钟为单位获取音频剪辑的持续时间:
int(librosa.get_duration(x, sr)/60)
现在,由于我们有兴趣找出特定的音频块是否包含音频声音的上升,因此将音频分为5秒的块:
max_slice=5
window_length = max_slice * sr
让我们听一听音频块:
import IPython.display as ipd
a=x[21*window_length:22*window_length]
ipd.Audio(a, rate=sr)
计算块的能量:
energy = sum(abs(a**2))
print(energy)
在时间序列域中可视化块:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(14, 8))
ax1 = fig.add_subplot(211)
ax1.set_xlabel('time')
ax1.set_ylabel('Amplitude')
ax1.plot(a)
如我们所见,信号幅度随时间变化。接下来,为每个块分配短期能量:
import numpy as np
energy = np.array([sum(abs(x[i:i+window_length]**2)) for i in range(0, len(x), window_length)])
让我们查看这些块的短时能量分布:
import matplotlib.pyplot as plt
plt.hist(energy)
plt.show()
如上图所示,能量分布是右偏的。我们将选择极值作为阈值,因为仅当评论者的讲话和观众的欢呼声很高时,我们才对剪辑感兴趣。
在这里,我认为阈值是12,000,因为它位于分布的尾部。随意尝试不同的值,看看会得到什么结果。
import pandas as pd
df=pd.DataFrame(columns=['energy','start','end'])
thresh=12000
row_index=0
for i in range(len(energy)):
value=energy[i]
if(value>=thresh):
i=np.where(energy == value)[0]
df.loc[row_index,'energy']=value
df.loc[row_index,'start']=i[0] * 5
df.loc[row_index,'end']=(i[0]+1) * 5
row_index= row_index + 1
将相连的时间间隔的连续音频片段合并为一个:
temp=[]
i=0
j=0
n=len(df) - 2
m=len(df) - 1
while(i<=n):
j=i+1
while(j<=m):
if(df['end'][i] == df['start'][j]):
df.loc[i,'end'] = df.loc[j,'end']
temp.append(j)
j=j+1
else:
i=j
break
df.drop(temp,axis=0,inplace=True)
在特定时间间隔内提取视频以形成集锦。 切记,由于只有在击球手打完球之后,评论员的讲话和观众的欢呼才会增加,所以我考虑了每个“兴奋”的片段之前五秒:
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
start=np.array(df['start'])
end=np.array(df['end'])
for i in range(len(df)):
if(i!=0):
start_lim = start[i] - 5
else:
start_lim = start[i]
end_lim = end[i]
filename="highlight" + str(i+1) + ".mp4"
ffmpeg_extract_subclip("powerplay.mp4",start_lim,end_lim,targetname=filename)
我已经使用在线视频编辑器来合并所有提取的视频剪辑成单个视频。
恭喜你生成了你自己的集锦集合!继续将此技术应用于你想要的任何比赛或运动吧。它可能看起来很简单,但是它是一种强大的方法。这里有完整代码(https://github.com/aravindpai/Cricket-Highlights-Generation)
结尾
本文的关键结论是:在进入模型构建过程之前,要对领域和数据有一个全面的了解,因为它可以帮助我们更好地解决大多数问题。
在本文中,我们了解了如何使用简单的语音分析来自动提取一场完整体育比赛视频中的集锦。我建议你也尝试不同的运动。
本文由博客一文多发平台 OpenWrite 发布!
python生成视频_成为视频分析专家:自动生成视频集锦(Python实现)相关推荐
- 生成特征_使用gplearn自定义特征自动生成模块
背景:数据科学领域中,数据一直都是主要驱动力,特征工程作为其中重要一环,成为无论是kaggle类的数据竞赛,还是工业界应用中关注的重点.特征工程中有重要的一个环节叫做特征融合,好的特征融合能帮助构造当 ...
- python自动刷快手视频_快手加抖音自动刷视频脚本,引用的是python+易语言编程...
其实这个代码我这边已经整合好了,已有易语言版!!! 下面分享的仅仅只是"python"代码 先看下易语言版的界面: "python"代码 import os i ...
- python自动刷快手视频脚本_python自动刷快手视频_快手加抖音自动刷视频脚本,引用的是python+易语言编程......
其实这个代码我这边已经整合好了,已有易语言版!!! 下面分享的仅仅只是"python"代码 先看下易语言版的界面: "python"代码 import os i ...
- python 随机名言_如何用简易代码自动生成经典语录
"不要空想不可能的事情" "增加自己的幸福感" "我们最终将创造地面,并呵护它" "保持希望并学会放弃奇迹" 上面所有引 ...
- webstorm如何自动换行_怎样在word中自动生成目录
欢迎关注支持,谢谢!!! 用 Word 编排好一本书后,不用制作目录,可以用自动生成的方法生成,那么Word2016目录怎么自动生成呢?如果要自动生成目录,排版时就要设置好章节,如果等排 ...
- java 试卷自动生成_基于JAVA的试题自动生成系统 - WEB源码|JSP源码/Java|源代码 - 源码中国...
压缩包 : 试卷自动生成系统.rar 列表 试卷自动生成系统/.classpath 试卷自动生成系统/.project 试卷自动生成系统/bin/Db/Sql.class 试卷自动生成系统/bin/f ...
- opencv python 生成画布_第16章 坚持一百秒(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现坚持一百秒的游戏,玩家通过移动人脸控制飞碟躲避越来越多的反弹子弹,效果如图所示.首先利用面向对象的知识,实现了一个鼠 ...
- python如何爬取网页视频_快就完事了!10分钟用python爬取网站视频和图片
原标题:快就完事了!10分钟用python爬取网站视频和图片 话不多说,直接开讲!教你如何用Python爬虫爬取各大网站视频和图片. 638855753 网站分析: 我们点视频按钮,可以看到的链接是: ...
- 智慧城管视频监控AI智能分析系统 线上巡城 [Python+yolov7]
智慧城管视频监控AI智能分析系统通过Python基于YOLOv7深度学习网络架构,对现场画面中包括占道经营.户外乱堆物料.违规店外经营.垃圾满溢.游商小贩违规摆摊.车辆违停等行为进行实时分析.Pyth ...
- python趣味编程_第6章 旋转的方块(《Python趣味创意编程》教学视频)
本章我们将实现旋转的方块,如图所示.首先实现方块的绘制,学习坐标系的平移.旋转与缩放:接着实现一行方块的绘制,学习坐标系的保存与恢复:然后利用循环嵌套实现方块阵列的绘制:最后学习中文字符串的处理,实现 ...
最新文章
- h5打开App的方法。
- Pytorch实践中的几个重要概念
- Vue开发微信H5 微信分享签名失败问题解决方案
- Module Zero之用户管理
- jquery同步请求
- ui与html界面区别,ui前端和web前端的区别是什么?
- 我的cookie读写
- Solr Zookeeper ACL权限配置
- Mysql--Auto_increment详解
- WPF中如何选择合适的元数据标记?(英文)
- java分析dump文件_干货分享丨jvm系列:dump文件深度分析
- Qt实现音视频播放器
- 这一次,话筒给你:向自由软件之父 Richard M. Stallman 提问啦!
- php 时间戳转换日期格式用法
- 校园网下实验室的服务器如何实现远程登录
- Outlook 与企业微信邮箱通讯录同步
- 通用计算机(PC)和手机是否属于嵌入式设备?(嵌入式的定义)-杂谈
- 活动通知html代码大全,促销活动通知范文
- GitHub 被超火的 ChatGPT 霸榜!
- 对接华为存储iSCSI
热门文章
- C/C++---字符分布分割得到数字,适用于STM32/ESP32等等
- FFMpeg ver 20160219-git-98a0053 滤镜中英文对照 2016.02.21 by 1CM
- android apk编译打包过程
- nmap tcp syn扫描命令
- 2022宁波市第五届网络安全大赛(初赛Misc部分)
- 多线程的三种设计模式的介绍
- 人工智能基础(高中版)教材补充和资源分享之番外篇 Cozmo+Python+ROS+AI
- LaTeX公式-Katex解析
- 关于GLMM(generalized linear mixed model)广义线性混合模型
- job全异常 mapreduce_eclipse 运行MapReduce程序错误异常汇总(解决Map not fount)