Skip to content

About

Transcrit la batterie d'une vidéo YouTube en partition PDF (Demucs + ADTOF + LilyPond), en local sur CPU

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

🥁 batterie-partition

Une vidéo en entrée, une partition de batterie en PDF en sortie.

Le script télécharge l'audio d'une vidéo (YouTube et plus de 1 000 autres sites), isole la batterie, détecte chaque coup, le répartit sur les éléments du kit, puis grave une partition lisible avec LilyPond. Tout tourne en local, sur le processeur : pas de carte graphique, pas de compte, pas de droits administrateur.

Exemple de partition générée

Kit pris en compte : charleston 14", caisse claire 14", grosse caisse 22", toms 10"/12"/16", ride 20", crashs 16" et 18".


Sommaire

  1. Ce que vous obtenez
  2. Installation
  3. Première partition
  4. Options
  5. Conseils pour une meilleure partition
  6. Dépannage
  7. Comment ça marche
  8. Limites
  9. Crédits et licences

Ce que vous obtenez

Pour chaque vidéo, quatre fichiers à côté du PDF :

Fichier Contenu
<titre> - batterie.pdf la partition, avec le minutage de la vidéo au début de chaque ligne
<titre> - batterie.midi la partition rejouée à tempo constant, pour vérifier à l'oreille
<titre> - batterie - timing reel.mid les coups détectés, calés exactement sur la vidéo
<titre> - batterie.ly la source LilyPond, à corriger à la main puis recompiler

La partition indique aussi :

  • le charleston ouvert (petit rond au-dessus de la croix) ;
  • les notes fantômes de caisse claire (entre parenthèses) ;
  • les triolets quand le batteur en joue ;
  • les mesures répétées, avec le signe de répétition (simile).

Installation

Configuration conseillée : 4 Go de RAM, 3 Go d'espace disque, environ 10 minutes d'installation (téléchargement de PyTorch et des modèles).

Le script setup.sh installe tout dans votre dossier personnel, sans sudo :

  • uv, le gestionnaire Python, s'il n'est pas déjà là ;
  • Python 3.13 dans un environnement isolé .venv/, avec PyTorch, Demucs, ADTOF, yt-dlp, ffmpeg et deno ;
  • LilyPond 2.26 dans ~/.local/opt/.

Rien n'est modifié en dehors de ~/.local/ et du dossier du projet.

Linux

Debian, Ubuntu, Fedora, Arch… sur processeur x86_64.

# 1. git et curl, s'ils manquent (Debian/Ubuntu)
sudo apt install git curl

# 2. récupérer le projet
git clone https://github.com/rdorys/batterie-partition.git
cd batterie-partition

# 3. tout installer
./setup.sh

L'installation se termine par une ligne == prêt : ….

Processeur ARM (Raspberry Pi…) : il n'existe pas de LilyPond précompilé. Installez-le d'abord avec sudo apt install lilypond, puis lancez ./setup.sh.

macOS

Intel ou Apple Silicon (M1 et suivants).

# 1. git, s'il manque (ouvre une fenêtre d'installation des outils Apple)
xcode-select --install

# 2. récupérer le projet
git clone https://github.com/rdorys/batterie-partition.git
cd batterie-partition

# 3. tout installer
./setup.sh

Windows (WSL)

Le script tourne sous Linux. Sous Windows 10 ou 11, le plus simple est WSL, qui fournit un Ubuntu intégré :

  1. Ouvrez PowerShell en administrateur et lancez :
    wsl --install
  2. Redémarrez, puis ouvrez Ubuntu depuis le menu Démarrer. Au premier lancement, il demande de choisir un nom d'utilisateur et un mot de passe.
  3. Dans cette fenêtre Ubuntu, suivez les étapes Linux ci-dessus.

Les fichiers produits sont visibles depuis l'explorateur Windows, à l'adresse \\wsl$\Ubuntu\home\<votre-nom>\batterie-partition. Pour ouvrir directement le dossier courant dans l'explorateur :

explorer.exe .

Installation manuelle

Si vous préférez gérer vous-même votre environnement Python (3.10 ou plus récent, testé avec 3.13) :

python3 -m venv .venv
.venv/bin/pip install torch --index-url https://download.pytorch.org/whl/cpu   # Linux
.venv/bin/pip install -r requirements.txt

Il faut aussi LilyPond 2.24 ou plus récent, installé par votre gestionnaire de paquets (apt install lilypond, brew install lilypond…) ou téléchargé. Le script le cherche, dans l'ordre :

  1. l'option --lilypond ;
  2. la variable d'environnement LILYPOND ;
  3. le PATH ;
  4. ~/.local/opt/lilypond-*/.

Première partition

Depuis le dossier du projet :

.venv/bin/python batterie_partition.py "https://www.youtube.com/watch?v=XXXXXXXXXXX"

Pensez aux guillemets autour du lien. Le chemin du PDF s'affiche à la fin, avec un résumé :

[batterie] téléchargement de l'audio…
[batterie] isolation de la batterie avec Demucs (htdemucs), quelques minutes sur CPU…
[batterie] détection des coups (ADTOF)…
[batterie] suivi du tempo…
[batterie] analyse des fûts et cymbales…
[batterie] gravure de la partition (LilyPond)…
[batterie] tempo ≈ 103 BPM, 153 mesures, 1853 coups
[batterie]   Charleston 14" fermé     505
[batterie]   Ride 20"                 268
[batterie]   Caisse claire 14"        245
[batterie]   Grosse caisse 22"        641
…
/home/vous/batterie-partition/Titre de la vidéo - batterie.pdf

Durée : compter 3 à 5 minutes pour un morceau de 5 minutes sur un processeur récent. L'étape la plus longue est l'isolation de la batterie.

Un fichier audio ou vidéo local fonctionne aussi :

.venv/bin/python batterie_partition.py ~/Musique/morceau.mp3

Options

.venv/bin/python batterie_partition.py --help
Option Effet
-o partition.pdf nom du PDF de sortie (défaut : titre de la vidéo)
--debut 0:45 --fin 2:30 ne traiter qu'un extrait
--tempo 96 tempo approximatif, si le tempo détecté est doublé ou divisé par deux
--tempo 96 --tempo-fixe grille à tempo constant (morceau joué au clic)
--mesure 3 nombre de temps par mesure (défaut : 4, soit du 4/4)
--division 16 / 8 / triolet forcer la subdivision (défaut auto : doubles croches ou triolets selon le temps)
--mesures-par-ligne 2 mise en page plus aérée (défaut : 4)
--sensibilite 1.3 plus de notes détectées (0.8 : moins)
--cymbales ride / crash forcer toutes les cymbales sur la ride ou sur les crashs
--source-detection batterie détecter sur la piste isolée seule (défaut : moyenne avec le mixage)
--modele htdemucs_ft meilleure isolation de la batterie, 4 fois plus lente
--sans-simile écrire les mesures répétées en entier
--dossier-travail ./travail garder les fichiers intermédiaires, voir ci-dessous
--lilypond /chemin/lilypond utiliser un LilyPond précis

Conseils pour une meilleure partition

Gardez les fichiers intermédiaires pendant les réglages. Avec --dossier-travail, le téléchargement et l'isolation de la batterie sont faits une seule fois. Une relance avec d'autres options prend alors environ une minute :

URL="https://www.youtube.com/watch?v=XXXXXXXXXXX"
.venv/bin/python batterie_partition.py "$URL" --dossier-travail ./travail
.venv/bin/python batterie_partition.py "$URL" --dossier-travail ./travail --sensibilite 1.2 --cymbales ride

Si le tempo est faux (partition deux fois trop rapide ou trop lente), donnez le tempo approximatif avec --tempo. Pour un morceau de studio joué au clic, ajoutez --tempo-fixe.

S'il manque des notes (ghost notes, roulements), montez --sensibilite vers 1.2 ou 1.4. S'il y en a trop (morceau très réverbéré, live), descendez vers 0.8.

Choisissez une bonne source. Une version studio donne un meilleur résultat qu'un live. Une vidéo de « drum cam » ou un playthrough, où la batterie est très présente, est idéale.

Retouchez le .ly. C'est un fichier texte lisible. Une note fausse se corrige dans un éditeur, puis on recompile :

~/.local/opt/lilypond-2.26.0/bin/lilypond "Titre - batterie.ly"

Frescobaldi est un éditeur LilyPond confortable, avec aperçu en direct. Le .midi s'ouvre aussi dans MuseScore, pour un retravail graphique.


Dépannage

HTTP Error 403 ou « Sign in to confirm you're not a bot » au téléchargement
YouTube change souvent ses protections. Mettez yt-dlp à jour :

~/.local/bin/uv pip install --python .venv/bin/python -U "yt-dlp[default]"

Sinon, téléchargez la vidéo par un autre moyen et passez le fichier local au script.

LilyPond introuvable
Relancez ./setup.sh, ou indiquez le chemin avec --lilypond.

Le processus est tué (Killed) pendant l'isolation
La mémoire manque : traitez le morceau en plusieurs extraits avec --debut / --fin.

Aucun coup de batterie détecté
L'extrait ne contient pas de batterie, ou elle est très en retrait. Essayez --source-detection mix et --sensibilite 1.5.

Message Warning: You are sending unauthenticated requests to the HF Hub
Sans conséquence : c'est le téléchargement du modèle d'isolation au premier lancement.


Comment ça marche

vidéo ──yt-dlp──▶ audio WAV ──Demucs──▶ piste batterie isolée
                       │                        │
                       └────────┬───────────────┘
                                ▼
                 ADTOF : détection des coups (5 classes)
                                ▼
          analyse spectrale : quel tom, ride ou crash, charleston ouvert,
                          notes fantômes
                                ▼
         librosa : suivi du tempo ─▶ quantification sur la grille
                                ▼
                 LilyPond : gravure PDF + MIDI
  1. Téléchargement : yt-dlp récupère la meilleure piste audio, convertie en WAV par ffmpeg.
  2. Isolation : Demucs (modèle htdemucs) sépare la batterie du reste du morceau.
  3. Détection : ADTOF, un réseau entraîné sur des milliers de morceaux, repère les coups de grosse caisse, caisse claire, toms, charleston et cymbales. Il analyse à la fois le mixage et la piste isolée.
  4. Affinage : le script précise chaque coup par analyse du spectre.
    • Toms : hauteur de la note, puis regroupement en 10", 12" et 16".
    • Ride ou crash : selon que la cymbale est jouée régulièrement ou en accent isolé.
    • Crash 16" ou 18" : selon la brillance du son.
    • Charleston ouvert : selon la durée de résonance.
    • Notes fantômes : coups de caisse claire nettement plus faibles que les autres.
  5. Mise en grille : librosa suit le tempo, temps par temps (un live peut accélérer). Chaque coup est ensuite placé sur la grille : doubles croches ou triolets, choisis temps par temps.
  6. Gravure : LilyPond produit le PDF et le MIDI.

Limites

  • C'est une transcription automatique : relisez-la en écoutant. ADTOF atteint environ 88 % de F-mesure sur ses cinq classes (grosse caisse, caisse claire, toms, charleston, cymbales).
  • Les finesses viennent d'heuristiques et se trompent plus souvent : choix du tom, ride ou crash, crash 16" ou 18", charleston ouvert, notes fantômes. La distinction ride / crash est la moins fiable ; --cymbales permet de trancher.
  • Ne sont pas détectés : charleston au pied, flas, rimshots, cross-sticks, cloche de ride.
  • La mesure est supposée constante : du 4/4 par défaut, ou la valeur de --mesure. Les changements de mesure en cours de morceau ne sont pas gérés.

Crédits et licences

Le code de ce dépôt est sous licence MIT.

Il s'appuie sur des projets dont les licences sont propres à chacun, en particulier :

  • ADTOF (Mickaël Zehren et al.), via son portage ADTOF-pytorch. Ses modèles sont issus de la recherche : vérifiez leurs conditions avant tout usage commercial.
  • Demucs (Meta AI, MIT).
  • yt-dlp (Unlicense).
  • librosa (ISC).
  • LilyPond (GPL).

Respectez les droits des œuvres que vous transcrivez : les partitions produites sont pour un usage personnel (apprentissage, travail de l'instrument).

About

Transcrit la batterie d'une vidéo YouTube en partition PDF (Demucs + ADTOF + LilyPond), en local sur CPU

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages