Communitygithub.com

ytpiano2sheet

落下バー方式のピアノ動画(Synthesia風YouTubeチュートリアルやローカル動画)をMIDI、楽譜(PDF、MusicXML、MuseScore)、オーディオに変換し、必要に応じて小さな鍵盤に折り返します。

ytpiano2sheet とは?

ytpiano2sheetは、Synthesiaスタイルのピアノチュートリアル動画に表示される落下(または上昇)バーを読み取り、MIDI、楽譜(PDF、MusicXML、MuseScore)、オーディオ(m4a)に変換するAIエージェントスキルです。このツールはピアニストの元MIDIから描画されたバーを解析するため、音声認識よりもはるかに高精度で、テストでは990音中989音、947音中947音が手作業検証と一致しました。対応プラットフォームはClaude CodeやCursorなど、`uv run`でPythonスクリプトを実行できる環境です。ユーザーが「このピアノ動画を楽譜にして」「SynthesiaからMIDIに」「61鍵用に変換して」などのフレーズを発言したときに動作し、出力形式やキーボードサイズを指定できます。ただし、撮影された実際のピアノ演奏や音声のみのファイルには使用できません。また、生成された楽譜やMIDIはユーザーの個人練習用であり、著作権に配慮して公開・共有を禁止する注意事項があります。

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ytpiano2sheet は何をしますか?

ytpiano2sheet.py(このファイルと同じフォルダ内)は、ピアノチュートリアル動画の落下バーを読み取ります。バーはピアニスト自身のMIDIから描画されているため、音声を採譜するよりもはるかに正確です。テストでは、2本の動画で990音中989音、および947音中947音が手動検証と一致しました。このツールは鍵盤上に落下(または上昇)するバーが表示されている動画でのみ動作します。

採譜結果はユーザー自身の練習用です。音楽の著作権は作曲家、編曲者、動画制作者に帰属します。出力をユーザーに代わってアップロード、公開、共有しないでください。もしユーザーがそのような要求をした場合は、READMEの「個人利用と法的注意事項」セクションを参照するよう案内してください。

すべてのコマンドは uv run <このフォルダ>/ytpiano2sheet.py ... で実行します。uvはPythonの依存関係を自動でインストールします。以下、$BSはこのフォルダの絶対パスを表します。

1. まず質問する

ユーザーがリンクや動画ファイルを指定していない場合は、平文でそれを尋ねてください。

その後、次の2つの質問を1回のAskUserQuestion呼び出しで行ってください(ユーザーがすでに回答済みの質問はスキップします)。

  1. 「どの出力が必要ですか?」(multiSelect: true)
    • 「PDF楽譜」(形式 pdf)
    • 「MIDIファイル」(形式 mid)
    • 「聴くためのオーディオ(m4a)」(形式 m4a)
    • 「MusicXML + MuseScoreファイル」(形式 musicxml,mscz、楽譜編集用) 「その他」では wav または review(検出された音符とともにバーの画像)を指定できます。
  2. 「どの鍵盤で演奏しますか?」
    • 「88鍵、フルピアノ(推奨)」(88)
    • 「76鍵」(76)
    • 「61鍵」(61)
    • 「49鍵」(49) 「その他」では他のサイズ(73、37、32、25)や範囲(例:C2-C7、中央ドはC4)を指定できます。鍵盤の外の音はオクターブ単位で移動するため、ハーモニーは変わりません。

2. 前提条件

  1. uv --version。uvがない場合は、インストールの可否を尋ねてください(brew install uv、または curl -LsSf https://astral.sh/uv/install.sh | sh)。
  2. uv run $BS/ytpiano2sheet.py --check --formats <formats>。不足しているもの(pdf/mscz用のMuseScore、オーディオ用のfluidsynthとサウンドフォント、m4a用のffmpeg)と、それぞれをインストールするコマンドを表示します。
  3. 何か不足している場合は、各項目とそのコマンドを指定して(例:「brew install --cask musescore」、「32MBのサウンドフォントを ~/.cache/ytpiano2sheet にダウンロード」)、AskUserQuestionでインストールするかどうかを尋ねてください。ユーザーが「はい」と答えた場合は、ステップ3の実行に --install を追加します。インストールにsudoが必要な場合(Linuxのapt-get)は、ユーザーに ! プレフィックス付きでそのコマンドを実行してもらい、再確認してください。ユーザーが「いいえ」と答えた場合は、不足しているツールを必要とする形式を除外し、除外した形式を伝えてください。

3. 実行

uv run $BS/ytpiano2sheet.py "<リンクまたはファイル>" -f <formats>,review -k <keyboard> -o <出力フォルダ> [--install]
  • ユーザーが要求していなくても、必ず review を追加してください。ステップ4で画像が必要です。ユーザーが要求しない限り、後で review フォルダは削除してください。
  • デフォルトの出力フォルダは、ユーザーの現在のプロジェクト内の out/ フォルダです(ユーザーが別の場所を指定しない限り)。各曲には動画のタイトルにちなんだ個別のフォルダが作成されます:out/<曲名>/<曲名>.pdf など、out/<曲名>/review/、および小さい鍵盤用には <曲名> (61 keys).*。
  • 2〜3分の動画で約1分かかります(ダウンロード時間を含む)。ログには、検出された鍵盤、バーの速度、音符数、楽譜の推定調性と拍子が報告されます。
  • オプションフラグ:--meter 3 や --meter 4、--key D / --key d(ニ短調)で楽譜の推定を上書きできます。楽譜は3/4または4/4のみを推定します。複合拍子の曲(ショパンの夜想曲 Op. 9 No. 2 12/8、バルカローレ 6/8)や、4/4の曲で3連符が多い場合(月光ソナタ)に楽譜が3/4の小節を過剰に生成する場合は、--meter 12/8、6/8、9/8 を指定してください。動画の鍵盤が通常と異なるキーで切れている場合(ログが推定したときに警告を出します)は --lowest C2 を、イントロやエンド画面がまだ音符として検出される場合は --start / --end(秒)を、一部のバー(特に暗いもの)にボックスがない場合は --threshold N(ログに記録されたしきい値未満)を指定してください。

「鍵盤の上に動くバーが見つかりませんでした」というエラーで停止した場合、動画には落下バーがありません(撮影されたピアノなど)。このツールでは読み取れないことをユーザーに伝えてください。

4. 報告前の確認

Readツールで数枚のレビュー画像を開いてください:最初の画像、中間の1枚、最後の画像、そして密集しているように見えるもの。明るいバーにはすべて音符名の付いたボックスが表示され、空のスペースにボックスが配置されていないことを確認してください。また、以下も確認してください:

  • ログの鍵盤行に88鍵 A0-C8、または適切な小さい範囲が表示されていること。
  • 楽譜の調性が音楽と一致していること(ログ行 sheet: key ...)。
  • PDFの場合、1ページ目がピアノ楽譜のように見えること。macOSでは sips -s format png <pdf> --out page1.png で変換するか、MuseScoreで -o page1.png として表示してください。

バーが欠落している、または誤っている場合は、非表示にせずにタイムスタンプ付きでその旨を伝えてください。まずはフラグを試してください:楽譜の拍子や調性だけが間違っている場合(MIDIは変わりません)は --meter や --key、ログの鍵盤範囲がずれている場合は --lowest を試してください。

読み取り自体が間違っていて、どのフラグも役に立たない場合は、スクリプトを黙って編集しないでください。1つの動画を修正しても他の動画が壊れる可能性があり、壊れた結果でもそれらしい楽譜に見えてしまいます。何がどのように間違っているかを説明し、AskUserQuestionでローカルコピーにパッチを当てるかどうかを尋ねてください。ユーザーが同意した場合:

  1. 編集前に、変更する各スクリプトを曲のフォルダにコピーしてください(ytpiano2sheet.py.orig、sheet.py.orig)。
  2. 原因を修正する最小限の変更を行い、再実行して上記の確認をやり直してください。その後、uv run $BS/test_ytpiano2sheet.py を実行し、失敗した場合はオリジナルを戻してください。
  3. 曲のフォルダに bug-report.md を作成してください:動画リンク、誤っていたタイムスタンプ、関連するログ行、および各変更とその .orig との diff -u。これにより、作者が修正を参照動画でテストし、全ユーザーに提供できるようになります。
  4. AskUserQuestionで、その報告を上流にIssueとして提出するかどうかを尋ねてください。「はい」の場合のみ、かつ gh がインストールされログインしている場合に限り:gh issue create --repo <git -C $BS remote get-url origin から取得した所有者/リポジトリ名> --title "<失敗した動画スタイルの短い説明>" --body-file <曲フォルダ>/bug-report.md を実行し、ユーザーにIssueリンクを提供してください。gh がない場合、または$BSがgitクローンでない場合は、ユーザーが自分で投稿できるように bug-report.md の場所を伝えてください。

5. 報告

書き出されたファイル、音符数、使用した調性と拍子、鍵盤折り返しによって移動された音符(ログ行 keyboard ...: N notes moved)、およびステップ4で問題があった点をリストアップしてください。スクリプトにパッチを当てた場合は、その旨を明確に述べ、bug-report.md を参照するよう伝えてください。簡潔にまとめてください。

関連スキル