# 影片轉 GIF 把影片做成動圖

挑好段落、尺寸和幀率。

> 把 MP4、MOV 或 WebM 裡的一段做成 GIF 動圖。段落、寬度和幀率你來定，讀幀和寫 GIF 都在你的瀏覽器裡完成。什麼都不上傳。

本頁是一個完全在你的瀏覽器裡執行的互動式工具，地址是 https://abox.tools/zh-TW/video-to-gif/。你交給它的任何內容都不會被上傳。下面是這個頁面用文字對該工具的全部說明；要使用它，請開啟這個地址。

## 你的影片**不會上傳**。這裡根本沒有伺服器。

每一幀的讀取、縮放、量化和寫出，都是你自己的瀏覽器用你自己的硬體做的。這裡沒有任何東西能取資料或者發資料，這個工具壓根沒有聯網功能。就算真有，這個頁面的另一頭也沒有伺服器能接住一段影片。

- ✗ 不上傳
- ✗ 不註冊
- ✗ 沒有水印
- ✓ 多長都行
- ✓ 斷網能用

## 影片怎麼做成 GIF

1. **選一段影片。** 把 MP4、MOV、M4V 或者 WebM 拖到下面的方框裡，或者點開自己挑。瀏覽器直接從你的硬碟上讀，這期間沒有東西發出去。
2. **標出那一段。** 放起來，該開始的地方按 `I`，該結束的地方按 `O`，也可以直接拖條上那兩個手柄。GIF 就該是幾秒鐘的東西。檔案是小是大，這個設定說了算，另外兩個加起來都沒它要緊。
3. **挑寬度和幀率。** 寬 480 畫素、每秒 12 幀，GIF 的常見用途基本都夠。寬度砍一半，畫素少四分之三；每秒十二幀已經讀得出是在動，再多的那些幀誰也看不出來，白花錢。
4. **做出來，然後下載。** 幀讀進來，整段動畫共用一份 256 色的配色板，每一幀只寫畫面裡變了的那一塊。做完就在頁面上放給你看，那張圖跟你下載到的是同一個檔案。

## 說得更細的版本

[怎麼把影片做成 GIF](https://abox.tools/zh-TW/guides/turn-a-video-into-a-gif/): 該挑哪一段、多寬、每秒幾幀，影片做成 GIF 為什麼會大出十倍，以及什麼時候壓根不該用 GIF。

## 工具箱裡還有

- [GIF 製作](https://abox.tools/zh-TW/gif-maker/): 把一組圖片變成一段動畫。
- [GIF 拆幀](https://abox.tools/zh-TW/split-gif/): 每一幀都單獨存成一張 PNG。
- [GIF 分析](https://abox.tools/zh-TW/gif-analyzer/): 幀、延時、調色盤，以及每個位元組的去向。
- [圖片轉影片](https://abox.tools/zh-TW/images-to-video/): 一個資料夾的圖片，變成一段影片。

## 常見問題

### 我的影片會傳到什麼地方去嗎？

不會。讀取、取幀、轉換，全由你自己的瀏覽器在你自己的硬體上完成。這個工具沒有伺服器那一半，頁面的 `Content-Security-Policy` 把它可能聯的地址全列了出來，沒有一個是本站的。與其聽我們說，不如拔掉網線，照做一張試試。

### 能轉哪些格式？

MP4、M4V 和 MOV 直接讀，裡面裝的是 H.264、HEVC、AV1 還是 VP9 都行，只要你的瀏覽器解得了那個編碼。其他瀏覽器能播的格式，最典型的是 WebM，改成把播放器逐個時間點跳過去取幀，慢一些，落在哪一幀上也沒那麼精確。瀏覽器既讀不了也播不了的檔案，實際上就是 AVI、WMV、FLV 和大多數 MKV，會被直接拒收並說明原因，不會做到一半才崩。

### 我的 GIF 怎麼這麼大？

因為 GIF 是 1987 年的格式，它存的是一張張完整的圖，不是運動。一段五秒的片子，做成 GIF 不可能跟它自己那個五秒的 MP4 一樣小，影片轉出來的 GIF 通常是原影片的十倍。真正決定大小的是三個設定，按要緊程度排：這一段多長、畫面多寬、每秒幾幀。寬度砍一半，畫素就少四分之三，而花錢的正是畫素。

### 為什麼只有 256 種顏色？

格式就是這麼定的：一張 GIF 帶一張最多 256 色的顏色表，每個畫素存的是表裡的編號。這個工具的做法是把你選中那一段裡每一幀的顏色都數一遍，再分成 256 組，用的是中位切分法，業界標準做法，所以配色板是貼著你這段片子長出來的，不是一套固定顏色。缺了某個顏色的地方，抖動會把最接近的兩種混在一起，讓漸變還是漸變，而不是一道道色帶。

### 抖動那個設定是做什麼的？

拿一點雜訊，換掉一大片色帶。開著的時候，一片本來會變成四道平色的天空還是漸變，代價是有點細微的紋理，檔案也大一點。關掉則畫面更平、檔案更小，適合螢幕錄影、線稿，以及本來就由大片純色構成的東西。這裡用的是有序抖動，不是誤差擴散那種，所以沒變化的背景在幀之間穩穩當當，不會滿屏爬。

### 長度和體積有限制嗎？

受限的是你標的那一段，而且卡住它的是記憶體，不是什麼規矩：選好配色板之前，這一段的每一幀都得同時留在手上。所以頁面會先算出你這套設定要花多少記憶體，提前告訴你，超了就直接拒絕，而不是讓分頁耗盡記憶體憑空消失。段落短一點、寬度小一點、幀率低一點，都能把這個數降下來。

### 聲音能保住嗎？

GIF 裝不了聲音。這個格式壓根沒有帶音訊的版本，這也正是後來網上大多改用無聲循環影片的主要原因。聲音要緊的話，那就別轉，留著影片，[影片剪輯](https://abox.tools/zh-TW/trim-video/)能從裡面剪出一段，而且一幀都不重編。

### 免費嗎？要註冊嗎？

免費，沒有帳號，不用登入，沒有試用期，也沒有水印。本站帶廣告，經費就是這麼來的，廣告拿不到關於你影片的任何資訊。

## 這條隱私承諾怎麼核實

- **你的影片沒地方可去。** Content-Security-Policy 把這個頁面允許聯的地址全列了出來，沒有一個是本站的。這裡沒有能收檔案的介面，程式碼裡也沒有一行會把檔案發出去，就算真有那麼個介面也一樣。
- **這裡沒有任何東西會去聯網取資料。** 這個工具完全沒有聯網功能。沒有網址可以貼，沒有東西要下載，第一次用也不去取什麼引擎。碰過你影片的每一個位元組，都是頁面載入時從本站來的。
- **解碼在本地。** 畫面幀走的是你自己瀏覽器裡的 WebCodecs，或者走那個本來就負責放這段片子的播放引擎。用的是哪一條，頁面頂上寫著，因為這會影響幀是怎麼挑出來的，而你應該看得見這一點。
- **GIF 是在這裡寫出來的，程式碼你能讀。** 配色板、抖動和 LZW 壓縮，加起來大約六百行，就在這個工具自己的目錄裡。沒有編碼服務，沒有執行時去取的庫，整套東西裡也沒有哪個地方能把一張圖送出去。
- **Google 載入了什麼，又拿不到什麼。** 廣告指令碼和統計指令碼來自 Google。關於你影片的資訊，一條都沒給它們，檔案不給，畫面幀不給，檔名、大小、時長、你標的那一段，也都不給。讀取、取幀、量化、編碼的每一行程式碼都從本站發出，也都擺在儲存庫裡。
- **捐助按鈕載入了什麼，又拿不到什麼。** 頁頭那個「Buy me a coffee」按鈕，由 cdnjs.buymeacoffee.com 的指令碼畫出來，字型取自 Google Fonts。它就是個連結，僅此而已，不上報訪問，也拿不到關於你或者你影片的任何東西。
- **斷網照樣能用。** 斷開網路，這個頁面上的一切照常工作。這是最省事的一條證明。

**你可以自己核對。**上面這些不用你信。這個頁面是儲存庫裡的模板和配置產生出來的，構建指令碼你能讀，也能自己跑一遍，跑出來的結果就提交在 `dist` 分支上。拿實際發給你的內容，跟你自己從原始碼構建出來的結果對一遍就知道了： https://github.com/A-Box-of-Tools/website

最值得先讀的幾個檔案：`config/site.toml` 裡是 Content-Security-Policy，`src/frames.js` 裡是從影片裡取幀的那兩條方法，`src/quantize.js` 裡是配色板，`src/gif.js` 裡是檔案本身，連 LZW 都在。這幾個都沒有引入任何能發請求的東西。
