O que ytpiano2sheet faz?
ytpiano2sheet.py (ao lado deste arquivo) lê as barras caindo de um vídeo tutorial de piano. As barras são desenhadas a partir do MIDI do próprio pianista, portanto isso é muito mais exato do que transcrever o áudio: em dois vídeos de teste, correspondeu a uma transcrição verificada manualmente em 989 de 990 notas e a uma leitura independente das teclas pressionadas em 947 de 947. Funciona apenas em vídeos que mostram barras caindo sobre (ou subindo de) um teclado.
As transcrições são para a prática pessoal do usuário: a música pertence a seus compositores, arranjadores e criadores de vídeo. Não faça upload, publique ou compartilhe as saídas em nome do usuário; se ele pedir, aponte-o para a seção "Uso pessoal e notas legais" do README.
Execute tudo com uv run <pasta_atual>/ytpiano2sheet.py ...; o uv instala as dependências Python por conta própria. Abaixo, $BS significa o caminho absoluto desta pasta.
1. Pergunte primeiro
Se o usuário não forneceu um link ou arquivo de vídeo, peça-o em texto simples.
Em seguida, faça ambas as perguntas em uma única chamada AskUserQuestion (pule a pergunta que o usuário já respondeu):
- "Quais saídas você deseja?" (multiSelect: true)
- "Partitura em PDF" (formato
pdf) - "Arquivo MIDI" (formato
mid) - "Áudio para ouvir (m4a)" (formato
m4a) - "Arquivo MusicXML + MuseScore" (formatos
musicxml,mscz, para editar a partitura) "Outro" pode nomearwavoureview(imagens das barras com as notas detectadas).
- "Partitura em PDF" (formato
- "Em qual teclado você vai tocar?"
- "88 teclas, piano completo (Recomendado)" (
88) - "76 teclas" (
76) - "61 teclas" (
61) - "49 teclas" (
49) "Outro" pode ser outro tamanho (73, 37, 32, 25) ou um intervalo comoC2-C7(o Dó central é C4). Notas fora do teclado são movidas por oitavas inteiras, então a harmonia permanece a mesma.
- "88 teclas, piano completo (Recomendado)" (
2. Pré-requisitos
uv --version. Se o uv estiver faltando, pergunte antes de instalá-lo (brew install uvoucurl -LsSf https://astral.sh/uv/install.sh | sh).uv run $BS/ytpiano2sheet.py --check --formats <formatos>. Ele lista o que está faltando (MuseScore para pdf/mscz, fluidsynth e um soundfont para áudio, ffmpeg para m4a) e o comando que instala cada um.- Se algo estiver faltando, pergunte com AskUserQuestion se deseja instalá-lo, nomeando cada item e seu comando (por exemplo "brew install --cask musescore", "baixar um soundfont de 32 MB para ~/.cache/ytpiano2sheet"). Se a resposta for sim, adicione
--installà execução na etapa 3. Se uma instalação precisar de sudo (apt-get no Linux), peça ao usuário para executar esse comando ele mesmo com o prefixo!e verifique novamente. Se a resposta for não, remova os formatos que dependem das ferramentas faltantes e informe quais foram removidos.
3. Execução
uv run $BS/ytpiano2sheet.py "<link ou arquivo>" -f <formatos>,review -k <teclado> -o <pasta de saída> [--install]
- Sempre adicione
review, mesmo que o usuário não tenha solicitado: você precisa das imagens para a etapa 4. Exclua a pastareviewdepois, a menos que o usuário a tenha solicitado. - Pasta de saída padrão: uma pasta
out/no projeto atual do usuário, a menos que ele especifique outra. Cada música recebe sua própria pasta dentro dela, nomeada conforme o título do vídeo:out/<música>/<música>.pdfe assim por diante,out/<música>/review/, e<música> (61 teclas).*para teclados menores. - Leva cerca de um minuto para um vídeo de 2-3 minutos (incluindo download). O log informa o teclado encontrado, a velocidade das barras, a contagem de notas e, para a partitura, o tom e o compasso adivinhados.
- Flags opcionais:
--meter 3ou--meter 4e--key D/--key d(Ré menor) substituem os palpites da partitura. A partitura adivinha apenas 3/4 ou 4/4: quando você sabe que a peça está em compasso composto (Noturno Op. 9 No. 2 de Chopin em 12/8, uma barcarola em 6/8), ou as tercinas de uma peça em 4/4 (Moonlight Sonata) fazem a partitura gerar compassos demais em 3/4, passe--meter 12/8,6/8ou9/8;--lowest C2quando o teclado do vídeo está cortado em uma tecla incomum (o log avisa quando teve que adivinhar);--start/--end(segundos) quando uma introdução ou tela final ainda se transforma em notas nas imagens de revisão;--threshold N(abaixo do limite registrado) quando algumas barras, geralmente escuras, não têm caixa.
Se parar com "could not find moving bars above the keyboard", o vídeo não tem barras caindo (um piano filmado, por exemplo). Informe ao usuário que esta ferramenta não pode lê-lo.
4. Verifique antes de relatar
Abra algumas imagens de revisão com a ferramenta Read: a primeira, uma do meio, a última e quaisquer que pareçam densas. Cada barra brilhante deve conter uma caixa com o nome da nota, e nenhuma caixa deve estar sobre espaço vazio. Verifique também:
- que a linha do teclado no log diz 88 teclas A0-C8, ou um intervalo menor sensato;
- que o tom da partitura corresponde à música (a linha do log
sheet: key ...); - para um PDF, a página 1 parece música para piano. Converta com
sips -s format png <pdf> --out page1.pngno macOS, ou MuseScore-o page1.png, e visualize.
Se barras estiverem faltando ou incorretas, informe com timestamps em vez de esconder. Tente as flags primeiro: --meter ou --key quando apenas o compasso ou tom da partitura parecer errado (o MIDI não muda), --lowest quando o intervalo do teclado no log estiver incorreto.
Se o leitor em si estiver errado e nenhuma flag ajudar, não edite os scripts silenciosamente. Uma correção que faz um vídeo funcionar pode quebrar outros, e o resultado quebrado ainda parece música plausível. Explique o que parece errado e por quê, e pergunte com AskUserQuestion se deseja corrigir a cópia local. Se o usuário concordar:
- Antes de editar, copie cada script que você alterará para a pasta da música (
ytpiano2sheet.py.orig,sheet.py.orig). - Faça a menor alteração que corrija a causa, reexecute e refaça as verificações acima. Em seguida, execute
uv run $BS/test_ytpiano2sheet.py; se falhar, restaure os originais. - Escreva
bug-report.mdna pasta da música: o link do vídeo, os timestamps que estavam errados, as linhas relevantes do log ediff -ude cada alteração contra seu.orig, para que o autor possa testar a correção nos vídeos de referência e distribuí-la a todos. - Pergunte com AskUserQuestion se deseja abrir uma issue upstream com esse relatório. Apenas se a resposta for sim, e apenas se
ghestiver instalado e logado:gh issue create --repo <proprietário/nome de git -C $BS remote get-url origin> --title "<descrição curta do estilo de vídeo que falhou>" --body-file <pasta da música>/bug-report.mde forneça ao usuário o link da issue. Semgh, ou se$BSnão for um clone git, informe ao usuário onde está obug-report.mdpara que ele possa postá-lo manualmente.
5. Relatório
Liste os arquivos gravados, a contagem de notas, o tom e compasso usados, quaisquer notas movidas pela adaptação do teclado (a linha do log keyboard ...: N notas movidas) e qualquer coisa da etapa 4 que parecesse estranha. Se os scripts foram corrigidos, diga isso claramente e aponte para bug-report.md. Mantenha curto.