2013-06-20 85 views
11

我必須將很多(200,000+)以上的短mp4s(少於10秒)處理爲動畫gif。我想我已經嘗試了所有可能的命令行方式,但製作高質量的gif仍然需要很長時間。目前我使用ffmpeg來解壓縮圖像(jpg)幀,並使用圖像magick convert來組裝它們。它會生成高質量的gif,但花費太長時間,並且使用太多的內存和CPU,即使調整了極限內存和地圖限制。從mp4創建gif動畫的最快方法

我也嘗試直接使用ffmpeg創建動畫GIF,但質量最好是可怕的。另外,我嘗試過使用gifsicle,但似乎很快,但它只是將gif作爲輸入,並使用ffmpeg生成它們會產生質量較差的gif。

有沒有人有一些命令行食譜的快速高品質gif創作?

+0

我對這些工具中的一部分有過一點點的瞭解。是否有可能通過管道將輸出傳遞到各個階段。這可以顯着提高處理時間(有時候!)。此外,在項目管理研究中,您會發現在時間,資源和質量之間幾乎總是存在折衷。 ; - /。祝你好運。 – shellter

+1

另請參閱[ffmpeg轉換.flv視頻爲可怕品質的.gif](http://superuser.com/a/556031/110524)。 – LordNeckbeard

回答

0

,可以改善從非壓縮圖像傳遞,像.ppm格式,例如用mplayer的命令行是:

mplayer -benchmark -noframedrop -nosound -vf format=rgb24 -vo pnm *.avi -osdlevel 0 

這些將保存JPG壓縮/解壓循環。

它也可以幫助使用固態硬盤。

17

首先,您應該使用mplayerjpeg選項設置爲100(jpeg:quality = 100)創建一組具有最高質量的jpg圖像。

mplayer -ao null -ss 0:00:00 -endpos 10 mts.flv -vo jpeg:outdir=jpeg_dir:quality=100 

接下來,你需要生成的JPG文件轉換爲使用convert GIF文件,只需鍵入:

for i in ./jpeg_dir/*.jpg; do convert "$i" "${i%.jpg}.gif"; done 

,最後用gifsicle創建動畫GIF:

gifsicle --delay=10 --loop ./jpeg_dir/*.gif > anim.gif 

此外,您還可以使用優化級別標誌--optimize=03。它可以幫助減少文件大小:

gifsicle --delay=10 --optimize=03 --loop *.gif > anim.gif 

此外,您可以用顏色當前的調色板 的--colors num--color-method method數字操縱,以確定最合適的調色板。

對我來說最合適的方法是median-cut

median-cut is the median cut algorithm described by Heckbert 

而且,我嘗試描述標誌操縱,發現最有用的選項,以實現生成GIF圖像的 質量更好:

gifsicle --delay=3 --optimize=03 --color-method median-cut --loop *.gif > anim.gif 

--delay=NUM準確對應動畫速度。這個參數取決於原始視頻的FPS。

+0

正如我原來的評論中提到的那樣,我嘗試過這樣的路線。 ffmpeg製作的各個gif文件質量都很低。最終導致低質量的動畫GIF。 – stinkypyper

+0

我已經更新了我的答案,增加了幾個額外的步驟來獲得更高質量的圖像集,比可以提供ffmpeg: mplayer -ao null -ss 0:00:00 -endpos 10 video.flv -vo jpeg:outdir = jpeg_dir;和 for i in * .jpg;請轉換「$ i」「$ {i%.jpg} .gif」; DONE –

0

將視頻分割成圖像後,使用imagemagick包中的「animate」程序。像這樣 animate ./*.jpg。 然後只保存在ImageMagick程序圖像合併保存爲gif。但它可能很大/然後需要優化和調整大小(最好用mplayer first scale = 240:180來完成)。