有一次,当我坐在YouTube上寻找有趣的教育旋律时,我遇到了Synthesia的视频,其中一些我真的很喜欢,我决定下载并学习... =)但是,事实证明有视频,但是没有人愿意上传midi文件=(
前往Google决定看看是否有适合我的现成解决方案,但可惜的是,我发现Midi中只有音频转换器,这让我有点不高兴...我三思而后行,我决定恢复视频片段中的MIDI帧率就足够了...,我决定尝试实施这项业务。
我不想从头开始编写所有内容,因为我决定要对Debian GNU / Linux提供给我的现成组件进行什么操作,最适合使用python。
在实施开始时,我决定使用现成的(从视频剪辑中拉出的)图片,但是在第一次上传后,我意识到这是没有意义的……事实证明,它非常慢,并且在螺丝上也占用了大量资源……然后,我决定为自己尝试一种新事物OpenCV(我想很长一段时间都感觉到了),事实证明OpenCV可以很好地处理视频流,并提供我需要的所有功能(计算像素,显示帧和文本)。
例如,打开视频文件并接收一帧可以用两行描述:
vidcap = cv2.VideoCapture('test.mp4') success,image = vidcap.read()
如果需要,您可以立即将框架丢在螺丝上:
cv2.imwrite("/tmp/frame%d.jpg" % frame, image)
一段时间后,我编写了一个函数,用于生成虚拟键盘的键的位置,并在流图像的顶部显示它们(以矩形的形式)并上传图片,结果如下:

因此,在逐帧确定之后,当从视频流中读取图像时,我将从虚拟按键的位置读取活动笔记(仅其像素与参考颜色相符或相距不远的笔记被视为活动笔记),然后将其发送到midi。 我不能简单地注册笔记,就好像情况是在普通的Midi键盘上一样,这要容易一些……我检查了视频,看到有多少笔记(而且很多),我认为还不错,我所要做的就是弄清楚如何将笔记写到文件中,寻找一点,找到了一个很棒的python-midiutil python包。 一段时间后,我得以在Midi中录制音符。 事实证明,python-midiutil是一个非常简单且非常用户友好的包。 例如,创建文件和添加注释需要几行:
mf.addTrackName(track, time, "Sample Track") mf.addTempo(track, time, 60 ) mf.addNote(track, channel, pitch, keytime, duration, volume) with open(outputmid, 'wb') as outf: mf.writeFile(outf)
事实证明,在LMMS中下载生成的Midi非常成功。 首先,我恢复了一些我最喜欢的音乐。 然后很明显,用于生成键位置的功能在滚轴之间不是很方便,它们的位置发生了变化,我决定我要创建一个GUI,做一个简单的GUI,但是具有一个键放置功能

我认为该程序可能对许多人有用,因为我将所有内容都发布在了github上