簡體   English   中英

獲取每秒的gif幀數(在python中)?

[英]Get frames per second of a gif in python?

在python中,即時通訊使用PIL加載gif。 我提取第一幀,對其進行修改,然后放回去。 我用以下代碼保存修改后的gif

imgs[0].save('C:\\etc\\test.gif',
           save_all=True,
           append_images=imgs[1:],
           duration=10,
           loop=0)

其中imgs是組成gif的圖像數組,持續時間是指幀之間的延遲(以毫秒為單位)。 我想使持續時間值與原始gif相同,但不確定如何提取gif的總持續時間或每秒顯示的幀。

據我所知,gif的頭文件不提供任何fps信息。

有誰知道我如何獲得持續時間的正確值?

提前致謝

編輯:要求的gif示例:

在此處輸入圖片說明

這里取回。

在GIF文件中,每個幀都有其自己的持續時間。 因此,GIF文件沒有通用的fps。 PIL支持此功能的方式是通過提供一個info ,該命令給出當前幀的duration 您可以使用seektell來遍歷幀並計算總持續時間。

這是一個示例程序,用於計算GIF文件每秒的平均幀數。

import os
from PIL import Image

FILENAME = os.path.join(os.path.dirname(__file__),
                        'Rotating_earth_(large).gif')

def get_avg_fps(PIL_Image_object):
    """ Returns the average framerate of a PIL Image object """
    PIL_Image_object.seek(0)
    frames = duration = 0
    while True:
        try:
            frames += 1
            duration += PIL_Image_object.info['duration']
            PIL_Image_object.seek(PIL_Image_object.tell() + 1)
        except EOFError:
            return frames / duration * 1000
    return None

def main():
    img_obj = Image.open(FILENAME)
    print(f"Average fps: {get_avg_fps(img_obj)}")

if __name__ == '__main__':
    main()

如果您假設所有幀的duration都相等,則可以執行以下操作:

print(1000 / Image.open(FILENAME).info['duration'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM