從研討會影片中擷取投影片
scripts/ 中有兩種形式的工具,功能相同:
| 腳本 | 適用平台 |
|---|---|
scripts/extract_slides.sh | Linux、macOS、Windows 上的 Git Bash 或 WSL |
scripts/extract_slides.ps1 | Windows PowerShell,不需要 bash |
scripts/slides.tex | Beamer 模板,腳本會將其複製到幀圖所在目錄 |
運作方式:yt-dlp 僅下載影片串流(無音訊,最多 1080p)。ffmpeg 以每秒 1 幀的速度取樣,保留第一幀以及每次場景變化分數超過閾值的幀,因此每個保留的幀即代表一張新投影片或一個新的建置步驟。showinfo 日誌會記錄每幀的影片時間。輸出目錄中包含:
slide_001.png、slide_002.png、…:每次投影片變化對應一個 PNG 檔案timestamps.txt:每張投影片的影片時間(秒)frame_list.tex和slides.tex:執行pdflatex slides.tex即可產生每張投影片一頁,並在其下方顯示h:mm:ss時間。
步驟
-
檢查工具。 執行
ffmpeg -version和yt-dlp --version。若有遺漏,請安裝(見下方)或告知使用者如何安裝。若是處理本機檔案,則無需 yt-dlp。 -
根據平台選擇腳本。 在 Windows 上,除非使用者明確在 Git Bash 或 WSL 環境中,否則使用 PowerShell 腳本。
-
執行腳本,使用使用者提供的 URL 或檔案,並輸出到以演講名稱命名的資料夾(例如
-o speaker_topic_frames),不要放在技能資料夾內。bash scripts/extract_slides.sh -u "https://www.youtube.com/watch?v=ID" -o talk_frames bash scripts/extract_slides.sh -i "recording.mp4" -o talk_framespowershell -ExecutionPolicy Bypass -File scripts\extract_slides.ps1 -Url "https://www.youtube.com/watch?v=ID" -OutDir talk_frames powershell -ExecutionPolicy Bypass -File scripts\extract_slides.ps1 -InputFile "C:\path\to\recording.mp4" -OutDir talk_frames-ExecutionPolicy Bypass可繞過 Windows 對腳本的預設封鎖,僅在該次執行有效。 -
檢查幀圖後再回報。開啟幾張 PNG(第一張、中間、最後一張),檢查:
- 投影片旁有網路攝影機或講者畫面: 講者的動作會觸發假的投影片變化。請在一張幀圖中找出投影片區域,然後使用裁切參數重新執行,例如
-c W:H:X:Y/-Crop W:H:X:Y(ffmpeg 裁切語法:寬度、高度、左上角座標)。 - 幀圖太少(遺漏建置步驟或細微變化):使用較低的閾值重新執行,例如
-t 0.05/-Threshold 0.05。 - 幀圖太多(影片、動畫、攝影機雜訊):將閾值調高至
0.2-0.3,或進行裁切。 - 重複幀: 刪除多餘的 PNG 及其在
frame_list.tex中的對應行。
- 投影片旁有網路攝影機或講者畫面: 講者的動作會觸發假的投影片變化。請在一張幀圖中找出投影片區域,然後使用裁切參數重新執行,例如
-
產生 PDF(如果使用者需要):切換到輸出目錄,執行
pdflatex slides.tex(或latexmk -pdf slides.tex)。 -
回報幀圖數量、輸出目錄、PDF 檔案,以及任何需要使用者處理的事項,例如您刻意保留的重複幀。
選項
| bash | PowerShell | 說明 | 預設值 |
|---|---|---|---|
-u URL | -Url URL | 要下載的影片(任何 yt-dlp 支援的網站) | |
-i FILE | -InputFile FILE | 本機影片,取代下載 | |
-o DIR | -OutDir DIR | 輸出目錄 | video_frames |
-t X | -Threshold X | 場景變化閾值,0-1 | 0.10 |
-c W:H:X:Y | -Crop W:H:X:Y | 先裁切至投影片區域 | 無 |
-b NAME | -Browser NAME | 使用此瀏覽器的登入 cookies(chrome、firefox、edge、…) | 無 |
安裝工具
- Windows:
winget install --id yt-dlp.yt-dlp和winget install --id Gyan.FFmpeg,然後關閉並重新開啟 PowerShell,讓系統能找到它們。 - macOS:
brew install yt-dlp ffmpeg - Linux:
sudo apt install ffmpeg(或發行版對應的指令)和pip install -U yt-dlp - LaTeX(僅用於產生 PDF):需要 TeX Live 或 MiKTeX。MiKTeX 的
latexmk需要 Perl;單純使用pdflatex則不需要。
疑難排解
- 需登入的錄影(Panopto、Zoom 雲端、大學入口網站):使用
-b chrome/-Browser chrome(或使用者登入的瀏覽器)。如果 yt-dlp 仍無法取得,請使用者先下載影片,再使用-i。 - Git Bash 中出現
$'\r': command not found或pipefail: invalid option name: 表示.sh檔案有 Windows 換行符號。請執行sed -i 's/\r$//' scripts/extract_slides.sh一次。 - yt-dlp 在 YouTube 上出現錯誤(「請登入確認」、格式錯誤):請先更新 yt-dlp,執行
yt-dlp -U或pip install -U yt-dlp,這能解決大部分問題。 - 無法連線到影片主機(沙盒或雲端工作階段):請告知使用者,並提供可在其本機執行的指令。
僅擷取使用者有權限存取的錄影,並保留幀圖供其個人筆記與學習使用,除非該演講的授權條款另有規定。