【问题标题】:Creating an animated gif with PIL that does not loop使用不循环的 PIL 创建动画 gif
【发布时间】:2019-02-11 00:34:49
【问题描述】:

我已经能够使用 PIL 创建无限循环的动画 gif,而不会出现问题,通常以类似

的方式结束

final_image.save('/path/to/images/some.gif, save_all=True, append_images=frames_images, duration=frame_speeds, loop=0)

我现在处于一种情况,我想创建一个播放一次且不循环播放的 gif。我使用的 PIL 文档¹对循环参数非常清楚,但对我的情况没有提供任何建议:

循环:int
迭代次数。默认 0(表示无限循环)。

0 导致它无限循环。 1 导致它循环一次(播放两次)。我尝试了 -1 和 None 之类的选项,但找不到有效的参数。我目前正在使用一种解决方法,之后我会调用 gifsicle 以完全删除循环,但希望 PIL 能够原生支持这一点

¹ - https://imageio.readthedocs.io/en/stable/format_gif-pil.html

【问题讨论】:

  • 当然 loop=1 意味着它循环(并因此播放)一次,而不是您建议的两次?
  • @Gavin 不幸的是,loop=1 似乎导致序列播放两次
  • 可能取决于 imageio / 枕头的版本 - 请参阅以下合并请求,因为它似乎是旧版本的 imageio 和 一些 gif 播放器之间的不兼容(即 chrome for实例)。 imageio merge request
  • @user1026361 您似乎偶然发现了 Pillow for Python 当前发行版中的一个错误。我能够复制您的问题,实际上,当通过 loop=n 时,GIF 将始终循环 n+1 次 - 我只能建议将其作为错误提交给维护者并使用您的解决方法暂时强制执行单个循环.请注意,@Gavin 是正确的,问题是相关的 - Chrome 会为n=1 循环两次,而一些观众只循环一次(而其他人则无休止地循环相同的 .gif)
  • 谢谢@Grismar 和 Gavin - 我从来没有遇到过 PIL 的问题,也没有认为这可能是一个错误。我将继续我的工作并与维护者跟进

标签: python python-imaging-library gifsicle


【解决方案1】:

如果您使用的是 Pillow,则可以省略循环参数。这将确保没有循环。 https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html#saving 另请注意,持续时间以毫秒为单位,而不是秒。

【讨论】:

  • 我不知道为什么这不是公认的答案。这个对我有用。谢谢!
【解决方案2】:

多么有趣的巧合。我有一个代码显示 GIF 一次迭代,然后冻结直到 mp3 文件完成......但我需要一个无限循环的 GIF。

唯一的区别是我使用了库moviepy。


可行的解决方案:

from moviepy.editor import *
import moviepy.editor as mp


# Import the audio(Insert to location of your audio instead of audioClip.mp3)
audio = AudioFileClip("PATH/TO/MP3_FILE")

clip = VideoFileClip("PATH/TO/GIF_FILE").set_duration(audio.duration)


# Set the audio of the clip
clip = clip.set_audio(audio)


clip_resized = clip.resize((1920, 1080)) 


# Export the clip
clip_resized.write_videofile("movie_resized.mp4", fps=24)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2017-12-03
    • 2012-06-25
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多