激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

如何裁剪動(dòng)態(tài)GIF圖?Linux、Photoshop、Bash腳本一網(wǎng)打盡

發(fā)布時(shí)間:2024-07-31 12:02:39 瀏覽量:154次

引言

本文最初是源于一個(gè)需求,是這樣描述的:

如何從動(dòng)畫gif中每隔一幀移除一次?

這問題本身,從職業(yè)角度一看,就知道必須用編程,或者工具實(shí)現(xiàn)。

提問的小哥又詳細(xì)進(jìn)行了描述:

我有很多視頻文件,想轉(zhuǎn)換為gif動(dòng)圖。ffmpeg/avconv 在直接操作方面做得很差,所以我曲線救國,把視頻轉(zhuǎn)換為 gif 格式。方法是先將每一幀輸出為 png ,然后使用 imagemagick 將其轉(zhuǎn)換回 gif 格式。

問題是,就文件而言,這會(huì)生成較大體積的 gif 動(dòng)圖。

為了解決這個(gè)問題,我想從 gif 中每隔一秒或第 N 幀“刪除”一次,或者在轉(zhuǎn)換為 gif 時(shí)跳過圖像文件,或者從 gif 中刪除幀。

如何在 Linux 上使用 imagemagick 或其他命令行工具完成此操作?

動(dòng)畫gif

1 - 最簡單直接 gifsicle

放在第一位,肯定是最佳解決方案啦。只一行就足夠了。

gifsicle -U input.gif `seq -f "#%g" 0 2 99` -O2 -o output.gif

本身這個(gè)構(gòu)造就相當(dāng)牛B,因?yàn)?gifsicle 默認(rèn)是只能手動(dòng)指定刪除哪些幀。

而結(jié)合 Bash 的妙用,可以靈活地控制生成的幀數(shù),并保存到新文件。

這個(gè)命令應(yīng)該可以在大多數(shù)Unix shell中工作,將 input.gif 和 output.gif 替換為輸入和輸出文件名,將 99 替換為動(dòng)畫中的幀數(shù)。

參數(shù)說明:

  • -U選項(xiàng):將輸入動(dòng)畫中的幀與前面的幀合并,這樣每個(gè)幀都是獨(dú)立的,并且不依賴于任何其他幀。
  • -O2選項(xiàng):會(huì)重新優(yōu)化輸出動(dòng)畫以最小化文件大小。
  • seq:使用格式化輸出序列字符串。

2 - Bash 腳本

還是要用到 gifsicle 工具,我們創(chuàng)建一個(gè)下面這樣的腳本處理文件。

Bash腳本

做一個(gè)簡單測試,首先生成輪詢播放0-9數(shù)字,如下動(dòng)圖:

動(dòng)態(tài)數(shù)字

運(yùn)行上述腳本之后的結(jié)果:

結(jié)果數(shù)字

3 - Photoshop

UI 設(shè)計(jì)必備工具,也具備了很多功能,可是沒有上面兩條用起來那么隨意。不在命令行處理,受桌面應(yīng)用的約束就越大。

通過菜單 File -> Import -> Video Frames to Layers 打開下面的界面:

Photoshop操作界面

其中的 “Limit To Every __ Frames”就是可實(shí)現(xiàn)。

寫在最后

對于個(gè)人而言,我更傾向于使用命令行的 gifsicle 處理工具。

因?yàn)榭?strong>自定義參數(shù)很靈活,組裝起來極為方便。且批量處理威力巨大,不必拘泥于界面操作,效率高的不止一點(diǎn)半點(diǎn)。

Happy coding :-)

熱門課程推薦

熱門資訊

請綁定手機(jī)號

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動(dòng),老師會(huì)在第一時(shí)間與您取得聯(lián)系,請保持電話暢通!
確定