moviepy音視頻剪輯基類VideoClip的write_gif方法opt、fuzz、dispose、colors、loop等參數的作用

☞ ░ 前往老猿Python博文目錄

moviepy音視頻剪輯模塊的視頻剪輯基類write_gif方法用於將視頻剪輯輸出到gif文件,調用語法如下:

def write_gif(self, filename, fps=None, program='imageio',
                  opt='nq', fuzz=1, verbose=True,
                  loop=0, dispose=False, colors=None, tempfiles=False,
                  logger='bar'):

部分參數作用在moviepy官方文檔中沒有說明,經查閱相關源代碼和驗證測試,確認相關參數功能功能如下。

參數說明如下:
  • program:用於轉換的軟件,可以是“imageio”(這將通過imageio使用FreeImage庫),或者是“ImageMagick”,或者是“ffmpeg”
  • opt:應用優化的選項,如果program參數是’imageio’,opt必須是’wu’(Wu)或“nq”(Neuquant),。如果program=‘ImageMagick’,opt可以是“optimizeplus”或“OptimizeTransparency”
  • fuzz:僅當program='ImageMagick’時需要,通過考慮小於fuzz%的顏色差異實際上是相同的來壓縮GIF文件大小
  • loop:表示GIF文件播放時循環播放多少次,如果爲0就一直不停地播放,否則播放設定次數後就停止,該參數由GIF文件頭控制
  • dispose:表示播放動畫時渲染當前幀時,如何處理前一幀,該參數由GIF文件頭控制,moviepy沒有說明該參數怎麼使用,缺省值爲False,老猿查閱了相關資料,才基本確認該參數的作用,但GIF中該控制參數有四個取值,不知道是否都支持,取值及含義如下:
  • 爲0表示繪製一個完整大小的、不透明的GIF幀來替換上一幀,就算連續的兩幀只在局部上有細微的差異,每一幀依然是完整獨立的繪製
  • 爲1表示未被當前幀覆蓋的前一幀像素將繼續顯示,這種方式常用於對GIF動畫進行優化,當前幀只需在上一幀的基礎上做局部刷新,上一幀中沒有被當前幀覆蓋的像素區域將繼續展示。這種方式既能節省內存,也能提高解碼速度
  • 爲2 表示繪製當前幀之前,會先把前一幀的繪製區域恢復成背景色,這種方式常用於優化很多幀背景相同的情況,上一幀的背景色能通過當前幀的透明區域顯示
  • 爲3表示繪製當前幀時,會先恢復到最近一個設置爲False或1的幀,然後再將當前幀疊加到上面,這種方式性能比較差,已經被慢慢廢棄
  • colors:關於這個參數moviepy沒有說明,老猿將該值設置爲一個比較大的值,結果報錯“ValueError: GIF quantize param must be 2…256”,最後查閱資料確認該參數表示色彩量化使用的調色板索引,取值爲2到256。GIF最高支持8位256色,那麼如果原圖是真彩色的,則在生成最終效果圖時,就涉及到真彩色到256的降色。真彩色是24位的,有2的24種顏色,每個像素用3個字節標識一個顏色,R、G、B各佔一個字節,而256色每個像素只用一個字節從調色板中索引一種顏色,調色板最多有256種顏色。將2^24種顏色降爲256種顏色,降色的過程被成爲色彩量化。色彩量化過程分兩步:1、根據圖片定製調色板;2、遍歷像素,對於每一個像素,從調色板中找最接近的顏色,記錄該顏色索引。關於調色板請參考《調色板詳解
  • tempfiles:將每個幀寫入一個文件,而不是將它們傳遞到RAM中。在內存很少的計算機上很有用,只能與ImageMagick或ffmpeg一起使用。

更多關於VideoClip的屬性和方法請參考《moviepy音視頻剪輯:視頻剪輯基類VideoClip的屬性及方法詳解》(免費文章)或《moviepy音視頻剪輯:視頻剪輯基類VideoClip詳解》(付費專欄文章,但內容更全、案例更多)。

更多關於VideoClip的屬性和方法請參考《moviepy音視頻剪輯:視頻剪輯基類VideoClip的屬性及方法詳解》(免費文章)或《moviepy音視頻剪輯:視頻剪輯基類VideoClip詳解》(付費專欄文章,但內容更全、案例更多)。

更多moviepy的介紹請參考《PyQt+moviepy音視頻剪輯實戰文章目錄》或《專欄:使用PyQt開發圖形界面Python應用》。

跟老猿學Python、學5G!

☞ ░ 前往老猿Python博文目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章