Создание анимированного 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)