作为一名狂热的体育爱好者,一直对如何利用技术手段提高观赛体验充满兴趣。在这篇文章中,将分享如何使用Python技术,通过简单的语音分析方法,自动从完整的体育赛事视频中提取高光时刻,而无需依赖机器学习或深度学习技术。
体育视频高光是指从体育赛事视频中提取最精彩的片段。这可以看作是视频摘要的一个经典应用案例,即将完整视频转换为更短的格式,同时保留最重要的内容。在板球比赛中,完整比赛视频包含了诸如四分、六分、出局等动作,而未编辑版本甚至捕捉到了一些不太有趣的事件,如防守、未击中、宽球、bye等。而高光时刻则是肾上腺素激增的地方,所有重要的讨论点,如四分、六分和出局,这些结合在一起构成了基本的高光时刻包。
从完整比赛视频中手动提取高光时刻需要大量的人力,这是一个耗时的任务,除非为一家日复一日做这项工作的视频公司工作,否则需要找到不同的方法。此外,存储完整比赛视频也是内存密集型的。因此,从完整比赛视频中自动提取高光时刻可以为创和用户节省大量时间。这正是将在本文中讨论的内容。
除了手动方法外,还可以采用不同的方法来生成高光时刻。两种常见的方法分别是自然语言处理(NLP)和计算机视觉(CV)。在深入方法之前,让简要讨论它们是如何工作的。
在查看下面的步骤之前,想一想如何使用NLP或基于文本的方法从板球比赛中提取重要部分?以下是逐步程序:
这种基于计算机视觉的方法看起来相当直观。毕竟,计算机视觉是训练机器查看图像和视频的领域。因此,使用计算机视觉生成高光时刻的一种方式是持续跟踪记分卡,并仅在出现四分、六分或出局时提取片段。
能想到使用这些技术中的任何其他方法吗?在下面的评论部分告诉——非常感兴趣听到想法。
到目前为止,可能在想——刚刚讨论了机器学习和深度学习的两个子领域。但文章标题和引言表明不会使用这两个领域。那么,真的可以在不构建模型的情况下生成高光时刻吗?是的!
并不是每个问题都需要深度学习和机器学习。大多数问题都可以通过深入理解领域和数据来解决。
将讨论使用简单语音分析的概念自动生成高光时刻。在继续最终方法之前,让讨论一些术语。
音频信号可以在时域或频域中进行分析。在时域中,音频信号是相对于时间分量进行分析的,而在频域中,它是相对于频率分量进行分析的:
音频信号的能量或功率指的是声音的响度。它通过音频信号振幅的平方和在时域中计算。当能量是针对整个音频信号的一块计算时,它被称为短时能量。
在大多数体育赛事中,每当发生有趣的事件时,评论员的语音和观众的欢呼声都会增加。以板球为例。每当击球手打出边界或投球手拿到出局时,评论员的声音就会上升。场地上充满了观众欢呼的声音。可以使用这些音频变化来捕捉视频中有趣的时刻。
以下是逐步过程:
板球是印度最受欢迎的运动,在该国几乎所有地区都有比赛。因此,作为一名狂热的板球迷,决定自动化从完整比赛板球视频中提取高光时刻的过程。尽管如此,同样的想法也可以应用于其他运动。
在本文中,只考虑了2007年T20世界杯印度对阵澳大利亚的半决赛的前6个回合(PowerPlay)。可以在YouTube上观看完整比赛
已经使用一个名为WavePad Audio Editor的软件从视频中提取了音频。可以从这里下载音频剪辑。
# 这里是提取音频的代码示例
可以使用以下代码获取音频剪辑的持续时间(以分钟为单位):
# 这里是获取音频持续时间的代码示例
现在,将音频分成5秒的块,因为感兴趣的是找出特定音频块是否包含音频声音的上升:
# 这里是将音频分成块的代码示例
让听一听音频块之一:
# 这里是听音频块的代码示例
计算块的能量:
# 这里是计算音频块能量的代码示例
在时域中可视化块:
# 这里是可视化音频块的代码示例
正如所看到的,信号的振幅随着时间的变化而变化。接下来,计算每个块的短时能量:
# 这里是计算短时能量的代码示例
让了解块的短时能量分布:
# 这里是分析短时能量分布的代码示例
能量分布是右偏的,如上图所示。将选择极端值作为阈值,因为只对评论员的语音和观众的欢呼声高的片段感兴趣。在这里,考虑阈值为12,000,因为它位于分布的尾部。可以自由尝试不同的值,看看得到的结果。
# 这里是选择阈值的代码示例
将连续的音频片段时间间隔合并为一个:
# 这里是合并音频片段的代码示例
提取特定时间间隔内的视频以形成高光时刻。记住——由于评论员的语音和观众的欢呼声只有在击球手击球后才会增加,只考虑每个兴奋片段后的五秒钟:
# 这里是提取视频高光时刻的代码示例
使用在线编辑器合并所有提取的片段以形成一个视频。