基于Python实现音乐节奏可视化效果
国外有个网友分享了他的python音乐节奏可视化方案。上方的视频就是用他的方案可视化得到的结果,大家可以欣赏一下。
歌曲节奏越强,颜色变化越绚丽。现在很多舞蹈视频制作需要背景变色,拍摄时可以用灯光布景,另一种方式可以用“色卡”,比如用上面python做出来的“色卡”做背景,我们看看剪辑效果:
开场的“这夏天”文字颜色变幻,中间天空的颜色变化,都是跟着音乐节奏走的,丰富了视频的表现力。
如果这里不用python,靠自己剪辑去卡音乐节奏和添加颜色,很容易将人劝退。
下面给大家介绍一下怎么使用这份代码。
首先安装我们所需要的依赖模块:
pip install matplotlib pip install librosa pip install numpy pip install pygame
代码架构分为两个部分,一个是用于计算频谱的 AudioAnalyzer.py,一个用于渲染生成动态视频的 main.py
它是基于pygame实现的,pygame.draw.polygon(surface, color, points, width)画多边形。参数width控制颜色填充范围,默认为0,我们用一个代码设置30试一下:
import pygame import sys pygame.init() display = pygame.display.set_mode((300, 300)) display.fill((255, 255, 255)) pygame.draw.polygon(display, (0, 0, 255), [(120,120), (40,160), (40,220), (200, 220), (200,160)], width=0) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() pygame.display.update()
回到本案例,部分代码如下:
pygame.mixer.music.load(filename) pygame.mixer.music.play(0) running = True while running: avg_bass = 0 poly = [] # ticks t = pygame.time.get_ticks() deltaTime = (t - getTicksLastFrame) / 1000.0 getTicksLastFrame = t
首先,通过pygame加载(load)音乐文件并播放(play).
然后,通过while循环和ticks对画面中的图像进行实时渲染。
渲染的代码比较长,就是一些计算柱体长度的过程,这里就不赘述了。
如果你想要将你的音乐用这份代码进行可视化,仅需要修改main.py的第5行代码:
from AudioAnalyzer import * import random import colorsys filename = "D:\桌面\m1.MP3"
如果你想优化生成的动态图像的颜色,可以修改rnd_color函数,该函数控制图形颜色的变化:
def rnd_color(): h, s, l = random.random(), 0.5 + random.random() / 2.0, 0.4 + random.random() / 5.0 return [int(256 * i) for i in colorsys.hls_to_rgb(h, l, s)]
如果你想修改生成的动态图像的形状,比如说去掉中间那个圆,仅需要这么改:
pygame.draw.circle(screen, circle_color, (circleX, circleY), int(radius))
将radius直接设为0,或者直接将这行代码注释掉即可:
pygame.draw.circle(screen, circle_color, (circleX, circleY), 0)
最后,我们换一首歌看看效果:
到此这篇关于基于Python实现音乐节奏可视化效果的文章就介绍到这了,更多相关Python可视化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
unittest+coverage单元测试代码覆盖操作实例详解
这篇文章主要为大家详细介绍了unittest+coverage单元测试代码覆盖操作的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-04-04Python解方程组 scipy.optimize.fsolve()函数如何求解带有循环求和的方程式
这篇文章主要介绍了Python解方程组 scipy.optimize.fsolve()函数如何求解带有循环求和的方程式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-06-06pandas缺失值np.nan, np.isnan, None, pd.isnull,&n
本文主要介绍了pandas缺失值np.nan, np.isnan, None, pd.isnull, pd.isna2024-04-04Selenium Webdriver元素定位的八种常用方式(小结)
这篇文章主要介绍了Selenium Webdriver元素定位的八种常用方式(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-01-01
最新评论