Side Projects

PocketVid 影片壓縮器

iOS 原生影片壓縮 App,使用 HEVC/H.265 編碼在不犧牲畫質的情況下大幅縮小影片。支援批次處理、Share Extension、Siri 捷徑整合,所有處理皆在裝置本機完成,保護隱私。

要解決的問題

手機錄的影片動輒數百 MB,很快吃掉 iPhone 儲存空間,也不好用訊息或郵件傳送。很多壓縮工具要把影片上傳到雲端處理,對家庭影片或工作素材並不放心。PocketVid 想做的是一個在手機本機一次處理多部影片、選好品質就能開始的壓縮工具。

畫面截圖

  • PocketVid 影片佇列:已完成的影片顯示壓縮前後大小,下一部正在壓縮中
  • PocketVid 批次處理:多部影片排入佇列一次壓縮
  • PocketVid 佇列中一部影片等待開始,按下「開始處理」即在本機壓縮
  • PocketVid 設定:1080p 到 480p 的品質預設與儲存位置選項

主要功能

  • 批次佇列

    一次加入多部影片排入佇列依序壓縮,可個別停止或一次取消全部,列表即時顯示每部影片的進度、時長與壓縮前後的檔案大小。

  • 解析度與品質預設

    提供 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

更多Side Projects