有些时候,为了设定手机铃声或者发抖音视频,我们会耗费大量时间在剪辑音乐高潮部分上。那么这个音乐高潮的提取能不能自动化呢?当然可以。

先来听听效果,孤芳自赏提取高潮后的部分:

怎么样,是不是迫不及待想往下读了?不要急,让我们从原理开始慢慢讲起。

1.原理简介

不知道大家有没有这样的体会,大部分时候,歌曲的高潮部分通常是重复次数最多的部分。因此我们可以根据这一个特征,提出我们的算法:

1.遍历整首歌曲。

2.将选定长度的部分与其他部分比较并计算相似度,以查看是否重复。

3.寻找重复次数较大、且间隔长的片段。

2.代码编写

为了避免造轮子,我们找到了别人已经做过的类似的项目:https://github.com/vivjay30/pychorus

我们只需要分析这个源代码中最核心的部分,即求相似区段的源代码,就能知道它是不是符合我们的项目需求了:

可以看到,这部分代码就是做了我们算法的第二步,进行了片段与片段之间的相似度计算。检测时用到的相似函数是这样的:

这主要是因为歌曲由12个基本音符的帧的集合而组成,v1和v2是任意两段音乐的音符矢量,如果说两段音乐非常相似,那么右边的式子将接近于0. 如果说 1-右边的式子 得分非常高,则说明两段音乐非常相似。

下面我们看看怎么使用这个项目求音乐高潮部分,其实非常简单。

2.1 安装所需要的项目

你可以通过pip安装该项目,如果你还没有安装好Python相关环境,建议阅读这篇文章:Python超详细安装指南,PIP安装指令如下:

pip install pychorus

2.2 编写代码

实际上,这个包用起来可是相当简单,如果我们只是想单纯提取歌曲高潮部分:

frompychorusimportfind_and_output_chorus

chorus_start_sec=find_and_output_chorus("你的音乐文件","输出高潮部分文件",要多少秒的高潮部分)

没错,两行代码就解决了。如果你想知道一些详细的细节,比如说输出相似矩阵或者结果可视化,建议阅读github中该项目的操作指令。下面让我们检验一下效果。

3.效果检验

以《孤芳自赏》 为例,让我们试试这个提取器的功力。

原曲:

编写代码:

# 提取音乐高潮部分

frompychorusimportfind_and_output_chorus

chorus_start_sec=find_and_output_chorus("孤芳自赏.mp3","孤芳自赏_high.wav",40)

效果如下:

非常优秀!提取了我心目中想要的部分。大家也可以根据我们今天的教程,试着提取一下自己喜欢的音乐的高潮部分哦!

4.批量提取

刚刚,只是完成了单首歌曲的高潮提取,如果你想提取整个文件夹下的音乐的高潮部分,可以这样做:

图片版代码

文字版代码:

# Python 实用宝典# 提取音乐高潮部分# 2020/06/11import osimport sysfrom pychorus import find_and_output_chorusdef extract_all_file(files_path):"""批量提取音乐高潮Args:files_path (str): 文件夹路径"""# 文件夹路径modpath = os.path.dirname(os.path.abspath(sys.argv[0]))for filepath in os.listdir(files_path):# 路径处理datapath = os.path.join(modpath, files_path + filepath)# output文件夹是否存在targets = f"{modpath}\\output\\"if not os.path.exists(targets):os.makedirs(targets)# 提取音乐高潮至当前output文件夹下find_and_output_chorus(datapath, f"{targets}{filepath.split('.')[0]}_high.wav", 40)extract_all_file("F:\\push\\20200611\\music\\")

如果你喜欢今天的Python 教程,请持续关注Python实用宝典,如果对你有帮助,麻烦在下面点一个赞/在看

,有任何问题都可以在下方留言,我们会耐心解答的!

点击下方阅读原文可以获取所有代码和链接哦!

Python实用宝典 (pythondict.com)

不只是一个宝典

欢迎关注公众号:Python实用宝典

python怎么实现音乐快进_Python 超简单3行代码提取音乐高潮(附批量提取)相关推荐

  1. 国外stripe支付,超简单几行代码搞定

    国外stripe支付,超简单几行代码搞定 海外的项目 需要stripe支付 很简单 几行代码 先加入依赖: compile 'com.stripe:stripe-android:6.1.2' 总共两种 ...

  2. Python 超简单3行代码提取音乐高潮(附批量提取)!

    怎么样,是不是迫不及待想往下读了?不要急,让我们从原理开始慢慢讲起. 1.原理简介 不知道大家有没有这样的体会,大部分时候,歌曲的高潮部分通常是重复次数最多的部分.因此我们可以根据这一个特征,提出我们 ...

  3. Python 超简单3行代码提取音乐高潮部分

    有些时候,为了设定手机铃声或者发抖音视频,我们会耗费大量时间在剪辑音乐高潮部分上.那么这个音乐高潮的提取能不能自动化呢?当然可以. 先来看看,怎么样来提取孤芳自赏提取高潮后的部分: 怎么样,是不是迫不 ...

  4. lisp 批量文字求差值_Python 超简单 提取音乐高潮(附批量提取)

    希望点击上方 编程学习者社区,选择 创建星标 回复关键字 资源  获取编程资源 很多时候我们想提取某首歌的副歌部分(俗称 高潮部分),只能手动直接卡点剪切,但是对于大批量的获取就很头疼,如何解决?怎么 ...

  5. 用python写web网页实现音乐数据库查询_Python tornado用40行代码搭建数据库交互网页实现快速全栈开发...

    作为数据分析师,我们大部分时间做的事情都是搭建线下Excel报表,这既有优点也有缺点 优点是: 开发效率 快速建模,最快十分钟就可以建模 数据传播 便于传播,发文件就是发模型 交互友好 对使用者门槛低 ...

  6. python根据关键字爬取微博_Python 超简单爬取微博热搜榜数据

    微博的热搜榜对于研究大众的流量有非常大的价值.今天的教程就来说说如何爬取微博的热搜榜.热搜榜的链接是: https://s.weibo.com/top/summary/ 用浏览器浏览,发现在不登录的情 ...

  7. python爬取微博热搜_Python 超简单爬取微博热搜榜数据

    微博的热搜榜对于研究大众的流量有非常大的价值.今天的教程就来说说如何爬取微博的热搜榜.热搜榜的链接是: https://s.weibo.com/top/summary/ 用浏览器浏览,发现在不登录的情 ...

  8. python 网站视频快进_python gstreamer实现视频快进/快退/循环播放功能

    Gstreamer到底是个啥? GStreamer 是一个 基于pipeline的多媒体框架,基于GObject,以C语言写成. 应用GStreamer这个这个多媒体框架,你可以写出任意一种流媒体的应 ...

  9. video downloadhelper 无时间限制_Python实现超简单【抖音】无水印视频批量下载

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:python乱炖 转载: Python实现超简单[抖音]无水印视频批 ...

最新文章

  1. CyclicBarrier和CountDownLatch区别
  2. MFC设置静态文本框,编辑框等控件背景和字体颜色
  3. 设计器的使用及常用控件
  4. 大话数据结构学习笔记二:算法
  5. [html] 如何动态修改`<title>`的标题名称?
  6. spring boot controller 初始化_基于 tyboot 快速初始化 springboot 单体项目
  7. node.js提供的服务器live-server的使用
  8. android蓝牙历史
  9. Linux 磁盘管理 一(Raid、LVM、Quota)
  10. eNSP 华为模拟器更新说明
  11. Mac安装Qt出现错误Could not resolve SDK Path for ‘macosx‘
  12. c语言编程 进制转换,c语言中的进制转换
  13. Vysor 1.7.6 chrome 插件破解
  14. (转载)《相信自己》
  15. 极光推送接收不到_极光推送ios接受不到通知
  16. 矢量文字符号文件格式设计
  17. DRM-Playready总结
  18. EMC/EMI 测试顺利通过
  19. Unity接入心知天气,获取当前城市天气状况
  20. Unity-使用UPR资源检测工具AssetChecker-Win进行本地资源检测

热门文章

  1. 用DELETE删除的文件怎么免费找回不用购买不用注册码
  2. iOS开发之网络编程--获取文件的MIMEType
  3. 工厂模式之消除switch/case语句
  4. Codeforces Round #564 (Div. 2) C. Nauuo and Cards
  5. 树(5)-----判断两颗树一样或者一棵树是否是另外一颗的子树
  6. 为Windows2008升级系统补丁
  7. 部分 DNS 查询因闰秒 bug 报错
  8. python 爬虫 scrapy1_官网教程
  9. HIBERNATE与 MYBATIS的对比
  10. intel A20地址线