介绍

我是个超级板球迷。从我记事起,我就迷上了这项运动,至今它仍在我的日常生活中起着重要的作用。我相信很多读到这篇文章的人都会点头!

但是自从我开始工作以来,要跟上所有的比赛就成了一件棘手的事。我不能看一场完整的比赛,只能看一些短暂的片段,或者看文字解说。

所以作为数据科学家的我决定做点什么。有没有一种方法可以让我使用我的Python技能并剪辑出比赛的所有重要部分?实际上,我想用Python创建我自己的集锦集合。

事实证明,我甚至不需要依靠机器学习或深度学习技术来做到这一点!现在,我想分享我的代码,在后面附有代码。这将让你尝试我们将在这篇文章中使用的一个简单的语音分析方法:

我将讨论我如何编写这个集锦生成的处理流程,使你可以学习和应用到任何比赛(或任何你想要的其他运动)。

目录

  1. 体育视频集锦简介
  2. 集锦生成的不同方法
  3. 我自己生成集锦的方法
  4. 理解问题描述
  5. 在Python中实现集锦生成

体育视频集锦简介

我们都看过一些体育比赛的精彩部分。即使你对运动没有兴趣,你也会在餐馆、酒店等地方看到电视上的精彩镜头。

集锦生成是从体育视频中提取最有趣的部分的剪辑的过程。

你可以将其视为视频摘要的经典用例。在视频摘要中,全长视频将转换为较短的格式,以便保留最重要的内容。

在板球比赛中,完整的比赛视频包含了四分打、六分打、三柱门等动作。未经过剪辑的版本会捕捉一些无趣的事件,如防御、离场、歪球、失误点等。

另一方面,集锦是人们肾上腺素激增的开始。所有主要的视频集锦,例如四分打、六分打、三柱门,这些结合在一起就构成了典型的集锦组合。

从一场完整的比赛视频中手动提取集锦需要大量的人工。这是一项耗时的工作,除非你想日复一日地从事这项工作,否则你需要找到其他方法。

存储一场完整的比赛视频也占用大量资源。因此,一场完整的比赛视频中自动提取集锦可以为创作者和用户节省大量时间。这就是我们将在本文中讨论的内容。

集锦生成的不同方法

除了手动方法之外,我们还有其他方法可以生成集锦。我们可以使用两种常见的方法-自然语言处理(NLP)和计算机视觉。在开始使用我的方法之前,让我们简要讨论一下它们如何工作。

基于自然语言处理(NLP)的方法

在查看以下步骤之前,请先考虑一下。你如何使用NLP或基于文本的方法从板球比赛中提取重要的数据?

以下是流程:

  • 从输入视频中提取音频
  • 将音频转录为文本
  • 对文本应用基于提取的摘要技术来识别最重要的短语
  • 提取相应重要短语的片段,生成集锦

基于计算机视觉的方法

这种基于计算机视觉的方法会给人一种非常直观的印象。毕竟,计算机视觉是我们训练机器看图像和视频的领域。因此,使用计算机视觉生成集锦的一种方法是一直跟踪比赛的记分卡,只有在出四分打、六分打、三柱门时才进行提取。

我自己生成集锦的方法

在这一点上,你可能想知道,我们刚才谈到了机器学习和深度学习的两个子领域。但是文章的标题和介绍表明我们不会使用这两个领域。那么我们真的可以在不构建模型的情况下生成集锦吗?是的!

“并非每个问题都需要深度学习和机器学习。对领域和数据的透彻理解可以解决大多数问题。” – Sunil Ray

我将讨论使用自动生成的集锦的概念——简易语音分析(Simple Speech Analysis)。在讨论最终方法之前,让我们讨论一些术语。

什么是短时能量?

我们可以在时域或频域中分析音频信号。在时域中,针对时间分量分析音频信号,而在频域中,针对频率分量进行分析:

音频信号的能量是指声音的响度。它是由时域中音频信号幅度的平方和求出的。当为整个音频信号的一部分计算能量时,则称为短时能量

解决方案背后的基本思想是,在大多数体育比赛中,每当发生有趣的事件时,评论员和观众的声音都会增加。

让我们以板球为例。每当击球手击中界线或投球手取球时,评论员的声音就会上升。观众的欢呼声就开始爆发。我们可以使用音频中的这些更改来捕捉视频中有趣的时刻。

以下是流程:

  • 输入完整匹配的视频
  • 提取音频
  • 将音频分成块
  • 计算每个块的短时能量
  • 将每个块归为是否"兴奋"(简单的基于阈值)
  • 合并所有"兴奋"片段,以形成视频集锦

理解问题描述

板球运动是印度最著名的运动,在印度几乎所有地区都可以玩。因此,作为顽固的板球迷,我决定自动从完整比赛的板球视频中提取集锦。但是,相同的想法也可以应用于其他运动。

在本文中,我只考虑了2007年T20世界杯印度对澳大利亚半决赛的前6轮。你可以在YouTube上观看完整的比赛(https://www.youtube.com/watch?v=lFq4eW9ewRE&t=2162s),并从这里下载前六场的视频(https://drive.google.com/drive/folders/1FRODSq1dgp-JvUcXRALKjn6bvIu15gU6)。

在Python中实现集锦生成

我已经借助名为WavePad Audio Editor的软件从视频中提取了音频。你可以从此处下载音频剪辑(https://drive.google.com/drive/folders/1FRODSq1dgp-JvUcXRALKjn6bvIu15gU6)。

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']=valuedf.loc[row_index,'start']=i[0] * 5df.loc[row_index,'end']=(i[0] 1) * 5row_index= row_index   1

将相连的时间间隔的连续音频片段合并为一个:

temp=[]
i=0
j=0
n=len(df) - 2
m=len(df) - 1
while(i<=n):j=i 1while(j<=m):if(df['end'][i] == df['start'][j]):df.loc[i,'end'] = df.loc[j,'end']temp.append(j)j=j 1else:i=jbreak
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] - 5else: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)

结尾

本文的关键结论是:在进入模型构建过程之前,要对领域和数据有一个全面的了解,因为它可以帮助我们更好地解决大多数问题。

在本文中,我们了解了如何使用简单的语音分析来自动提取一场完整体育比赛视频中的集锦。我建议你也尝试不同的运动。

欢迎关注磐创博客资源汇总站:http://docs.panchuang.net/

欢迎关注PyTorch官方中文教程站:http://pytorch.panchuang.net/

成为视频分析专家:自动生成视频集锦(Python实现)相关推荐

  1. RedditVideoMakerBot 视频制作机器人自动生成视频搭建教程

    https://github.com/elebumm/RedditVideoMakerBot搭建教程 RedditVideoMakerBot视频制作机器人 有些在抖音.快手上的视频获得了数百万的观看次 ...

  2. python 视频分析_成为视频分析专家:自动生成集锦的方法(Python实现)

    概述以一种简单的方法在Python中生成视频集锦 不使用机器学习或深度学习,学习如何自动生成集锦 使用我们自己的方法,对一场完整的板球比赛自动生成集锦 介绍 我是个超级板球迷.从我记事起,我就迷上了这 ...

  3. python生成视频_成为视频分析专家:自动生成视频集锦(Python实现)

    介绍 我是个超级板球迷.从我记事起,我就迷上了这项运动,至今它仍在我的日常生活中起着重要的作用.我相信很多读到这篇文章的人都会点头! 但是自从我开始工作以来,要跟上所有的比赛就成了一件棘手的事.我不能 ...

  4. python RTL自动生成_成为视频分析专家:自动生成集锦的方法(Python实现)

    概述 以一种简单的方法在Python中生成视频集锦 不使用机器学习或深度学习,学习如何自动生成集锦 使用我们自己的方法,对一场完整的板球比赛自动生成集锦 介绍 我是个超级板球迷.从我记事起,我就迷上了 ...

  5. 成为视频分析专家:自动生成集锦的方法(Python实现)

    概述 以一种简单的方法在Python中生成视频集锦 不使用机器学习或深度学习,学习如何自动生成集锦 使用我们自己的方法,对一场完整的板球比赛自动生成集锦 介绍 我是个超级板球迷.从我记事起,我就迷上了 ...

  6. 【ChatGPT整活大赏】写论文后自动生成视频

    ChatGPT国内又火了一把,功能很强大,接下来就带大家感受一下它的强大之处,通过ChatGPT写一篇论文并自动生成视频,增加内容的可读性. 话不多说,先上成果: 用ChatGPT写论文后自动生成视频 ...

  7. 为音视频自动生成字幕的python工具

    目录 为音视频自动生成字幕的 python 工具 autosub autosub3 安装 使用 为音视频自动生成字幕的 python 工具 autosub 是一个能自动为音视频生成字幕的 pytho ...

  8. 程序化自动生成视频实现Youtube掘金

    这是一篇我在生财发的龙珠文,同步到公众号中. 大家好,我叫二两,目前在广州一家游戏公司做算法工程师,除了主业外,业余时间也喜欢跟着生财里老师傅研究副业的生财之道,这里分享一个通过程序化的方式自动生成视 ...

  9. 哔哩哔哩自动生成视频上传,B站发布软件使用教程

    哔哩哔哩自动生成视频上传,B站发布软件使用教程,全自动引流发帖软件介绍#引流发帖软件#全自动引流发帖#引流推广#拓客引流#爆粉软件 大家好,我是百收编辑狂潮老师,下面给大家讲一下 b 站上传软件它的一 ...

最新文章

  1. 大学计算机一条指令的执行过程实验,实验四 一条指令的执行过程
  2. Java Vector与ArrayList的区别
  3. node随笔-数据流Stream
  4. ByteArray、16进制、字符串之间的转换
  5. codesmith 如何把选中的多个表生成实体
  6. day10 Python 形参顺序
  7. 英特尔CEO:将在行业整合背景下大力收购半导体企业
  8. C++ vector和list的区别
  9. linux下vmstat命令详解
  10. 使用MediaRecorder录制音频和视频(Camera1)
  11. [论文写作] Wrong vs Mistake vs Error vs Incorrect vs Erroneous
  12. Tableau:树状图
  13. 2020快手上市招股书
  14. 如何对word中不同页面设置不同页眉页脚
  15. laravel教程入门笔记
  16. 程序员为程序员推荐:我觉得这本书不错,分享给你
  17. r语言和python的区别-Python和R语言之分析对比
  18. picturebox绑定datagridview
  19. 2021-04-05 c++程序设计原理与实践持续学习笔记:第三章对象、类型和值。
  20. 微积分知识点回顾与总结(十):级数

热门文章

  1. HDU 1522 Marriage is Stable (稳定婚姻匹配)
  2. 关键链—突破项目管理的瓶颈_哪些数据将成为区块链系统的关键数据?
  3. 非易失性规划的原理与实现方法
  4. 【从零学Python】什么时候调用forward()函数、图片预处理、return中的if...else...
  5. koder code editor使用教程_教程 | 使用VS Code舒适地开发Verilog HDL V1.1
  6. XP系统配置使运行程序速度加快
  7. 电路设计_路由器方案比较
  8. 最好最实用的二次开发教程 cms
  9. Ansible 剧本变量 -01
  10. 用java写一个剧本,当爱情的剧本,多出现一个人【mysql】