2017-03-23 260 views
1

我從我的服務器上的視頻生成動畫gif。FFMPEG:高品質的動畫GIF?

生成的動畫gif並不是真正的高品質,它看起來像素很大。

例子:

enter image description here

我這是怎麼生成的GIF:

shell_exec("/usr/bin/ffmpeg -i video.mkv -vf scale=500:-1 -t 10 -r 10 image.gif"); 

我做了谷歌搜索,並跨越這些代碼來:

shell_exec("/usr/bin/ffmpeg -i video.mkv -r 20 -f image2pipe -vcodec ppm - | convert -delay 5 - output.gif"); 

但上面的代碼不會執行任何操作,也不會執行任何操作正在生成。

有人請讓我知道是否有明確的方法來產生高的quality gif using ffmpeg

有一些教程,我遇到過,但他們都沒有爲我工作,其中一些涉及使用imagemagic,我沒有訪問。

+0

http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html你可以試試這裏的抖動和palettegen參數播放。 –

+0

@AleksandarMisich,這是我在google中遇到的第一件事情。但是,正如我在我的問題中所述,我無法訪問imagemagic,所以教程對我來說並不好。對我有意義.. –

+0

你不需要該教程的imagemagick。 – Mulvya

回答

6

我寫了一個工具,專門用於最高品質:

https://gif.ski

ffmpeg -i video.mp4 frame%04d.png 
gifski -o clip.gif frame*.png 

它不僅產生每幀的調色板,又融合了調色板跨框架,實現甚至上千的每幀顏色。

smooth

+1

這太神奇了... –

+0

絕對是殺手鐗。 – ryanjdillon

1

的關鍵問題是,任何GIF圖片或幀具有的唯一可能的百萬色彩256影片中的極爲有限的調色板

This is well explained here.

所以,相當最近(2015年,2.6版)的ffmpeg得到palettegenpaletteuse過濾器,可以產生每幀更好pallettes。

因此,請確保您使用的是最近的版本的ffmpeg的

因此,這裏有你的祕密和關鍵字搜索詞讓你在任何時間製作高品質的GIF - 研究palettegen過濾器。 Reddit beware.

一些參考:

ffmpeg 2.6 release notes

ffmpeg docs

superuser

blog.phk.me

+0

我使用的是2.6.8版本,我認爲它的最新版本... –

1
shell_exec("/usr/bin/ffmpeg -i video.mkv -r 20 -f image2pipe -vcodec ppm - | convert -delay 5 - output.gif"); 

我想ÿ您沒有imageMagick安裝在您的環境中,因爲convert是IM的一種工具。

至於視頻工件,它是由FFmpeg中的默認抖動方法引起的。爲了達到最佳效果,我建議floyd_steinbergsierra2_4a,並與規模設定爲3也許bayer(另外,有沒有這樣的事情,如「龐大」的像素,它們是光柵圖像的基本元素。)

在另一方面,你只能用ffmpeg獲得更好的結果。 首先,我會產生輸入視頻的調色板:

ffmpeg -i <your_input.mkv> -filter_complex "fps=10;scale=500:-1:flags=lanczos,palettegen=stats_mode=full" -t 10 palette.png 

然後,使用這種顏色的模板來生成實際的gif文件:

ffmpeg -i <your_input.mkv> -i palette.png -filter_complex "[0]fps=10;scale=500:-1:flags=lanczos[scaled]; [scaled][1:v] paletteuse=dither=sierra2_4a" -t 10 <output.gif> 

您可能需要與PARAMS撥弄和抖動方法達到最佳效果。您也可以嘗試爲每個幀生成新的調色板,因此您可以跳過第一遍,並使用paletteuse過濾器中的new選項。