Communitygithub.com

ytpiano2sheet

Transcrire une vidéo de piano avec barres défilantes (tutoriel YouTube de type Synthesia ou fichier vidéo local) en MIDI, partition (PDF, MusicXML, MuseScore) et audio, avec possibilité d'adaptation à un clavier réduit.

Qu'est-ce que ytpiano2sheet ?

ytpiano2sheet est un outil spécialisé qui lit les barres défilantes des vidéos tutoriels de piano (type Synthesia, ou toute vidéo montrant des notes tombant ou montant sur un clavier) pour en extraire une transcription musicale extrêmement précise. Il ne se base pas sur l'audio mais sur les barres elles-mêmes, ce qui permet une exactitude bien supérieure à une transcription audio — les tests montrent une correspondance de 989/990 et 947/947 notes sur des vidéos de référence. L'outil produit des fichiers MIDI, des partitions PDF, des fichiers MusicXML et MuseScore modifiables, ainsi que des pistes audio M4A. Il peut adapter la transcription à des claviers de différentes tailles (88, 76, 61, 49 touches, ou autres) en transposant les notes hors de portée par octaves entières, préservant ainsi l'harmonie. Le workflow inclut une vérification des prérequis (uv, MuseScore, fluidsynth, ffmpeg) avec installation automatique si autorisée, une génération d'images de contrôle 'review', et une validation visuelle avant remise des résultats à l'utilisateur. En cas d'erreur de lecture, des options de paramétrage (mesure, tonalité, seuil) permettent d'affiner le résultat, et des instructions précises sont fournies pour patcher le script localement tout en garantissant la compatibilité avec les tests existants.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ax3lt/ytpiano2sheet/tree/main

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait ytpiano2sheet ?

ytpiano2sheet.py (à côté de ce fichier) lit les barres défilantes d'une vidéo tutoriel de piano. Les barres sont générées à partir du MIDI original du pianiste, ce qui est bien plus précis qu'une transcription audio : sur deux vidéos de test, la transcription correspondait à une vérification manuelle pour 989 notes sur 990 et à une lecture indépendante des touches pour 947 notes sur 947. Cela ne fonctionne que sur les vidéos montrant des barres tombant (ou montant) sur un clavier.

Les transcriptions sont destinées à l'usage personnel de l'utilisateur : la musique appartient à ses compositeurs, arrangeurs et créateurs de vidéos. Ne téléchargez, publiez ou partagez pas les résultats au nom de l'utilisateur ; s'ils vous le demandent, renvoyez-les à la section « Utilisation personnelle et notes légales » du README.

Exécutez tout avec uv run <ce dossier>/ytpiano2sheet.py ... ; uv installe les dépendances Python automatiquement. Ci-dessous, $BS désigne le chemin absolu de ce dossier.

1. Demander d'abord

Si l'utilisateur n'a pas fourni de lien ou de fichier vidéo, demandez-le en texte brut.

Puis posez les deux questions en un seul appel AskUserQuestion (ignorez une question déjà répondue par l'utilisateur) :

  1. « Quels formats voulez-vous ? » (multiSelect : true)
    • « Partition PDF » (format pdf)
    • « Fichier MIDI » (format mid)
    • « Audio à écouter (m4a) » (format m4a)
    • « Fichier MusicXML + MuseScore » (formats musicxml,mscz, pour éditer la partition) « Autre » peut nommer wav ou review (images des barres avec les notes détectées).
  2. « Sur quel clavier allez-vous jouer ? »
    • « 88 touches, piano complet (recommandé) » (88)
    • « 76 touches » (76)
    • « 61 touches » (61)
    • « 49 touches » (49) « Autre » peut être une autre taille (73, 37, 32, 25) ou une plage comme C2-C7 (le Do central est C4). Les notes en dehors du clavier sont déplacées par octaves entières, l'harmonie reste donc identique.

2. Prérequis

  1. uv --version. Si uv est manquant, demandez avant de l'installer (brew install uv ou curl -LsSf https://astral.sh/uv/install.sh | sh).
  2. uv run $BS/ytpiano2sheet.py --check --formats <formats>. Cela liste ce qui manque (MuseScore pour pdf/mscz, fluidsynth et une soundfont pour l'audio, ffmpeg pour m4a) et la commande pour installer chaque élément.
  3. Si quelque chose manque, demandez avec AskUserQuestion s'il faut l'installer, en nommant chaque élément et sa commande (par exemple « brew install --cask musescore », « télécharger une soundfont de 32 Mo vers ~/.cache/ytpiano2sheet »). Si la réponse est oui, ajoutez --install à l'exécution à l'étape 3. Si une installation nécessite sudo (apt-get sur Linux), demandez à l'utilisateur d'exécuter cette commande lui-même avec le préfixe !, puis vérifiez à nouveau. Si la réponse est non, supprimez les formats qui nécessitent les outils manquants et dites lesquels vous avez supprimés.

3. Exécution

uv run $BS/ytpiano2sheet.py "<lien ou fichier>" -f <formats>,review -k <clavier> -o <dossier de sortie> [--install]
  • Ajoutez toujours review, même si l'utilisateur ne l'a pas demandé : vous avez besoin des images pour l'étape 4. Supprimez le dossier review ensuite, sauf si l'utilisateur l'a demandé.
  • Dossier de sortie par défaut : un dossier out/ dans le projet courant de l'utilisateur, sauf indication contraire. Chaque chanson reçoit son propre dossier à l'intérieur, nommé d'après le titre de la vidéo : out/<chanson>/<chanson>.pdf etc., out/<chanson>/review/, et <chanson> (61 touches).* pour un clavier plus petit.
  • Cela prend environ une minute pour une vidéo de 2-3 minutes (téléchargement inclus). Le journal indique le clavier trouvé, la vitesse des barres, le nombre de notes, et pour la partition la tonalité et la mesure estimées.
  • Options facultatives : --meter 3 ou --meter 4 et --key D / --key d (Ré mineur) remplacent les estimations de la partition. La partition n'estime que 3/4 ou 4/4 : quand vous savez que le morceau est dans une mesure composée (Nocturne Op. 9 No 2 de Chopin en 12/8, une barcarolle en 6/8), ou que les triolets d'un morceau en 4/4 (Moonlight Sonata) donnent trop de mesures en 3/4, passez --meter 12/8, 6/8 ou 9/8 ; --lowest C2 quand le clavier de la vidéo est coupé à une note inhabituelle (le journal prévient quand il a dû deviner) ; --start / --end (secondes) quand une intro ou un écran de fin se transforme encore en notes dans les images de review ; --threshold N (en dessous du seuil journalisé) quand certaines barres, souvent sombres, n'ont pas de rectangle.

Si l'outil s'arrête avec « could not find moving bars above the keyboard », la vidéo n'a pas de barres défilantes (un piano filmé, par exemple). Dites à l'utilisateur que cet outil ne peut pas la lire.

4. Vérifier avant de rendre compte

Ouvrez quelques images de review avec l'outil Read : la première, une du milieu, la dernière, plus toute qui semble dense. Chaque barre lumineuse doit porter un rectangle avec un nom de note, et aucun rectangle ne doit reposer sur un espace vide. Vérifiez aussi que :

  • la ligne de clavier dans le journal indique 88 touches A0-C8, ou une plage plus petite raisonnable ;
  • la tonalité de la partition correspond à la musique (la ligne du journal sheet: key ...) ;
  • pour un PDF, la page 1 ressemble à une partition de piano. Convertissez-la avec sips -s format png <pdf> --out page1.png sur macOS, ou avec MuseScore -o page1.png, puis visualisez-la.

Si des barres sont manquantes ou incorrectes, dites-le avec des horodatages plutôt que de le cacher. Essayez d'abord les options : --meter ou --key quand seule la mesure ou la tonalité de la partition semble erronée (le MIDI ne change pas), --lowest quand la plage du clavier dans le journal est erronée.

Si le lecteur lui-même est erroné et qu'aucune option n'aide, ne modifiez pas les scripts en silence. Une correction qui fait fonctionner une vidéo peut en casser d'autres, et le résultat cassé ressemble toujours à une partition plausible. Expliquez ce qui semble erroné et pourquoi, puis demandez avec AskUserQuestion s'il faut patcher la copie locale. Si l'utilisateur accepte :

  1. Avant de modifier, copiez chaque script que vous allez changer dans le dossier de la chanson (ytpiano2sheet.py.orig, sheet.py.orig).
  2. Faites la plus petite modification qui corrige la cause, relancez et refaites les vérifications ci-dessus. Ensuite exécutez uv run $BS/test_ytpiano2sheet.py ; si cela échoue, remettez les originaux.
  3. Écrivez bug-report.md dans le dossier de la chanson : le lien de la vidéo, les horodatages qui étaient erronés, les lignes de journal pertinentes, et diff -u de chaque modification par rapport à son .orig, afin que l'auteur puisse tester la correction sur les vidéos de référence et la publier pour tout le monde.
  4. Demandez avec AskUserQuestion s'il faut ouvrir un ticket en amont avec ce rapport. Seulement si oui, et seulement si gh est installé et connecté : gh issue create --repo <propriétaire/nom du dépôt récupéré par git -C $BS remote get-url origin> --title "<courte description du style de vidéo qui a échoué>" --body-file <dossier chanson>/bug-report.md, puis donnez à l'utilisateur le lien du ticket. Sans gh, ou si $BS n'est pas un clone git, dites à l'utilisateur où se trouve bug-report.md pour qu'il puisse le poster lui-même.

5. Rapport

Listez les fichiers écrits, le nombre de notes, la tonalité et la mesure utilisées, les éventuelles notes déplacées par l'adaptation au clavier (la ligne du journal keyboard ...: N notes moved), et tout ce qui semblait étrange à l'étape 4. Si les scripts ont été patchés, dites-le clairement et pointez vers bug-report.md. Restez concis.

Skills associés