Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
if: ${{ steps.filter.outputs.py_modified == 'true' }}
uses: actions/setup-python@v2
with:
python-version: 3.10.0
python-version: "3.10"
architecture: x64
cache: 'pip'
- name: Install dependencies
Expand Down
158 changes: 158 additions & 0 deletions course-115/.hackmd-sync.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
{
"api_base": "https://api.hackmd.io/v1",
"token_env": "HACKMD_API_TOKEN",
"materials_root": "weeks",
"manifest_path": "hackmd.book.md",
"book_note_id": "8PS1YcDJSdGJQuwTwuScdg",
"default_permissions": {
"readPermission": "guest",
"writePermission": "owner",
"commentPermission": "disabled"
},
"notes": {
"weeks/W01_課程啟動與多媒體系統.md": {
"note_id": "IpvhLzxDR4O6OPQhEjogxw",
"title": "W01|先拆解,再創作:多媒體系統與 HackMD",
"shortId": "SJG50wvLzl",
"publishLink": "https://hackmd.io/@wiimax/SJG50wvLzl",
"created_from": "weeks/W01_課程啟動與多媒體系統.md",
"last_local_push": 1786375820
},
"weeks/W02_數位影像與像素.md": {
"note_id": "cPhk_js3Q0GoqqvjOCcw7Q",
"title": "W02|一張圖片在電腦裡是什麼?",
"shortId": "HJNm5CvwLzx",
"publishLink": "https://hackmd.io/@wiimax/HJNm5CvwLzx",
"created_from": "weeks/W02_數位影像與像素.md",
"last_local_push": 1786375821
},
"weeks/W03_卷積與影像處理.md": {
"note_id": "i5Ezqm8fTfWnHUfAGol1qQ",
"title": "W03|濾鏡為什麼能找出邊緣?",
"shortId": "S1V45CwPIfg",
"publishLink": "https://hackmd.io/@wiimax/S1V45CwPIfg",
"created_from": "weeks/W03_卷積與影像處理.md",
"last_local_push": 1786375822
},
"weeks/W04_擴散模型原理.md": {
"note_id": "acOyEDr1Q6WiqMPomutPjA",
"title": "W04|AI 如何從雜訊生成圖片?",
"shortId": "SJHqRwvIMx",
"publishLink": "https://hackmd.io/@wiimax/SJHqRwvIMx",
"created_from": "weeks/W04_擴散模型原理.md",
"last_local_push": 1786375822
},
"weeks/W05_潛在擴散與提示控制.md": {
"note_id": "Acqf1hjfQuWLqqHFvhcahw",
"title": "W05|文字如何控制生成影像?",
"shortId": "SkUqAPv8Me",
"publishLink": "https://hackmd.io/@wiimax/SkUqAPv8Me",
"created_from": "weeks/W05_潛在擴散與提示控制.md",
"last_local_push": 1786375823
},
"weeks/W06_LoRA與影像微調.md": {
"note_id": "JhvO9LwVQqKOS7u77jvFSw",
"title": "W06|影像微調到底改了什麼?",
"shortId": "BkHL9RPv8Ge",
"publishLink": "https://hackmd.io/@wiimax/BkHL9RPv8Ge",
"created_from": "weeks/W06_LoRA與影像微調.md",
"last_local_push": 1786375824
},
"weeks/W07_生成影像工作室.md": {
"note_id": "5OZp57CNRFiIO-0d3ywEkg",
"title": "W07|生成影像工作室:一致性比單張漂亮更重要",
"shortId": "r1wcCwwUfl",
"publishLink": "https://hackmd.io/@wiimax/r1wcCwwUfl",
"created_from": "weeks/W07_生成影像工作室.md",
"last_local_push": 1786375825
},
"weeks/W08_期中影像展與技術答辯.md": {
"note_id": "e9hggKDASSaGlDJGA8s6kQ",
"title": "W08|期中影像展:把「我覺得好看」變成可說明的技術判斷",
"shortId": "r1uqCvwIfx",
"publishLink": "https://hackmd.io/@wiimax/r1uqCvwIfx",
"created_from": "weeks/W08_期中影像展與技術答辯.md",
"last_local_push": 1786375826
},
"weeks/W09_期中考週.md": {
"note_id": "sKMpUAl0St-eotC-F6WtdA",
"title": "W09|期中考週:不授新課",
"shortId": "HyFcRPvLzx",
"publishLink": "https://hackmd.io/@wiimax/HyFcRPvLzx",
"created_from": "weeks/W09_期中考週.md",
"last_local_push": 1786375826
},
"weeks/W10_數位聲音與頻譜.md": {
"note_id": "-MOYCr5MR42TVJo2cS8Z-Q",
"title": "W10|聲音如何變成可以運算的數字?",
"shortId": "S1qcRvP8Mg",
"publishLink": "https://hackmd.io/@wiimax/S1qcRvP8Mg",
"created_from": "weeks/W10_數位聲音與頻譜.md",
"last_local_push": 1786375827
},
"weeks/W11_聲音剪輯與訊號處理.md": {
"note_id": "HeMA4-uFTRepSHzwjg508A",
"title": "W11|剪輯聲音時,實際改變了什麼?",
"shortId": "ry59CDwUGg",
"publishLink": "https://hackmd.io/@wiimax/ry59CDwUGg",
"created_from": "weeks/W11_聲音剪輯與訊號處理.md",
"last_local_push": 1786375828
},
"weeks/W12_語音合成與深偽辨識.md": {
"note_id": "7xe8MLQjRjaqcjTGn_uZ7g",
"title": "W12|聲音深偽如何生成,又如何辨識風險?",
"shortId": "SyEj9AwPUfx",
"publishLink": "https://hackmd.io/@wiimax/SyEj9AwPUfx",
"created_from": "weeks/W12_語音合成與深偽辨識.md",
"last_local_push": 1786375828
},
"weeks/W13_短影音腳本與數位影片.md": {
"note_id": "b2Im7ebKTDKH8ojQvcQNTQ",
"title": "W13|短影音不是把素材排在一起而已嗎?",
"shortId": "Bk39CDwUMg",
"publishLink": "https://hackmd.io/@wiimax/Bk39CDwUMg",
"created_from": "weeks/W13_短影音腳本與數位影片.md",
"last_local_push": 1786375829
},
"weeks/W14_生成內容與素材溯源.md": {
"note_id": "ZpTR4OlhQAWWjYH-KK7geA",
"title": "W14|如何建立可追溯的多媒體素材庫?",
"shortId": "Bk2qADw8fg",
"publishLink": "https://hackmd.io/@wiimax/Bk2qADw8fg",
"created_from": "weeks/W14_生成內容與素材溯源.md",
"last_local_push": 1786375830
},
"weeks/W15_FFmpeg與短影音合成.md": {
"note_id": "TOgQVBQBRz6LIEatAAoItQ",
"title": "W15|影片如何被合成與壓縮?",
"shortId": "BkEpq0wPUGx",
"publishLink": "https://hackmd.io/@wiimax/BkEpq0wPUGx",
"created_from": "weeks/W15_FFmpeg與短影音合成.md",
"last_local_push": 1786375830
},
"weeks/W16_進度小報告與系統測試.md": {
"note_id": "3k08HgBySd6T0gi2nPsGSA",
"title": "W16|進度小報告:作品是否已經成為一個系統?",
"shortId": "SJRqCPDIzl",
"publishLink": "https://hackmd.io/@wiimax/SJRqCPDIzl",
"created_from": "weeks/W16_進度小報告與系統測試.md",
"last_local_push": 1786375831
},
"weeks/W17_期末成果發表A.md": {
"note_id": "W5udh8xkSeWP451yfNfOiA",
"title": "W17|期末成果發表 A",
"shortId": "Sy09APPUzx",
"publishLink": "https://hackmd.io/@wiimax/Sy09APPUzx",
"created_from": "weeks/W17_期末成果發表A.md",
"last_local_push": 1786375832
},
"weeks/W18_期末成果發表B與封存.md": {
"note_id": "EvnBXWrZSrCveEPIMek-IQ",
"title": "W18|期末成果發表 B:把作品留下來,也把判斷留下來",
"shortId": "BkkiCwwLfe",
"publishLink": "https://hackmd.io/@wiimax/BkkiCwwLfe",
"created_from": "weeks/W18_期末成果發表B與封存.md",
"last_local_push": 1786375833
}
}
}
29 changes: 29 additions & 0 deletions course-115/COURSE_HOME.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 多媒體系統 115|課程教材中心

本資料夾是日間部與進修部共用的新版教材來源。課程主軸不是介紹雲端平台,而是理解多媒體系統背後的資料、演算法與製作管線,並用 AI 協作完成一支短影音作品。

## 課程入口

- 日間部:[Thu 多媒體系統115(日)資工一](https://hackmd.io/@wiimax/SJemnYy8fg)
- 進修部:[Sat 多媒體系統115(夜)資工一](https://hackmd.io/@wiimax/ryNWHeqSzg)
- 程式參考:[MediaSystem-Python-Course](https://github.com/willismax/MediaSystem-Python-Course)

## 資料夾

- `weeks/`:W01–W18 學生版 HackMD 講義。
- `labs/`:CPU 與 Colab 可執行的程式實驗。
- `assets/`:以 ChatGPT Image 產生的教學圖像與授權紀錄。
- `slides/`:每週 16:9 PPTX 與預覽圖。
- `notebooklm/`:NotebookLM 來源清單、產物資訊與匯出檔。
- `templates/`:AI 使用紀錄、素材資料卡、同意紀錄與評量規準。

## 使用原則

1. 兩班共用同一份正文,班級首頁只維護日期、公告與期限。
2. 講義內的「日間引導」與「進修挑戰」不是能力標籤,而是不同的時間配置與任務支架。
3. 每個必做實驗都有 CPU 路徑;Colab GPU 與商業服務只能是選配。
4. GitHub 保存可版本控制的來源;HackMD 作為學生閱讀與課堂互動入口。
5. 每次使用 AI,都要留下提示、參數、採用/拒絕理由與驗證方式。

完整進度與評量請見 [共同課綱](common-syllabus-2026.md)。

37 changes: 37 additions & 0 deletions course-115/DELIVERY_INDEX.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# 多媒體系統 115|交付索引

## 線上入口

- 日間部首頁:<https://hackmd.io/@wiimax/SJemnYy8fg>
- 進修部首頁:<https://hackmd.io/@wiimax/ryNWHeqSzg>
- W01–W18 HackMD 總目錄:<https://hackmd.io/@wiimax/SJ3AAwP8zl>
- GitHub 教材分支:<https://github.com/willismax/MediaSystem-Python-Course/tree/course-115-complete-materials/course-115>

兩班首頁都已保留原內容,並在末端加入同一個共用教材區塊。

## 本機交付

| 類型 | 位置 | 數量/說明 |
|---|---|---|
| 學生講義 | `weeks/` | W01–W18,共 18 份 Markdown |
| 每週簡報 | `slides/` | W01–W18,共 18 份 PPTX |
| CPU 程式 | `labs/` | 影像、擴散、聲音、短影音共 6 份 |
| Colab | `colab/` | 對應 6 份 Notebook |
| ChatGPT 生成圖 | `assets/diagrams/` | 7 張原始生成構圖、15 個課程引用檔名 |
| NotebookLM | `notebooklm/` | 來源清單、study guide、21 頁官方總覽 PPTX |
| 評量與紀錄 | `templates/` | 素材表、同意紀錄、期末規準、AI 使用紀錄 |

## 已確認的週次安排

- W08:期中影像作品與技術答辯。
- W09:期中考週,不授新課。
- W16:Rough cut、架構圖與三類測試的小型進度發表。
- W17–W18:期末成果發表、個人口頭問答與專題封存。

## 產製與驗證

- 18 份週簡報以 16:9 版面產生,已由本機 PowerPoint 全數開啟、匯出並檢查縮圖。
- Python 腳本已通過 `compileall`;6 份 Colab Notebook 由相同程式來源建立。
- HackMD 先以 dry-run 確認 18 份皆為新筆記,再執行上傳;同步設定不含 API Token。
- 圖像生成紀錄見 `assets/GENERATED_IMAGES.md`;精確公式與技術限制仍以講義文字為準。

21 changes: 21 additions & 0 deletions course-115/assets/GENERATED_IMAGES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# 教學圖像生成紀錄

本資料夾內的教學圖像於 2026-08-10 透過 Codex 內建的 ChatGPT 圖像生成工具建立。原始提示要求 16:9、深色高對比、技術流程可視化、無品牌與無真人。精確名詞、公式與限制以每週講義文字為準,圖像只作概念導引。

| 原始生成檔 | 教材用途 | 對應檔案 |
|---|---|---|
| `exec-5126dceb-9f90-4086-bb13-87e8668265a4.png` | 課程四階段總覽 | `course-map.png` |
| `exec-d3d905d5-5a9f-4db7-a0c9-7176f4c5a55a.png` | 像素、RGB 通道與卷積 | `pixel-rgb.png`、`convolution.png` |
| `exec-3e707e11-6f51-40cb-9577-6d20f8d4661b.png` | DDPM 前向加噪與反向去噪 | `diffusion-process.png` |
| `exec-a4ee4592-e86d-4814-a27a-fae2f4e0306d.png` | 潛在擴散與 LoRA 低秩更新 | `latent-diffusion.png`、`lora.png` |
| `exec-17fc1d5e-e44d-4e37-8713-96e317e085e2.png` | 影像一致性、版本篩選與展示 | `image-story-workflow.png`、`image-showcase.png` |
| `exec-1296837f-218b-41a0-8308-bbafc8155b10.png` | 取樣、STFT 與聲音處理 | `audio-sampling-stft.png`、`audio-editing.png` |
| `exec-713fa584-f5c2-4283-bd2e-f0be73bd5ffd.png` | TTS、聲紋條件、揭露與多證據查證 | `voice-synthesis-safety.png` |
| `exec-1603904a-4343-402e-aebc-c3b4b0134d03.png` | 分鏡、素材溯源、時間軸、GOP 與編碼輸出 | `short-video-storyboard.png`、`media-provenance.png`、`video-codec-gop.png`、`final-project-pipeline.png` |

## 使用提醒

- 圖中數字是流程順序,不是固定參數。
- 生成圖可能為了可視性簡化比例與連線,不能取代論文架構或實際程式輸出。
- 課堂引用圖片時,請保留生成內容揭露;不要把示意畫面當成真實量測結果。

Binary file added course-115/assets/diagrams/audio-editing.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added course-115/assets/diagrams/convolution.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added course-115/assets/diagrams/course-map.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added course-115/assets/diagrams/image-showcase.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added course-115/assets/diagrams/latent-diffusion.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added course-115/assets/diagrams/lora.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added course-115/assets/diagrams/media-provenance.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added course-115/assets/diagrams/pixel-rgb.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added course-115/assets/diagrams/video-codec-gop.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
73 changes: 73 additions & 0 deletions course-115/colab/W02_Image_Basics.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# W02 Image Basics\n",
"請先上傳講義指定的輸入素材,再依序執行。CPU 可完成;Colab GPU 非必要。\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"!pip -q install Pillow numpy opencv-python-headless matplotlib librosa soundfile moviepy"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\"\"\"W02:觀察像素、格式與 JPEG 品質。CPU 可執行。\"\"\"\n",
"\n",
"from pathlib import Path\n",
"from PIL import Image\n",
"\n",
"\n",
"def main() -> None:\n",
" source = Path(\"input.jpg\")\n",
" output = Path(\"output_w02\")\n",
" output.mkdir(exist_ok=True)\n",
" if not source.exists():\n",
" raise FileNotFoundError(\"請把測試圖片命名為 input.jpg,放在目前資料夾。\")\n",
"\n",
" image = Image.open(source)\n",
" rgb = image.convert(\"RGB\")\n",
" print(f\"格式:{image.format}|模式:{image.mode}|尺寸:{image.size}\")\n",
" print(f\"左上角 RGB:{rgb.getpixel((0, 0))}\")\n",
"\n",
" rgb.save(output / \"image.png\")\n",
" for quality in (95, 70, 40):\n",
" rgb.save(output / f\"image_q{quality}.jpg\", quality=quality, optimize=True)\n",
"\n",
" for path in sorted(output.iterdir()):\n",
" print(f\"{path.name:18s} {path.stat().st_size / 1024:8.1f} KiB\")\n",
"\n",
"\n",
"if __name__ == \"__main__\":\n",
" main()\n",
"\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Loading
Loading