Communitygithub.com

ytpiano2sheet

떨어지는 막대 피아노 영상(Synthesia 스타일 유튜브 튜토리얼 또는 로컬 동영상 파일)을 MIDI, 악보(PDF, MusicXML, MuseScore), 오디오로 변환하고, 필요 시 더 작은 키보드에 맞게 조정합니다.

ytpiano2sheet란 무엇인가요?

ytpiano2sheet는 피아노 튜토리얼 영상에서 떨어지는(또는 올라오는) 막대를 정확히 읽어 MIDI 및 악보로 변환하는 전문 도구입니다. 오디오 기반 추출이 아닌 영상의 막대 그래픽을 분석하기 때문에 사실상 완벽에 가까운 정확도를 자랑합니다(테스트 영상에서 990개 중 989개 음표 일치). 유튜브 링크나 로컬 동영상 파일을 입력으로 받아 PDF 악보, MIDI 파일, 오디오(m4a), MusicXML/MuseScore 편집 파일을 생성하며, 88키부터 25키까지 다양한 키보드 레이아웃에 맞게 옥타브 이동을 자동으로 적용합니다. Synthesia 스타일의 떨어지는 막대가 있는 영상에만 동작하며, 일반 촬영 피아노 영상이나 오디오만으로는 사용할 수 없습니다. 사용 전 의존성(uv, MuseScore, fluidsynth, ffmpeg) 확인을 권장하며, 생성된 결과물은 개인 연습 용도로만 사용해야 합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ax3lt/ytpiano2sheet/tree/main

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

ytpiano2sheet은(는) 무엇을 하나요?

ytpiano2sheet.py(이 파일과 같은 폴더에 있음)는 피아노 튜토리얼 영상의 떨어지는 막대를 읽습니다. 이 막대는 피아니스트의 실제 MIDI로부터 그려지기 때문에 오디오를 전사하는 것보다 훨씬 정확합니다. 두 개의 테스트 영상에서 990개 중 989개 음표가 수동 검증 전사와 일치했고, 947개 키 누름 중 947개가 독립적인 판독과 일치했습니다. 키보드 위로 막대가 떨어지거나 올라오는 영상에서만 작동합니다.

전사 결과는 사용자의 개인 연습용입니다. 음악은 해당 작곡가, 편곡가 및 영상 제작자에게 저작권이 있습니다. 사용자를 대신하여 출력물을 업로드, 게시 또는 공유하지 마십시오. 사용자가 요청할 경우 README의 "개인 사용 및 법적 고지" 섹션을 안내해 주십시오.

모든 명령은 uv run <이 폴더>/ytpiano2sheet.py ...로 실행하십시오. uv가 Python 의존성을 자동으로 설치합니다. 아래에서 $BS는 이 폴더의 절대 경로를 의미합니다.

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 <형식들>. 누락된 항목(MuseScore는 pdf/mscz, fluidsynth와 사운드폰트는 오디오, ffmpeg는 m4a)과 각각을 설치하는 명령어를 나열합니다.
  3. 무언가 누락된 경우, 각 항목과 설치 명령어를 명시하여(예: "brew install --cask musescore", "32 MB 사운드폰트를 ~/.cache/ytpiano2sheet에 다운로드") AskUserQuestion으로 설치 여부를 묻습니다. 사용자가 동의하면 3단계 실행에 --install을 추가합니다. 설치에 sudo가 필요한 경우(Linux의 apt-get), 사용자에게 ! 접두사를 붙여 직접 실행하도록 요청하고 다시 확인합니다. 사용자가 거부하면 누락된 도구가 필요한 형식을 제외하고 어떤 형식을 제외했는지 알립니다.

3. 실행

uv run $BS/ytpiano2sheet.py "<링크 또는 파일>" -f <형식들>,review -k <키보드> -o <출력 폴더> [--install]
  • 사용자가 요청하지 않았더라도 항상 review를 추가하십시오: 4단계에 이미지가 필요합니다. 사용자가 요청하지 않은 경우 이후에 review 폴더는 삭제하십시오.
  • 기본 출력 폴더: 사용자가 별도로 지정하지 않으면 사용자 현재 프로젝트의 out/ 폴더. 각 곡은 영상 제목을 딴 폴더 안에 생성됩니다: out/<곡>/<곡>.pdf 등, out/<곡>/review/, 작은 키보드의 경우 <곡> (61 keys).*.
  • 2-3분 영상 기준 약 1분 소요(다운로드 포함). 로그는 찾은 키보드, 막대 속도, 음표 개수, 악보의 추정 조표와 박자를 보고합니다.
  • 선택적 플래그: --meter 3 또는 --meter 4, --key D / --key d(D단조)는 악보의 추정을 재정의합니다. 악보는 오직 3/4 또는 4/4만 추정합니다. 복합 박자(쇼팽 야상곡 Op. 9 No. 2의 12/8, 뱃노래 6/8)나 4/4 곡의 셋잇단음표(월광 소나타)가 너무 많은 3/4 마디로 표시될 경우 --meter 12/8, 6/8 또는 9/8를 전달하십시오. 영상 키보드가 비정상적인 건에서 잘린 경우 --lowest C2(로그에서 추정해야 했을 때 경고). 인트로나 엔드 화면이 리뷰 이미지에서 음표로 나타날 경우 --start / --end(초). 일부 막대(특히 어두운 막대)에 박스가 없을 경우 --threshold N(로그에 기록된 임계값보다 낮게).

"키보드 위로 움직이는 막대를 찾을 수 없습니다" 메시지와 함께 중단되면 영상에 떨어지는 막대가 없는 것입니다(예: 촬영된 피아노). 이 도구로 읽을 수 없다고 사용자에게 알리십시오.

4. 보고 전 확인

Read 도구로 리뷰 이미지 몇 장을 열어보십시오: 첫 번째, 중간쯤, 마지막, 그리고 밀도가 높아 보이는 이미지. 모든 밝은 막대에 음표 이름이 적힌 박스가 있어야 하고, 빈 공간에 박스가 있으면 안 됩니다. 또한 다음을 확인하십시오:

  • 로그의 키보드 라인이 88키 A0-C8 또는 적절한 작은 범위를 가리키는지;
  • 악보의 조표가 음악과 일치하는지(로그 라인 sheet: key ...);
  • PDF의 경우 1페이지가 피아노 악보처럼 보이는지. macOS에서 sips -s format png <pdf> --out page1.png 또는 MuseScore -o page1.png로 변환하여 확인하십시오.

막대가 누락되었거나 잘못된 경우, 숨기지 말고 타임스탬프와 함께 말하십시오. 먼저 플래그를 시도해 보십시오: 악보의 박자나 조표만 잘못된 경우 --meter 또는 --key(MIDI는 변경되지 않음), 로그의 키보드 범위가 잘못된 경우 --lowest.

판독기 자체가 잘못되었고 어떤 플래그도 도움이 되지 않는다면, 자동으로 스크립트를 편집하지 마십시오. 한 영상을 고치는 수정이 다른 영상을 망가뜨릴 수 있으며, 잘못된 결과는 여전히 그럴듯한 악보처럼 보입니다. 무엇이 잘못 보이고 그 이유를 설명한 후, AskUserQuestion으로 로컬 복사본을 패치할지 묻습니다. 사용자가 동의하면:

  1. 편집 전에 변경할 각 스크립트를 곡 폴더에 복사하십시오(ytpiano2sheet.py.orig, sheet.py.orig).
  2. 원인을 해결하는 가장 작은 변경을 하고, 재실행한 후 위의 확인을 다시 수행하십시오. 그런 다음 uv run $BS/test_ytpiano2sheet.py를 실행하십시오. 실패하면 원본을 복원하십시오.
  3. 곡 폴더에 bug-report.md를 작성하십시오: 영상 링크, 잘못된 타임스탬프, 관련 로그 라인, 각 변경사항에 대한 diff -u(원본 대비). 작성자가 참조 영상에 대해 수정을 테스트하고 모두에게 배포할 수 있도록 합니다.
  4. AskUserQuestion으로 해당 보고서를 업스트림에 이슈로 등록할지 묻습니다. 동의한 경우에만, 그리고 gh가 설치되어 로그인된 경우에만: gh issue create --repo <$BS의 git remote get-url origin에서 추출한 소유자/이름> --title "<실패한 영상 스타일에 대한 짧은 설명>" --body-file <곡 폴더>/bug-report.md, 그런 다음 사용자에게 이슈 링크를 알려줍니다. gh가 없거나 $BS가 git 클론이 아닌 경우, 사용자가 직접 게시할 수 있도록 bug-report.md의 위치를 알려줍니다.

5. 보고

작성된 파일, 음표 개수, 사용된 조표와 박자, 키보드 접기에 의해 이동된 음표(로그 라인 keyboard ...: N notes moved), 그리고 4단계에서 이상했던 사항을 나열하십시오. 스크립트가 패치된 경우 명확히 말하고 bug-report.md를 가리키십시오. 간결하게 유지하십시오.

관련 스킬