¿Qué hace ytpiano2sheet?
ytpiano2sheet.py (junto a este archivo) lee las barras descendentes de un video tutorial de piano. Las barras se dibujan a partir del MIDI del pianista, por lo que esto es mucho más exacto que transcribir el audio: en dos videos de prueba coincidió con una transcripción verificada manualmente en 989 de 990 notas y con una lectura independiente de las pulsaciones de teclas en 947 de 947. Solo funciona en videos que muestren barras cayendo sobre (o elevándose desde) un teclado.
Las transcripciones son para la práctica personal del usuario: la música pertenece a sus compositores, arreglistas y creadores de video. No subas, publiques ni compartas las salidas en nombre del usuario; si te lo pide, remítelo a la sección "Personal use and legal notes" del README.
Ejecuta todo con uv run <esta carpeta>/ytpiano2sheet.py ...; uv instala las dependencias de Python por sí mismo. A continuación, $BS significa la ruta absoluta de esta carpeta.
1. Preguntar primero
Si el usuario no ha dado un enlace o un archivo de video, pídelo en texto plano.
Luego haz ambas preguntas en una sola llamada AskUserQuestion (salta la pregunta que el usuario ya haya respondido):
- "¿Qué salidas deseas?" (multiSelect: true)
- "Partitura en PDF" (formato
pdf) - "Archivo MIDI" (formato
mid) - "Audio para escuchar (m4a)" (formato
m4a) - "Archivo MusicXML + MuseScore" (formatos
musicxml,mscz, para editar la partitura) "Otro" puede nombrarwavoreview(imágenes de las barras con las notas detectadas).
- "Partitura en PDF" (formato
- "¿En qué teclado lo tocarás?"
- "88 teclas, piano completo (Recomendado)" (
88) - "76 teclas" (
76) - "61 teclas" (
61) - "49 teclas" (
49) "Otro" puede ser otro tamaño (73, 37, 32, 25) o un rango comoC2-C7(el Do central es C4). Las notas fuera del teclado se mueven en octavas completas, por lo que la armonía se mantiene igual.
- "88 teclas, piano completo (Recomendado)" (
2. Prerrequisitos
uv --version. Si falta uv, pregunta antes de instalarlo (brew install uv, ocurl -LsSf https://astral.sh/uv/install.sh | sh).uv run $BS/ytpiano2sheet.py --check --formats <formatos>. Lista lo que falta (MuseScore para pdf/mscz, fluidsynth y un soundfont para audio, ffmpeg para m4a) y el comando que instala cada uno.- Si falta algo, pregunta con AskUserQuestion si desea instalarlo, nombrando cada elemento y su comando (por ejemplo "brew install --cask musescore", "descargar un soundfont de 32 MB a ~/.cache/ytpiano2sheet"). Si dice que sí, añade
--installa la ejecución en el paso 3. Si una instalación necesita sudo (apt-get en Linux), pide al usuario que ejecute ese comando él mismo con el prefijo!, luego verifica de nuevo. Si dice que no, elimina los formatos que necesiten las herramientas faltantes e indica cuáles eliminaste.
3. Ejecutar
uv run $BS/ytpiano2sheet.py "<enlace o archivo>" -f <formatos>,review -k <teclado> -o <carpeta de salida> [--install]
- Añade siempre
review, incluso si el usuario no lo pidió: necesitas las imágenes para el paso 4. Elimina la carpetareviewdespués, a menos que el usuario la haya solicitado. - Carpeta de salida por defecto: una carpeta
out/en el proyecto actual del usuario, a menos que indique otra cosa. Cada canción recibe su propia carpeta dentro, nombrada según el título del video:out/<canción>/<canción>.pdfy así sucesivamente,out/<canción>/review/, y<canción> (61 teclas).*para un teclado más pequeño. - Tarda aproximadamente un minuto para un video de 2-3 minutos (incluyendo la descarga). El registro informa el teclado encontrado, la velocidad de las barras, el conteo de notas y, para la partitura, la tonalidad y el compás adivinados.
- Banderas opcionales:
--meter 3o--meter 4y--key D/--key d(Re menor) anulan las suposiciones de la partitura. La partitura solo adivina 3/4 o 4/4: cuando sabes que la pieza tiene un compás compuesto (Nocturno Op. 9 No. 2 de Chopin en 12/8, una barcarola en 6/8), o los tresillos de una pieza en 4/4 (Claro de Luna) hacen que la partitura tenga demasiados compases de 3/4, pasa--meter 12/8,6/8o9/8;--lowest C2cuando el teclado del video está cortado en una tecla inusual (el registro advierte cuando tuvo que adivinar);--start/--end(segundos) cuando una introducción o pantalla final aún se convierten en notas en las imágenes de revisión;--threshold N(por debajo del umbral registrado) cuando algunas barras, a menudo oscuras, no tienen recuadro.
Si se detiene con "could not find moving bars above the keyboard", el video no tiene barras descendentes (por ejemplo, un piano filmado). Indica al usuario que esta herramienta no puede leerlo.
4. Verificar antes de informar
Abre algunas imágenes de revisión con la herramienta Read: la primera, una del medio, la última, más aquellas que parezcan densas. Cada barra brillante debe llevar un recuadro con el nombre de la nota, y ningún recuadro debe estar sobre espacio vacío. También verifica que:
- la línea del teclado en el registro indique 88 teclas A0-C8, o un rango más pequeño razonable;
- la tonalidad de la partitura coincida con la música (la línea del registro
sheet: key ...); - para un PDF, la página 1 se vea como música para piano. Conviértelo con
sips -s format png <pdf> --out page1.pngen macOS, o MuseScore-o page1.png, luego míralo.
Si faltan barras o son incorrectas, indícalo con marcas de tiempo en lugar de ocultarlo. Prueba las banderas primero: --meter o --key cuando solo el compás o la tonalidad de la partitura se vean mal (el MIDI no cambia), --lowest cuando el rango del teclado en el registro sea incorrecto.
Si el lector en sí está mal y ninguna bandera ayuda, no edites los scripts en silencio. Una corrección que haga funcionar un video puede romper otros, y el resultado roto aún parece una partitura plausible. Explica qué se ve mal y por qué, luego pregunta con AskUserQuestion si desea parchear la copia local. Si el usuario acepta:
- Antes de editar, copia cada script que cambiarás a la carpeta de la canción (
ytpiano2sheet.py.orig,sheet.py.orig). - Haz el cambio más pequeño que solucione la causa, vuelve a ejecutar y repite las verificaciones anteriores. Luego ejecuta
uv run $BS/test_ytpiano2sheet.py; si falla, restaura los originales. - Escribe
bug-report.mden la carpeta de la canción: el enlace del video, las marcas de tiempo que estaban mal, las líneas de registro relevantes ydiff -ude cada cambio contra su.orig, para que el autor pueda probar la corrección con los videos de referencia y enviarla a todos. - Pregunta con AskUserQuestion si desea abrir un issue upstream con ese informe. Solo si es sí, y solo si
ghestá instalado y autenticado:gh issue create --repo <propietario/nombre de git -C $BS remote get-url origin> --title "<descripción breve del estilo de video que falló>" --body-file <carpeta de la canción>/bug-report.md, luego da al usuario el enlace del issue. Singh, o si $BS no es un clon de git, indica al usuario dónde estábug-report.mdpara que pueda publicarlo él mismo.
5. Informar
Enumera los archivos escritos, el conteo de notas, la tonalidad y el compás utilizados, las notas movidas por la adaptación del teclado (la línea del registro keyboard ...: N notes moved), y cualquier cosa del paso 4 que se viera mal. Si los scripts fueron parcheados, indícalo claramente y señala a bug-report.md. Mantenlo breve.