Создание анимированного GIF с PIL, который не зацикливается

Я был в состоянии создавать анимированные GIF-файлы, которые бесконечно зацикливаются, используя PIL без проблем, обычно заканчивая чем-то вроде

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

2 ответа

Если вы используете Pillow, вы можете опустить аргумент цикла. Это гарантирует отсутствие петли. https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html Также следует отметить, что продолжительность указывается в миллисекундах, а не в секундах.

Какое забавное совпадение. У меня есть код, который показывает одну итерацию 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)
Другие вопросы по тегам