mcpField
L
lecture-notes

lecture-notes

github.com/emmsixx生産性571 回インストール6 週間前に更新
リポジトリ

lecture-notes について

講義資料を Obsidian 向けの構造化された試験対策 Markdown ノートにまとめるスキルです。音声・動画は先に文字起こしを行い、数式、定義、例、リンクの形式も定めています。

主な機能

  1. 01Obsidian 向け Markdown ノート
  2. 02音声・動画の文字起こしを先に実施
  3. 03OpenRouter 音声文字起こしの手順
  4. 04定義と試験向けコールアウトの構造化
  5. 05異なるトピックを別ファイルに分割

活用シーン

  1. 01講義の録音を試験対策ノートに変換
  2. 02講義の文字起こしとスライドや PDF の併用
  3. 03複数トピックの資料を別ファイルに整理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/emmsixx/skills --skill lecture-notes

インストール後、Claude Code で/lecture-notesを入力して読み込まれたか確認します。

詳細

講義ノートスキル

講義資料を、Obsidian 向けの体系的で試験対策に適した Markdown ノートに変換します。

音声および動画の入力

元の資料が音声ファイルまたは動画ファイルの場合は、必ず最初にローカルで文字起こしを作成し、その文字起こしをノート生成の主な入力として使用してください。

必須のワークフロー
  1. 入力が音声の場合は、OpenRouter と openai/gpt-4o-audio-mini、input_audio 形式を使用して文字起こしを作成します。
  2. 入力が動画の場合は、まず ffmpeg で別の音声ファイルを抽出し、その抽出した音声を OpenRouter で文字起こしします。
  3. 文字起こしをプレーンテキストファイルとしてローカルに保存し、以降の講義ノート作成ワークフローでは、保存した文字起こしを使用します。
  4. 必要に応じて、生の JSON レスポンスもローカルに保存できますが、ノート生成の正規の入力として使用するのは .txt の文字起こしです。
OpenRouter による音声の文字起こし

音声または動画の文字起こしを行う前に、環境で OPENROUTER_API_KEY が定義されていることを確認してください。

マルチモーダルな input_audio を使って、OpenRouter のチャット補完 API を使用します。プロンプトでは、最小限の修正にとどめた逐語的な文字起こしを明示的に依頼してください。

AUDIO_BASE64=$(base64 < "Lecture 05.audio.wav" | tr -d '\n')

curl https://openrouter.ai/api/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -d "{\n    \"model\": \"openai/gpt-4o-audio-mini\",\n    \"messages\": [\n      {\n        \"role\": \"user\",\n        \"content\": [\n          {\n            \"type\": \"text\",\n            \"text\": \"Transcribe this lecture audio as plain text. Keep the wording faithful to the speaker, preserve important structure, and do not summarize.\"\n          },\n          {\n            \"type\": \"input_audio\",\n            \"input_audio\": {\n              \"data\": \"$AUDIO_BASE64\",\n              \"format\": \"wav\"\n            }\n          }\n        ]\n      }\n    ]\n  }"

スキルを実際に使用する際は、まず JSON レスポンスを保存してから、文字起こしをプレーンテキストファイルに抽出してください。

AUDIO_BASE64=$(base64 < "Lecture 05.audio.wav" | tr -d '\n')

curl https://openrouter.ai/api/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -d "{\n    \"model\": \"openai/gpt-4o-audio-mini\",\n    \"messages\": [\n      {\n        \"role\": \"user\",\n        \"content\": [\n          {\n            \"type\": \"text\",\n            \"text\": \"Transcribe this lecture audio as plain text. Keep the wording faithful to the speaker, preserve important structure, and do not summarize. Return only the transcript text.\"\n          },\n          {\n            \"type\": \"input_audio\",\n            \"input_audio\": {\n              \"data\": \"$AUDIO_BASE64\",\n              \"format\": \"wav\"\n            }\n          }\n        ]\n      }\n    ]\n  }" \
  > "Lecture 05.transcript.response.json"

jq -r '.choices[0].message.content // (.choices[0].message.content[]? | select(.type == "text") | .text)' \
  "Lecture 05.transcript.response.json" > "Lecture 05.transcript.txt"
推奨するローカルファイルの出力

Lecture 05.mp4 や Lecture 05.m4a のような入力ファイルの場合は、予測しやすい名前を付けて、派生ファイルを同じ場所に保存します。

  • 動画から抽出した音声、またはアップロード用に正規化した音声には Lecture 05.audio.wav
  • OpenRouter API のレスポンスには Lecture 05.transcript.response.json
  • ノート生成に使用するプレーンテキストの文字起こしには Lecture 05.transcript.txt
動画から音声への抽出

文字起こしの前に、ffmpeg を使って動画から音声を抽出します。安全なデフォルト設定は次のとおりです。

ffmpeg -i "Lecture 05.mp4" -vn -ac 1 -ar 16000 -c:a pcm_s16le "Lecture 05.audio.wav"

元の資料が音声であっても、扱いやすい形式でない場合は、base64 エンコードしてアップロードする前に .wav に正規化してください。

文字起こしの取り扱いルール
  • 生のメディアファイルからではなく、保存済みのローカル文字起こしファイルから必ずノートを作成してください。
  • ユーザーからスライド、PDF、その他の講義資料も提供された場合は、ノート作成時に文字起こしと組み合わせてください。
  • セクションの移行、定義、定理の記述、例、繰り返し示される試験のヒントなど、重要な話の構成を保持してください。
  • 文字起こしが明らかに不明瞭または不完全な場合は、不足した内容を黙って補わず、最終ノートに不確実性を記してください。
  • 同じメディアファイルの文字起こしがすでにローカルに存在する場合、ユーザーから新たな文字起こしを明示的に依頼されない限り、それを再利用してください。

出力形式

すべてのノートをフェンス付きコードブロック内に出力してください。内容が複数の章または独立したトピックにまたがる場合は、ファイルを分けてください。

ファイル名

Chapter X - Title.md または Unit X - Title.md

ドキュメント構成
---
course: [Course name if known]
lecture: [Lecture number/title]
date: [Date if provided]
tags: [relevant, topic, tags]
---

# Title
Brief overview connecting to previous material when applicable.

## Key Concepts
Bulleted summary of the most important takeaways.

## [Content Sections]
Organized by topic from the source material.

## Definitions
New terms introduced in this lecture.

## [Additional Sections as Needed]
Examples, proofs, diagrams, etc.

書式ルール

見出し

見出しの後に空行を入れないでください。内容は次の行から直ちに始めます。

## Section Title
Content starts here directly below the heading.
数式と方程式

LaTeX を $...$(インライン)または $$...$$(ブロック)内で使用します。

The quadratic formula is $x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$.

$$
\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}
$$
脚注

補足情報には Markdown の脚注を使用します。引用は使用しないでください。

This concept was introduced in 1905[^1].

[^1]: Additional context or clarification here.
試験で重要な内容のコールアウト

重要な情報を示すには、Obsidian のコールアウトを使用してください。

> [!important] Exam Alert
> This formula is frequently tested.

> [!note] Remember
> Supplementary context or tips.

> [!example] Worked Example
> Step-by-step demonstration.

> [!warning] Common Mistake
> Students often confuse X with Y.

> [!definition] Term
> Formal definition here.
Wiki リンク

関連する概念へのリンクには [[二重の角括弧]] を使用します。

This relates to [[Chapter 2 - Thermodynamics#Entropy]].

内容に関するガイドライン

網羅性

元の資料に含まれるすべての情報、特に以下の内容を記録してください。

  • 公式と方程式
  • 定義と定理
  • 例と解答付きの問題
  • 図(必要に応じて説明するか、テキスト/ASCII で再現する)
  • 講師が重要だと強調した内容
定義セクション

必ず ## Definitions セクションを含めます。各用語は次の形式にします。

## Definitions
**Term**
Precise definition immediately below.

**Another Term**
Its definition here.
関連項目

可能であれば、以前の講義や関連する概念に言及してください。

## Key Concepts
- Builds on [[Chapter 3 - Kinematics]] by introducing forces
- Extends the velocity equations to include acceleration
例

元の資料に含まれるすべての例を保持してください。例のコールアウトを使って書式を整えます。

> [!example] Finding the Derivative
> Given $f(x) = x^3 + 2x$, find $f'(x)$.
>
> **Solution:**
> $$f'(x) = 3x^2 + 2$$

複数のファイル

ソース資料に複数の独立した章や単元が含まれている場合は、ファイル名を明確にして、それぞれを個別のコードブロックとして出力してください。

```markdown

---
course: Physics 101
...
```
```markdown

---
course: Physics 101
...
```

コメント