Una vez, mientras estaba sentado en YouTube, buscando melodías educativas interesantes, encontré videos con Synthesia, algunos de los cuales realmente me gustaron, decidí descargar y aprender ... =) Pero, por desgracia, resultó que hay videos, pero nadie quería subir archivos midi = (
Al ir a Google, decidí ver si hay soluciones listas para usar que me convengan, pero lamentablemente, por el hecho de que descubrí que solo había convertidores de audio en midi, lo que me molestó un poco ... Sin pensarlo dos veces, decidí que sería suficiente para restaurar la velocidad de cuadros MIDI en los videoclips ... y decidí intentar implementar este negocio ...
No quería escribir todo desde cero, así que decidí qué haría con los componentes listos para usar que Debian GNU / Linux me proporciona a partir de qué python era el más adecuado.
Al comienzo de la implementación, decidí que usaría imágenes ya hechas (extraídas de los videoclips), pero después de las primeras cargas me di cuenta de que no tiene sentido ... Resultó que era muy lento y también consume recursos significativos en el tornillo ... Luego decidí probar algo nuevo para mí mismo como OpenCV (he querido sentirlo durante mucho tiempo), resultó que OpenCV funciona muy bien con la transmisión de video, proporcionando todas las funciones que necesito (contar un píxel, cuadros de pantalla y texto).
Por ejemplo, abrir un archivo de video y recibir un cuadro se puede describir en dos líneas:
vidcap = cv2.VideoCapture('test.mp4') success,image = vidcap.read()
Y si lo desea, puede volcar marcos inmediatamente en el tornillo:
cv2.imwrite("/tmp/frame%d.jpg" % frame, image)
Después de un tiempo, escribí una función para generar las posiciones de las teclas del teclado virtual y mostrarlas (en forma de rectángulos) en la parte superior de la imagen de flujo y subí la imagen, resultó lo siguiente:

Entonces, habiendo decidido que cuadro por cuadro, al leer la imagen de la transmisión de video, leeré las notas activas desde la posición de las teclas virtuales (solo aquellas notas cuyos píxeles coinciden con el color de referencia o no lejos de él) se consideran activas y las envío a midi. No podía simplemente registrar notas, como si la situación estuviera en un teclado midi normal, es un poco más fácil ... Revisé el video, vi cuántas notas obtuve (y había muchas). Pensé que no estaba mal, todo lo que tenía que hacer era descubrir cómo escribir notas en un archivo, buscando un poco , encontré un gran paquete python-midiutil python. Después de un tiempo pude grabar notas en midi. Al final resultó que, python-midiutil es una bolsita muy simple y fácil de usar. Por ejemplo, crear un archivo y agregar notas se realiza en un par de líneas:
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)
La descarga del midi resultante en LMMS resultó ser bastante exitosa. En primer lugar, restauré un par de mis canciones favoritas. Luego quedó claro que la función para generar posiciones clave no era muy conveniente de un rodillo a otro, su ubicación cambió, decidí que haría una GUI, hice una simple, pero con una función de colocación de teclas

Creo que este programa puede ser útil para muchos, porque publiqué todo en github