レッスンスライドデザイナー
1つのレッスンの内容を、学習に役立つスライドデッキと、ナレーション版のためのビデオスクリプトに変換します。1度に1レッスン、レッスンごとに1フォルダ。
出力先は、ユーザーが別の場所を指定しない限り、slides/<course>/<lesson>/ です。
| ファイル | 説明 |
|---|---|
slides.json | 唯一のソース:すべてのスライドをデータとして保持し、16種類のスライドタイプを使用(references/slide-types.md参照)。これを編集してから再ビルドします。 |
<file_name>.pptx | 16:9のデッキ、Arial、3色テーマ。各スライドのナレーションはスピーカーノートに含まれています。 |
<file_name>.video-script.md | 動画工程のためのファイル:スライドごとに1ブロック。画面テキスト、制作ノート、テキスト読み上げ用のナレーション、秒数、および概要テーブルが含まれます。 |
_preview/slide-NN.png, _preview/contact-sheet.png | すべてのスライドの1920x1080画像とコンタクトシート。視覚的な確認用、および動画のフレームとして使用します。 |
<file_name>.preview.mp4(オプション) | スクリプトのタイミングに合わせた無音のスライドショー、またはスライドごとに音声がある場合はナレーション付き。 |
スクリプトが使用するツール:Python 3.9以上、python-pptx、Pillow、lxml(アイコン用にcairosvg、またはsharp-cli、rsvg-convert、Inkscape)。プレビュー表示用にLibreOfficeとPoppler(pdftoppm)。オプションのプレビュー動画用にffmpeg。アイコンはassets/icons/にあるLucideセット(ISCライセンス)です。
ワークフロー
ステップ0. ソースを読み込み、概要を確定する
- レッスンソースのすべて(目的、対象者、配信方法、分数付きの学習指導案、スクリプト、回答付きの質問、スライドの概要、配布資料)を読みます。ユーザーがタイトルだけを指定した場合は、コンテンツを尋ねるか、先にコンテンツを書きます(関連スキル
lesson-content-writerがこれを正確に行います)。 references/slide-standards.md(ルールとデッキ構成)とreferences/slide-types.md(16のタイプとそのテキスト制限)を読みます。- 以下を確定します:配信方法(セルフペース動画の場合は、各動画が独自のオープン、ボディ、クローズ、および一時停止スライドを持つクラスターとして構成。ライブクラスの場合は、部屋に向けて質問したり、練習を指示するスライドとして構成)。言語(
language、任意の言語が動作。enとviは追加のチェックあり)。テーマ(デフォルトはnavy。コースごとに1テーマ、レッスンごとに再利用)。インストラクターが学習者に呼びかける方法(スクリプトから取得)。フッター用のインストラクター名と連絡先。
ステップ1. デッキを計画する
ソースのスライド概要、またはレッスンの順序から、次の表を作成します:# | タイプ | スライドの1つのアイデア | ビジュアルまたはアイコン | 質問または一時停止 | 動画番号。制約:
- 完全な構造:
title->(レッスンにquestion(挑戦的な導入)がある場合)->objectives->agenda-> 各パートに対してsection(またはcurrent付きのagenda)-> 2~5のコンテンツスライド -> 少なくとも1つのquestion->summary->closing。 - 1スライド1アイデア。 デッキごとに少なくとも4つのスライドタイプ。同じタイプが3つ連続しない。ナレーション10~12分ごとに少なくとも1回の一時停止または質問。
- 感情の弧を計画し、1/3と2/3の地点にリズムブレイカーを配置。タイトルはステートメントとして書き、ラベルにしない(
references/rhythm-and-titles.md参照)。出典がある数字はbig-numbersまたはchartに配置し、箇条書きにはしない。 - 事実、用語、数字、例はレッスンソースからのみ取得する。決して作り出さない。例は学習者自身の作業から取る。
- 動画コース:学習指導案に従い、ソースのすべてのセクション、例、一時停止の質問、練習問題をスライドまたはナレーションでカバーし、計画された分数で
videosを宣言して、スクリプトが薄い動画について警告できるようにする。ソース内のスライド概要は下限であり、上限ではない。100分のレッスンには通常35~60枚のスライドが必要。17スライドのテンプレートは技術的なデモであり、完全なレッスンではない。
ステップ2. slides.jsonを記述する
templates/slides.example.jsonをコピーし、計画に従って記入します。各スライドについて:
- 画面テキストは、24ptで収まるキーワードと短い行(制限は
slide-types.mdの各タイプを参照)。長すぎる場合はスライドを分割する。テキストを縮小してはならない。 narration:レッスンスクリプトから、聴覚用に書き直す(references/narration-and-video-script.md参照)。1呼吸1行。各行の末尾は.,,,?,!で終わる。数字は話し言葉で書く。スライドを逐語読みしない。質問スライドでは「動画を一時停止してください」と言う。notes:制作指示(1つずつ表示、ポイント、丸で囲む、クリップを挿入、「60秒間無音」など)。- 意味に基づいてアイコンを選び(
slide-types.md、セクション4)、コース全体で繰り返し使用する概念には1つのアイコンを維持する。実際の画像(スクリーンショット、製品写真)はslides.jsonの隣に配置し、出典をIMAGE-SOURCES.mdに記録する。ウェブからの画像ダウンロードは事前に確認し、ライセンスを確認する。 - 人間らしく書き、パンフレットのようには書かない(
references/plain-human-voice.md参照)。
ステップ3. ビルドしてチェックする
python scripts/build_slides.py slides/<course>/<lesson>/slides.json
スクリプトはハード違反で停止します:6行を超える、24ptで収まらないテキスト、2語をまとめても修正できない孤立語、不足しているアイコンや画像、未知のタイプ、禁止されているダッシュやAIフレーズ、ナレーションと矛盾するタイマーラベル、ナレーションで読まれない項目。slides.jsonを修正し、エラーが0になるまで再ビルドします。すべての警告も読み(長い行、ナレーション内の数字、同じタイプが3連続、リズムブレイカーなし、薄い動画)、修正するか、その理由をメモします。
python scripts/render_slides.py slides/<course>/<lesson>/<file_name>.pptx
_preview/contact-sheet.pngを見て、次に各slide-NN.pngをフルサイズで、slide-standards.mdのセクション5のチェックリストを使って確認します:テキストのクリッピングや重なり、大きな空白領域、位置ずれ、3分の1のサイズで読めるか、スライドごとに1つの焦点。修正、再ビルド、確認を完全パスするまで繰り返します。最新のレンダリングを見ずに完了と報告してはなりません。
オプションで、ペーシングを確認したり、ドラフト動画を引き渡す場合:
python scripts/preview_video.py slides/<course>/<lesson>/slides.json [--audio <folder with S01.mp3 ...>]
動画プラットフォーム向けの長いレッスン(トピックごとに1動画、10~12分):すべてのスライドにvideo番号を付けて1つのレッスンレベルのslides.jsonを保持し、分割します:
python scripts/split_videos.py slides/<course>/<lesson>/slides.json --build --render
各動画は独自のフォルダとデッキ(タイトルスライド「Video k/N」付き)、独自の目的、ボディ、次の動画につなげるクロージングを取得します。レッスンレベルのファイルを編集し、生成されたファイルは編集しません。
ステップ4. 報告する
ユーザーに次の情報を提供します:デッキ、ビデオスクリプト、コンタクトシートのパス。簡単な概要テーブル(# - タイプ - アイデア - 秒数)。スライド数と推定時間。テーマ。前提条件(呼称、数字とその出典)。残した警告とその理由。コンタクトシートを表示します。
複数のレッスンを連続して行う場合
同じコースフォルダ内の以前のレッスンのテーマ、フッター、呼称、アイコンごとの概念セットを再利用します。titleとclosingスライドはコース全体でレイアウトを同一にし、各クロージングが次のレッスンにつながるようにします。
原則
- 標準は動かない(
slide-standards.md)。その中のコンテンツに創造性が注がれる。スクリプトがゲートキーパーであり、通過するためにチェックを無効にしてはならない。 - スライドは目のため、ナレーションは耳のため。 2つのチャンネルは互いに補完し合い、決して重複しない。
- 学習者は何かをする。 すべてのパートに質問または一時停止があり、デッキは1つの具体的なアクションで終了する。
- タイトルはデフォルトで大文字(
"title_case": "upper")。JSONは記述されたまま保持されるため、ナレーションや字幕に影響はない。大文字は幅を取るため、タイトルは短く保つ。 - 24ptはすべてのものの下限。ラベル、キャプション、出典、フッターも含む。長すぎる場合は、縮小ではなく書き直し。
- 孤立語なし。 タイトル、カード、ステップ、箇条書きの最終行に1語だけがあると、見た目が崩れる。スクリプトは収まる場合に最後の2語をまとめ、収まらない場合は停止する。
- 実行してから引き渡す。 ビルド、レンダリング、確認、測定。決して推測しない。
- スライドタイプを追加するには、
scripts/build_slides.pyにs_<type>メソッドを追加し、KINDSに登録し、slide-types.mdにドキュメント化し、使用する前にテストデッキをビルドする。
リファレンスファイル
references/slide-standards.md- デジタル学習スライドとは何か、10のデザインルールとスクリプトがそれぞれをチェックする方法、デッキ構成、マルチメディア学習の原則、配信前チェックリスト。references/slide-types.md-slides.jsonの形式、テキスト制限付きの16のスライドタイプ、テーマ、動画計画、アイコンリスト。references/narration-and-video-script.md- テキスト読み上げまたは人間の声のためのナレーションルール、制作ノート、画面上のすべての項目の読み上げ、動画制作への引き継ぎ。references/rhythm-and-titles.md- レッスンの感情の弧、1/3と2/3のリズムブレイカー、ステートメントタイトル、オープナー、比較、数字、クロージングのための文型。references/plain-human-voice.md- AIの声を取り除く方法:禁止ダッシュとフレーズ、文のリズム、具体的な詳細、意見。templates/slides.example.json- すべての主要タイプを使用する17スライドのデモレッスン。既にビルドおよびチェック済み。