Side Projects
PocketVid 影片壓縮器
iOS 原生影片壓縮 App,使用 HEVC/H.265 編碼在不犧牲畫質的情況下大幅縮小影片。支援批次處理、Share Extension、Siri 捷徑整合,所有處理皆在裝置本機完成,保護隱私。
要解決的問題
手機錄的影片動輒數百 MB,很快吃掉 iPhone 儲存空間,也不好用訊息或郵件傳送。很多壓縮工具要把影片上傳到雲端處理,對家庭影片或工作素材並不放心。PocketVid 想做的是一個在手機本機一次處理多部影片、選好品質就能開始的壓縮工具。
畫面截圖
主要功能
批次佇列
一次加入多部影片排入佇列依序壓縮,可個別停止或一次取消全部,列表即時顯示每部影片的進度、時長與壓縮前後的檔案大小。
解析度與品質預設
提供 1080p、720p 到 480p 的多組高、中、低品質預設,依用途在檔案大小與畫質之間取捨。
從照片、檔案或分享選單匯入
可從「照片」圖庫或「檔案」App(含 iCloud 雲碟)選取影片,也能在其他 App 的分享選單直接把影片送進 PocketVid。
Siri 捷徑
「壓縮影片」捷徑可在「捷徑」App 中指定壓縮品質,把壓縮步驟串進自己的自動化流程。
自訂儲存位置與刪除原檔
壓縮結果可存到指定的照片相簿或「檔案」中的資料夾;完成後可選擇刪除原始影片,並盡量保留原檔的拍攝日期。
本機處理、iPhone 與 iPad 介面
所有轉檔都在裝置上完成,影片不會上傳到伺服器;iPad 有針對大螢幕調整的原生介面,並支援深色模式。
技術架構
App 以 Swift 與 SwiftUI 原生開發,支援 iPhone 與 iPad。壓縮使用 AVFoundation 的 AVAssetExportSession,依使用者選的預設輸出,並把照片圖庫中的拍攝日期寫回輸出檔的 metadata。主程式之外還有兩個 Extension:Share Extension 把收到的影片複製到 App Group 共享容器,再以 Darwin notification 通知主 App 加入佇列;Siri 捷徑則由 Intents Extension 處理。選擇「檔案」中的儲存資料夾時,以 security-scoped bookmark 記住存取權限,下次啟動仍能寫入同一位置。介面提供英文、繁體中文與簡體中文。
技術挑戰與取捨
Extension 與主 App 之間傳遞影片
Share Extension 執行時間與記憶體都有限,不適合在裡面直接壓縮大型影片。做法是只把檔案複製進 App Group 共享容器並寫入待處理清單,再用 Darwin notification 跨行程通知主 App,主 App 開啟或收到通知時再把影片排入佇列。這樣 Extension 的工作保持輕量,壓縮仍集中在主 App 的同一套佇列與進度顯示中處理。
「檔案」匯入的存取權限要撐過整個處理流程
從「檔案」App 選到的影片是 security-scoped URL,只在明確開始存取後才能讀取;若存取在縮圖、讀取大小或匯出途中中斷,壓縮就會意外失敗。改法是讓每個佇列項目在建立時開始存取,並在項目整個生命週期內持有權限,項目釋放時才結束存取。這樣從「檔案」匯入的影片在整個處理期間都保有所需權限,不再因權限失效而中止。
Siri 捷徑在獨立的 Extension 中執行
Intents Extension 無法直接使用主 App 的程式模組與設定,若硬把整個 App 的服務搬進去,會牽動 UI 與佇列相關的依賴。最後的做法是在 Extension 內放一套精簡的影片處理服務,只負責接收捷徑傳入的檔案、依指定品質壓縮並回傳結果,暫存檔透過 App Group 共享容器處理。捷徑的標題、參數與選項也完整翻譯成繁體中文與簡體中文。
現況
iPhone 與 iPad App,已在 App Store 上架。1.0 於 2025 年 6 月推出,之後陸續加入影片時長、Siri 捷徑、從「檔案」匯入,1.4 版再加入分享延伸功能、iPad 介面與自訂儲存位置。
使用技術
- Swift
- SwiftUI
- AVFoundation
- HEVC/H.265
- Siri Shortcuts
- iPad



