動畫 GIF 更像一本翻頁小冊,而不是縮小版的影片,它由一張張圖片疊成,每張圖片要停留多久,各自記在檔案裡。做影片轉gif 時,把拍好的影片直接丟去轉,常會碰到三種狀況,色彩變得粗糙、聲音消失,檔案還比原影片大上好幾倍。
難處不在按下轉換鈕,而在轉之前要先決定哪一段值得留、尺寸要縮到多小、影格要砍掉多少,才能讓成品小到能貼進社群貼文或聊天室,畫面又不至於糊成一團。不論用手機、電腦還是網頁工具,判斷的方式都一樣,差別只在操作介面。
這些判斷的依據,全都來自 GIF 這個格式本身的先天限制。
GIF 格式本身的三個先天限制
從 W3C 的 GIF89a 規格來看,GIF 動畫就是一張張圖片依序顯示,每張圖片可以各自記錄要停留多久。影片轉成這種格式之後,顏色的數量、聲音的有無、檔案的大小,全都得照 GIF 的規矩走。
所以 gif製作的成品,都得在這三個限制裡取捨,轉檔時要調整的每個參數,也都是在替這三件事找出折衷點。

256 色調色盤上限與抖色
GIF 的每個像素存的不是顏色本身,而是調色盤的編號。MDN 的說明是,這個編號只有 8 位元,指向一張由 24 位元顏色組成的調色盤,所以整張圖最多只能有 256 種顏色。W3C 的 GIF89a 規格也把全域與區域色彩表的上限定在 256 種。
顏色不夠用的時候,GIF 會靠抖色(dithering)補償,也就是讓相鄰的色點交錯排列,用肉眼混出近似的顏色,代價是顆粒感變重,檔案也跟著變大。漸層、膚色、天空這類色彩細微變化的畫面最吃虧,轉出來容易出現色塊與顆粒;相對地,螢幕錄影、平面插畫這類色彩簡單的畫面,幾乎看不出差別。
另外,GIF 可以指定其中一個編號當透明色,所以只有「透明」與「不透明」兩種狀態,沒有半透明。這點對一般影片轉檔影響不大,知道有這回事就好。
GIF 沒有聲音,播放速度由每格延遲決定
GIF 的規格裡根本沒有聲音這個概念,所以影片轉成 GIF 之後,聲音一定會消失。這是格式本身的規定,不是哪個工具少了功能。內容靠聲音傳達的影片,例如說話、音樂,就不適合轉 GIF,要保留聲音只能留在 MP4;若內容需要靠對白才看得懂,可以先把字幕燒進畫面再轉。
播放速度的做法也和影片不同。GIF 的每一格各自設定「延遲時間」,單位是百分之一秒,所以影格率和每格延遲其實是同一件事的兩種說法,例如每格延遲 10(也就是 0.1 秒),就相當於每秒播 10 格。ffmpeg 的 GIF 輸出同樣受這個限制,兩格之間的延遲不能小於百分之一秒。
至於要不要重複播放,由「循環次數」決定。ffmpeg 輸出的 GIF 預設無限循環,可以用 loop 參數調整,設成 -1 就不循環。
檔案大小取決於影格數和畫面變動範圍
GIF 沒有影片那種預測畫面動態的壓縮方式。依 MDN 的說明,第一個完整尺寸的影格之後,每一格只提供畫面上有變化的部分,所以檔案大小大致隨「影格數乘上畫面變動的面積」成長。背景不動、只有一小塊在動的素材,例如螢幕錄影,檔案就會小很多;ffmpeg 的 paletteuse 濾鏡有個 diff_mode=rectangle 選項,只重新處理變動的矩形,文件也說明它類似 GIF 的裁切與位移壓縮機制。
拍攝出來的影片每一格多少都在變,所以通常比同長度的 MP4 大得多。web.dev 舉過一個例子:同一段動畫,GIF 是 3.7 MB,轉成 MP4 只剩 551 KB,轉成 WebM 則是 341 KB,約分別減少 85% 與 91%,文中也直言動畫 GIF 可以非常大。
這也是轉檔前要先剪短、縮小、降影格率的原因,檔案一旦太大,許多平台就會直接拒收。
轉檔前先規劃片段長度、尺寸、影格率和色彩數
動手轉檔之前,有三個旋鈕要先想好:片段多長、畫面多大、每秒幾格。不論用哪種工具,這三件事的調整方向都一樣,也是製作gif 時最核心的判斷。
最終用途要一起放進考量。貼到社群或聊天室,得先看該平台能收多大的檔案;放在自己的網頁上,則可以考慮乾脆改用 MP4。

片段愈短,檔案愈好控制
檔案大小與影格數成比例成長,同樣的畫面剪掉一半時間,檔案大致就少一半。GIF 適合 2 到 6 秒左右、只含一個動作的循環片段,所以先在原影片裡找出動作開始到結束的那一段,頭尾各多留半秒,起訖點選在動作自然循環的位置,循環播放時接縫處才不會突兀。
各個工具也有長度上限。ezgif 的影片轉GIF 頁依影格率動態限制長度,5 fps 最多轉 60 秒,10 fps 最多 30 秒,影格率再高則更短;Adobe Express 的影片轉GIF 頁則寫明影片長度最多 1 分鐘。內容真的很長的話,改成 MP4 會合理得多。
縮小尺寸和降低影格率最能減少檔案大小
寬度縮小與影格率下調,是兩個減幅最大、畫質損失又還能接受的旋鈕。尺寸縮小的效果是面積級的,寬和高各縮一半,像素量就只剩四分之一;影格率則是線性減少,每秒少一半的格數,檔案大致少一半。社群貼文與聊天室多半用不到原影片的 1080p,縮小之後肉眼看不出太大差別。
影格率降低的代價是動作會變得不連貫。多數情況下,10 到 15 fps 已經足夠順暢,影格愈少,檔案愈小,動作也愈跳。
縮放時要保持原本的長寬比,只指定寬度或高度其中一邊,讓另一邊自動計算,避免畫面被拉伸變形。至於縮到多少像素最合適,要看目標平台的規定。
色彩數與抖色方式的取捨
色彩數可以主動降到 256 以下,例如 128 色或 64 色,換取更小的檔案,代價是漸層出現明顯的色階斷層。抖色開得愈強,漸層愈平滑,但顆粒感愈明顯,檔案也愈大;關掉抖色則檔案最小,漸層會變成一塊塊的色塊。這是畫質對檔案大小的取捨,沒有唯一的正解。
內容不同,影響也不同。平面圖形、螢幕錄影降色數幾乎看不出差別;真實拍攝的畫面,降色數與關閉抖色都會明顯變差。各工具對這個旋鈕的叫法也不一樣,ffmpeg 可以直接指定色彩數與抖色演算法,Adobe Express 則用大、中、小三種檔案大小選項取代細項,大的畫質最高,中的適合社群分享,小的則方便到處傳送。
手機內建功能轉 GIF 的做法與限制
不想另外安裝 App 的話,多半會先從手機內建功能下手。這條路的限制也很明確,手機內建的功能多半只能選一段素材、簡單裁剪就輸出,沒辦法精細控制影格率與色彩數,而且每種功能能用的素材來源也不一樣。
輸出後若檔案仍然太大,就得回到電腦或線上工具再壓縮。
iPhone 透過捷徑 App 的 Make GIF 動作轉檔
iPhone 沒有「存成 GIF」的按鈕,內建的做法要透過捷徑 App。捷徑 App 提供一個 Make GIF(製作 GIF)動作,Apple 的捷徑使用手冊就以它舉例,先取得最近拍的照片,再把這些照片組成一張動畫 GIF。比較省事的做法是直接用圖庫裡的現成捷徑,在捷徑 App 的圖庫搜尋 GIF,就能找到用到這類動作的捷徑,加入後執行,再依畫面指示選擇素材並儲存。
現成捷徑的名稱與步驟會隨系統版本調整,Apple 也沒有公開影格率或尺寸這類選項的說明,細節以手機上實際看到的畫面為準。想自己掌握流程的話,也可以新建一個捷徑,把 Make GIF 動作串進去。
容易混淆的是照片 App 裡 Live Photo 的「循環」與「來回」效果,這兩種效果並不會另存出 GIF 檔。要把 Live Photo 變成 GIF,一樣得透過含有 Make GIF 動作的捷徑。
Android 的 Google 相簿與 Galaxy 的 AI select
Android 沒有統一的「影片存成 GIF」選項。Google 相簿的「動畫」功能,可以把選取的照片和影片組成快速播放的動畫 GIF,Android 版從底部的「建立」點「動畫」,再挑照片即可;說明頁的電腦版操作則寫明,先選一個項目,再加選最多 49 個。這個功能比較像把素材依序快速播放,說明頁也註明無法加快或放慢速度;它沒辦法精準剪出影片中的某一段,比較適合把幾張照片與短片段串在一起。
Samsung Galaxy 的 AI select(舊稱 Smart select)走的是另一條路,做法是錄下螢幕上正在播放的內容。從邊緣面板或 S Pen 開啟 AI select 後,框選要錄的範圍,在更多選項裡選建立 GIF,挑好高畫質或標準畫質再按下錄製。依 Samsung 的說明,最長可錄 15 秒,儲存後可以在相簿裡看到。AI select 這個名稱是 One UI 6.1.1 之後才改的,手機支不支援、選單的樣子,都以自己手機上的畫面為準。
手機沒有這類內建功能的話,直接改走電腦或線上工具的做法就好。
Gboard 的 GIF 鍵不負責轉檔
很多人搜尋「轉gif」,會以為輸入法上的 GIF 鍵能把自己的影片變成 GIF。Gboard 說明頁寫的用法是點表情符號、再點 GIF,然後挑一個現成的 GIF 插入對話。
整份說明都沒有提到匯入自己的影片再轉成 GIF 的功能,這個按鍵的用途是搜尋並送出別人做好的 GIF。自己做好的 GIF 要傳出去,直接從相簿或檔案分享即可。
電腦上用 ffmpeg 與 GIMP 免費轉檔
想自己控制長度、尺寸、影格率與色彩數,電腦上的免費工具最靈活。主力是 ffmpeg,這是開源的命令列工具,一行指令就能把 MP4 轉成 GIF;GIMP 則留給需要逐格修圖的情境。
ffmpeg 的官網只提供原始碼,Windows 版要從官網下載頁連結的第三方建置取得,例如 gyan.dev 與 BtbN,macOS 則連到 evermeet.cx。解壓縮之後,把存放 ffmpeg 的資料夾路徑加進環境變數,才能直接在終端機輸入 ffmpeg。裝好之後可以用下面這行確認:
ffmpeg -versionCode language: Bash (bash)
用調色盤兩段式指令完成影片轉gif
最短的 mp4轉gif 指令只有一行:
ffmpeg -i input.mp4 output.gifCode language: Bash (bash)
這行能用,但畫質與檔案都不理想。它沿用預設調色盤,顏色對應容易偏掉,也沒有縮小尺寸與降低影格率,所以檔案通常會大上許多。
ffmpeg 濾鏡文件介紹的做法,是先用 palettegen 替這段影片產生專屬調色盤,再用 paletteuse 套用這張調色盤轉檔。這兩個步驟可以寫進同一行指令:
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gifCode language: Bash (bash)
這段濾鏡鏈由幾個部分組成:
fps=10把影格率降到每秒 10 格。scale=480:-1:flags=lanczos把寬度縮到 480 像素,高度填 -1 讓它依原長寬比自動計算,lanczos 是縮放時使用的演算法。split[s0][s1]把畫面分成兩份,一份拿去產生調色盤,一份拿去上色。palettegen為整段影片挑出一張專屬調色盤,預設會保留一格給透明色,所以最多是 255 色加上 1 格透明色。paletteuse用這張調色盤替每一格上色,並預設以 sierra2_4a 抖色。

同一段測試影片用兩種指令各轉一次,兩段式指令的顏色明顯更貼近原影片,檔案大小也小得多,後者主要來自縮小尺寸與降低影格率。

檔名含有中文或空格的時候,要用引號把檔名包起來:
ffmpeg -i "龐果 示範影片.mp4" output.gifCode language: Bash (bash)
把兩段式指令裡的檔名換成自己的影片,複製貼上就能轉gif,先得到第一支能用的成品,之後再依需求微調各個參數。
ffmpeg 常用參數對照及縮小檔案的指令範例
前面提到的三個旋鈕,在 ffmpeg 裡各有對應的參數:
| 想調整的項目 | 對應參數 |
|---|---|
| 剪出片段的起點與長度 | -ss 起點 -t 長度 |
| 指定結束位置 | -to 結束位置 |
| 影格率 | fps= |
| 尺寸 | scale= |
| 色彩數 | palettegen=max_colors=64 |
| 抖色方式 | paletteuse=dither=bayer:bayer_scale=5 |
| 循環次數 | -loop(0 為無限循環,-1 為不循環) |
剪片段時,-ss 放在 -i 之前和之後,行為並不相同。ffmpeg 文件的說法是,放在輸入前面,會在輸入檔裡直接跳到那個位置附近;放在輸出那一側,則是照樣解碼,再丟棄到達該位置之前的內容,所以前者通常快得多。一般剪短片段時,放在 -i 之前就可以了。-t 指定的是長度,-to 指定的是結束位置。
色彩數與抖色的參數,也能照前面談到的取捨調整。palettegen 的 max_colors 預設是 256,調成 64 就是 64 色。paletteuse 的 dither 預設是 sierra2_4a,也可以改成 bayer,或設成 none 關閉抖色;bayer 的 bayer_scale 範圍是 0 到 5,數值低,網紋較明顯但色階斷層較少,數值高,網紋較不明顯但斷層較多。
把這些參數組合起來,例如從第 3 秒開始剪出 4 秒,再壓低色彩數縮小檔案,指令會長這樣:
ffmpeg -ss 3 -t 4 -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=64[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5" -loop 0 output.gifCode language: Bash (bash)

GIF 本來就沒有聲音,ffmpeg 的 -an 雖然能停用音訊,對 GIF 輸出其實沒有影響,不必特別加。
想比較不同組合的效果,可以固定其他參數、一次只改一個,像是把 fps 從 10 換成 15,或把 64 色換回預設的 256 色,再對照檔案大小與畫面,才分得清每個旋鈕對成品的影響。
需要逐格修圖時用 GIMP 匯出
GIMP 不能直接開啟影片,要先把影片拆成一張張影格圖片才能處理,所以只適合需要逐格修改的情境,例如在畫面上塗改、加字,或去除某個物件。只想轉檔的話,不必走這條路。
流程是先用 ffmpeg 把影片輸出成圖片序列,再讓 GIMP 以圖層的方式開啟,每個圖層就是一格。修完之後,從選單依序點「濾鏡」、「動畫」、「最佳化(用於 GIF)」,再從檔案選單匯出成 GIF,並勾選「作為動畫」。最佳化這一步值得做,GIMP 使用手冊的範例動畫原本是 600 kB,最佳化之後只剩約 154 kB,原理是許多元素在所有圖層中都相同,只需要存一次,每個圖層只存變化的部分。
匯出對話框有三個關鍵選項。「永遠循環」決定動畫是否一直重複播放;「未指定時的每格延遲」以毫秒為單位,替沒有個別設定延遲的影格統一定速;「影格處置方式」則決定未指定時,新的一格如何疊在前一格上。這三項分別對應 GIF 的循環、延遲與只存變化部分的設計。
線上轉檔工具的用法與隱私提醒
不想裝軟體、電腦與手機都能用的路線,就是網頁上的轉檔工具。ezgif 與 Adobe Express 是兩個國際上常見的免費工具,各有限制與適合的情境。使用前要確認的重點是長度上限、檔案上限,以及影片會不會上傳到對方的伺服器。
ezgif 的影片轉GIF 頁面
ezgif 是專門處理 GIF 的免費網站,它的影片轉GIF 頁面上傳檔案上限是 200MB。轉換長度則隨影格率動態調整,5 fps 最多 60 秒,10 fps 最多 30 秒,影格率再提高,可轉的長度更短。

頁面上可以輸入想擷取的起訖時間,選擇影格率,並設定循環次數,0 代表無限循環。轉完之後,同一站也能接著縮放與裁切,也支援帶透明通道的影片。網站會用 Cookie 分析流量、記住偏好並投放廣告,所以頁面上會出現廣告版位。
Adobe Express 的免費轉換器
Adobe Express 提供免費的線上影片轉GIF 轉換器,頁面標明免費使用、不需要信用卡。它接受 MP4,以及 MOV、WMV、AVI 等許多影片格式,拉動頁面上的把手就能設定想擷取的那一段,影片長度上限是 1 分鐘。
輸出時可以選方形、橫式或直式的比例,並有大、中、小三種檔案大小選項。選項簡單是它的特色,相對地,可以調整的細項也比較少。頁面沒有寫明使用前是否需要登入,實際以操作當下 Adobe 頁面的指示為準。
影片上傳後會暫存在對方伺服器
線上工具多半得把影片傳到別人的伺服器上處理。ezgif 的隱私說明寫明,上傳的檔案在最後一次被工具使用後最多保存 1 小時,之後會自動且安全地刪除,檔名也不會公開列出。它的影片轉GIF 頁另外提供「Local processing」(本機處理)選項,勾選後檔案只在瀏覽器裡處理,不會上傳到伺服器;不過轉完若接著使用還不支援本機處理的工具,檔案仍會送到伺服器。這些做法也不代表每個工具都一樣。
含有人臉、客戶內容、未公開的商品畫面,或內部簡報錄影的影片,不適合丟進線上工具,改走電腦上的 ffmpeg 做法就好,檔案完全不會離開自己的電腦。上傳前先看一下該工具的隱私說明,確認檔案保存多久,是比較穩妥的習慣。
ezgif 能調整的選項較多,影片轉GIF 頁還能選本機處理,Adobe Express 的操作步驟較精簡,依素材性質與需求選用即可。

各社群平台對 GIF 的支援與大小限制
做 GIF 多半是為了貼到某個平台,所以得先知道目標平台能收什麼。各平台的規格常常調整,而且多數平台的說明頁並沒有明載「直接上傳自製 .gif 檔」的規格。
另外要留意,平台常把上傳的 GIF 轉成影片播放,實際大小以平台上傳時的提示為準。
X 的開發者文件明載動畫 GIF 規格
X 的開發者文件對動畫 GIF 的規格寫得最具體,檔案不超過 15 MB;文件也提醒,即使檔案大小符合,發文時仍可能失敗,建議同時遵守解析度不超過 1280×1080(寬乘高)、影格數不超過 350、總像素(寬乘高乘影格數)不超過 3 億這幾項限制。
這幾個數字之間會互相牽制。寬 1280、高 720 的 GIF,影格數超過約 325 格,總像素就會超標,所以要同時縮小尺寸並控制影格數,不能只盯著檔案大小。一般使用者在 X 介面上傳時的限制,以上傳時看到的提示為準。
Discord 依帳號方案限制上傳檔案大小
Discord 上傳 GIF 就是一般的檔案上傳,受檔案大小上限約束。依 Discord 的說明,未訂閱 Nitro 的帳號,單一檔案上限是 20MB;Nitro Basic 是 50MB,Nitro 的上限更高。這類數字會隨平台政策調整,上傳前以說明中心的最新內容為準。
Discord 說明中也提到,現在是在壓縮之前就檢查檔案大小,Android 手機的原始檔案往往比較大,可能比以前更常碰到上限。GIF 超過上限時,回頭用前面談過的方法,縮小尺寸、降低影格率,通常就能處理。
Facebook 和 Instagram 沒有明載 GIF 上傳規格
Instagram 內建的 GIF 功能是從現成的 GIF 圖庫挑選,不是上傳自己的檔案。在限時動態裡點貼圖,就會看到 GIF 選項;私訊聊天室的部分,依 Instagram 說明中心的說明,打開對話後點右下角的貼圖圖示,就能挑選 GIF 或貼圖傳送。這兩個地方都能輸入關鍵字,搜尋現成的動圖。
至於在 Facebook 或 Instagram 的一般貼文,直接上傳自己製作的 .gif 檔,兩個平台的說明文件都沒有明載規格,所以這裡不寫數字,以上傳時的提示為準。需要穩定上傳到動態牆的話,退一步改用 MP4,通常是比較穩妥的做法。
LINE 動態貼圖要用 APNG 而不是 GIF
LINE Creators Market 明載規格的是「動態貼圖」,格式是 APNG 而不是 GIF,副檔名為 .png。規格包括尺寸最大 320×270 像素、影格 5 到 20 張、可循環 1 到 4 次、播放時間最長 4 秒,單張檔案要在 1MB 以內,並且需要透明背景。所以拿 GIF 去上架動態貼圖行不通,得先轉成 APNG。
換句話說,「在聊天室傳動圖」和「製作動態貼圖」是兩回事。在聊天室直接傳 GIF 檔的規格,LINE 沒有明確說明,以實際傳送時的結果為準。
GIF 和 MP4、WebP、APNG 的適用情境
做完才發現檔案還是太大,或畫質不如預期,有時問題不在參數沒調好,而是這個用途本來就該換個格式。原則很單純,要貼在只收 GIF 的地方就用 GIF,其他情境優先考慮影片。
| 格式 | 色彩 | 聲音 | 透明 | 檔案大小傾向 | 相容性 |
|---|---|---|---|---|---|
| GIF | 最多 256 色 | 無 | 有,但只有全透明與不透明 | 動態畫面時偏大 | 最廣泛 |
| MP4 | 完整色彩 | 有 | 通常不支援 | 通常比 GIF 小很多 | 網頁與裝置普遍支援 |
| APNG | 完整色彩 | 無 | 有 | 依內容而定 | 主要瀏覽器都支援 |
| WebP | 更高的色彩深度 | 無 | 有 | 壓縮率優於 PNG、JPEG 與 GIF | 主要瀏覽器的最新版都支援 |
GIF 的好處是相容性最廣,在 MDN 的描述裡,它是簡單圖像與動畫的好選擇,也因為動畫支援在社群媒體時代重新流行,常被拿來當短「影片」、迷因與簡單動畫。限制則是前面談過的那三項。
MP4 支援聲音與完整色彩,檔案通常小很多。放在自己的網頁上,web.dev 建議用 video 標籤搭配 autoplay、loop、muted、playsinline 這四個屬性,效果就像 GIF,也就是自動播放、無限循環、沒有聲音、在頁面內播放。另外,部分社群平台收到 GIF 後,也會自行轉成影片格式來播放。
APNG 是 Mozilla 引入的格式,在 PNG 的基礎上加入動畫支援,色彩深度比只有 8 位元索引色的 GIF 更多,適合不需要與聲音同步的基本動畫,LINE 的動態貼圖用的就是 APNG。
WebP 的壓縮率比 PNG、JPEG 好得多,支援動畫、透明與循環,MDN 也建議必要時準備備援格式。至於動畫序列,MDN 建議考慮 WebP、AVIF 或 APNG。
轉成 GIF 前先確認影片的使用權
把影片轉成 GIF,等於對素材做一次改作,而 GIF 又特別容易被轉貼、擴散,所以只拿自己有權使用的影片來轉。
可以放心使用的素材有三類:自己拍攝的影片、自行製作的影片,以及授權條款明確載明可以改作與散布的影片。他人的影片、電影電視片段、別人的直播錄影,沒有明確授權就不要轉成 GIF 發布。就算影片有授權,也要看條款是否允許「改作」與「商業使用」,Creative Commons 的授權條款就依可否改作、可否商用等條件,分成不同的組合。
想找能合法使用的動圖素材,先從素材的授權說明看起。
要做出一支能放上社群、大小剛好的 GIF,秒數、尺寸與顏色三件事得取得平衡。手上有影片時,先決定要放到哪個平台,再決定剪哪一段、縮到多小,影片轉gif 就不再是碰運氣,而是一連串可以調整的選擇。
