在瀏覽器中裁剪影片不需要將檔案上傳到伺服器,因為本地裁剪工具會解碼來源、將選定的矩形繪製到 Canvas 元素中、將該 Canvas 錄製成 WebM,然後在同分頁內把完成的檔案交還給你。「裁剪是否會上傳我的影片」這個問題背後的隱私特性,取決於工具的實作方式,而不是它的說明文字裡是否出現「線上」這個詞。有些裁剪工具會從你的磁碟接收檔案,並立即將它 POST 到遠端轉碼器;其他則完全不會離開瀏覽器。這種區別很重要,因為私密的螢幕錄影、機密的訪談,或是尚未發布的草稿,一旦離開裝置就可能會曝光。基於瀏覽器的裁剪工具,包括 Video Cropper,會留在頁面內,使用的是已經過獨立稽核的標準:用於裁剪的 WHATWG HTML Canvas drawImage 方法,以及用於輸出的 IETF Matroska 容器格式。這些標準都不需要網路往返。這就是為什麼一個工具可以誠實地宣稱你的影片從未離開瀏覽器,也是為什麼你可以一邊裁剪、一邊透過觀察瀏覽器的 Network 面板來驗證這個說法。

does cropping upload my video when i use video crop
裁剪會上傳我的影片嗎?瀏覽器裁剪工具完整說明

影片裁剪工具通常如何處理你的檔案

公開網路上幾乎所有影片裁剪工具都涵蓋在兩種架構下。第一種將選定的檔案讀入 FormData 物件,並 POST 到後端服務,後端執行 FFmpeg 或類似的引擎、儲存結果,然後回傳下載網址。檔案確實會離開裝置,處理也確實是在別人的機器上進行,而中間副本可能會因快取或除錯而留在磁碟或物件儲存中。第二種將檔案讀入 blob 網址,將它交給隱藏的影片元素,將要求的矩形繪製成相同大小的 Canvas,並使用 MediaRecorder 將該 Canvas 擷取成 WebM,再透過物件網址提供回來。除了頁面本身載入之外,沒有任何資料透過網路傳送。在兩種情況下,使用者看到的差異都很小——兩者最終都會下載一個檔案——但信任輪廓完全不同。

基於瀏覽器的裁剪工具彼此之間也可能有所不同。有些會將檔案保留在記憶體中,但仍會 ping 伺服器進行授權檢查、遙測或分析。其他則會將檔案保留在記憶體中,並且在頁面載入後不會發出任何請求。後者才是「不上傳」的嚴格定義,也是底層瀏覽器 API 設計時要實現的行為。當你評估裁剪工具時,問題不在於「它是基於瀏覽器的嗎」,而是「在我按下裁剪之後,它是否會發出任何一個攜帶我資料位元組的網路請求」。

基於瀏覽器的工具中「不上傳」的意義

一個工具若要聲稱裁剪不會上傳你的影片,管線中的每個階段都必須在當前頁面內執行。這包括使用 File API 讀取檔案、在影片元素內解碼、使用 WHATWG HTML Canvas drawImage 方法將選定區域繪製到 Canvas、使用 MediaRecorder 擷取 Canvas、依據 IETF Matroska Media Container Format 在產生的 WebM 中寫入有限的 Matroska duration,最後將輸出公開為使用者點擊以儲存的物件網址。這些步驟都不涉及任何一個攜帶你檔案位元組的 HTTP 請求。

像 Video Cropper 這類工具的實作合約使得「不上傳」的聲明可以被驗證。頁面會在本機讀取檔案,解碼後的尺寸會在你輸入任何座標之前出現在表單中,而「Crop video」會啟動一個即時處理過程,其持續時間與來源時長大致相同——一段一分鐘的剪輯大約需要一分鐘處理時間,且分頁需保持開啟。當 WebM 準備就緒時,下載按鈕會提供一個指向頁面自身記憶體的 blob 網址。沒有簽署網址、沒有伺服器端的工作 ID,也沒有任何伺服器日誌中的檔案記錄。

如何在不讓影片離開裝置的情況下裁剪影片

  1. 從你的本機磁碟選擇一個瀏覽器可解碼的影片(MP4、WebM、MOV、M4V 或 Ogg),並等待表單顯示來源尺寸。尺寸只有在瀏覽器實際解碼完檔案後才會出現,這是你的第一個信號,代表工具從未將位元組傳送到任何地方。
  2. 輸入以來源像素為單位的整數像素 X 和 Y 偏移量,以及裁剪寬度和高度。X 將裁剪區向右移動,Y 將其向下移動,且矩形必須完全留在每個解碼後的來源影格內。
  3. 在變更任何設定之前,請先確認預設值選取的是完整影格,這樣你才能了解該工具座標系統中「不裁剪」是什麼樣子。
  4. 選擇 Crop video,保持分頁聚焦並開啟,等待即時處理完成。一分鐘的來源大約需要一分鐘;五分鐘的來源大約需要五分鐘。
  5. 下載產生的 WebM,並在目的地播放器中播放。在刪除來源之前,請確認裁剪區域、如有擷取音軌則一併確認、時長和尺寸。

影響本地裁剪能否完成的限制

隱私特性僅在檔案一開始就被接受進行本地處理時才成立。Video Cropper 採用與相關的 Video Compressor 工具相同的明確影片安全預算:正檔案最大 500 MiB,解碼後時長大於零且不超過五分鐘,來源任一邊不超過 4096 像素,來源面積不超過 3840 × 2160。超出任何一項限制的檔案會在裁剪開始前遭到拒絕。

輸出矩形本身也有其限制。寬度和高度必須各自至少兩個像素,X 加寬度以及 Y 加高度必須保持在解碼後的來源範圍內,且輸出面積不得超過 3840 × 2160 像素。無效的矩形會失敗,且不會產生位移、裁切、四捨五入或部分檔案——這對於關心不會意外產生可能會被發布的損毀產出的人來說,是正確的行為。

限制條件上限為何對「不上傳」很重要
來源檔案大小最大 500 MiB較大的檔案會需要串流;本地解碼則保持在記憶體中。
來源時長大於零,不超過五分鐘讓即時處理過程有界,使分頁能夠完成它。
來源邊長任一邊不超過 4096 像素保持在瀏覽器能配置的畫布大小範圍內。
來源面積面積不超過 3840 × 2160防止錄影器超出輸出尺寸。
輸出矩形寬度和高度各自至少兩個像素;完全位於來源內;面積最大 3840 × 2160無效的矩形會失敗,且不會產生部分檔案。

如何在匯出前驗證工具保持在本地

隱私聲明的強度僅止於其背後的實作,而在開始敏感性高的裁剪之前花一分鐘進行檢查是值得的。開啟瀏覽器的開發者工具,切換到 Network 面板,並清除記錄。選擇檔案,等待來源尺寸出現,點擊 Crop video,並觀察面板。真正在本地執行的裁剪工具不會顯示任何攜帶你檔案位元組的請求;你可能會看到針對頁面本身的分析 ping,但檔案絕不應出現在請求主體或請求網址中。

第二個檢查是結果本身。本地裁剪工具產生的 WebM 會具有有限的時長,因為該工具會以時間戳刻度刻度插入一個 Matroska Duration 值。輸出應以 blob 網址下載(你會在網址開頭看到 blob:),而不是重新導向到遠端檔案。如果網址指回頁面內部,表示位元組從未傳送出去。如果網址指向 CDN,則檔案確實離開了裝置。

本地裁剪何時有幫助、何時無助

當來源具有敏感性、來源大到上傳會很慢,或來源已從磁碟刪除而你正從備份工作時,本地裁剪是正確的答案。當目的地平台拒絕上傳某些檔案類型,或原始擁有者尚未授權檔案由第三方處理時,它也是正確的答案。

當你需要保留原始編解碼器、需要讓字幕、章節、旋轉標籤、HDR 訊號或色彩中繼資料等容器特性得以保留,或需要逐影格追蹤主體的動態裁剪時,本地裁剪不是正確的答案——該工具會對每個影格套用一個固定的矩形,並不會隨時間改變矩形。對於這些任務,適當的工具是完全不同類別的東西,而本地裁剪工具會誠實地告訴你這一點,而不是假裝它能完成工作。隱私效益只有在結果確實是你想要的結果時才有意義。

如果你正在權衡選項,Check the Result After Video Crop: Verify Output Locally 對此有詳細說明。

如果你正在權衡選項,How to Pick the Right Approach to Video Crop 對此有詳細說明。