Я пытаюсь написать код Python, который гарантирует, что размер файла gif не превышает 15 МБ. Я пытался использовать команды gifsicle для оптимизации/уменьшения количества цветов в GIF-файле, но постоянно находил примеры, когда размер полученного GIF-файла превышал 15 МБ, а моему коду не удавалось уменьшить размер файла.
мои GIF-изображения все они очень красочные, поэтому я думаю, что это и является причиной проблемы.
Я начинаю с необработанной формы gif самого высокого качества: exampleGif3.gif, размер которой составляет 50 МБ: https: //filetransfer.io/data-package/FDN6j4bf#link
И я запускаю свой скрипт, чтобы попытаться уменьшить размер файла до 15 МБ:
python3 reduce_gif.py --gifPath "exampleGif3.gif"
Что вы можете видеть по выводам журнала, запускает различные команды gifsicle, где значения --lossy и --colors опускаться каждый раз при запуске команды.
$ python3 reduce_gif.py --gifPath "exampleGif3.gif"
GIF: exampleGif3.gif (50.73 MB)
Optimizing attempt 0: reduceSizeAttempt_0_exampleGif3.gif
running optimize command: gifsicle --optimize --lossy=90 --colors=256 exampleGif3.gif -o reduceSizeAttempt_0_exampleGif3.gif
Optimized GIF: reduceSizeAttempt_0_exampleGif3.gif (24.64 MB)
Optimizing attempt 1: reduceSizeAttempt_1_exampleGif3.gif
running optimize command: gifsicle --optimize --lossy=80 --colors=246 reduceSizeAttempt_0_exampleGif3.gif -o reduceSizeAttempt_1_exampleGif3.gif
Optimized GIF: reduceSizeAttempt_1_exampleGif3.gif (26.43 MB)
Optimizing attempt 2: reduceSizeAttempt_2_exampleGif3.gif
running optimize command: gifsicle --optimize --lossy=70 --colors=236 reduceSizeAttempt_1_exampleGif3.gif -o reduceSizeAttempt_2_exampleGif3.gif
Optimized GIF: reduceSizeAttempt_2_exampleGif3.gif (28.12 MB)
Optimizing attempt 3: reduceSizeAttempt_3_exampleGif3.gif
running optimize command: gifsicle --optimize --lossy=60 --colors=226 reduceSizeAttempt_2_exampleGif3.gif -o reduceSizeAttempt_3_exampleGif3.gif
Optimized GIF: reduceSizeAttempt_3_exampleGif3.gif (29.86 MB)
Optimizing attempt 4: reduceSizeAttempt_4_exampleGif3.gif
running optimize command: gifsicle --optimize --lossy=50 --colors=216 reduceSizeAttempt_3_exampleGif3.gif -o reduceSizeAttempt_4_exampleGif3.gif
Optimized GIF: reduceSizeAttempt_4_exampleGif3.gif (31.69 MB)
Optimizing attempt 5: reduceSizeAttempt_5_exampleGif3.gif
running optimize command: gifsicle --optimize --lossy=40 --colors=206 reduceSizeAttempt_4_exampleGif3.gif -o reduceSizeAttempt_5_exampleGif3.gif
Optimized GIF: reduceSizeAttempt_5_exampleGif3.gif (33.31 MB)
Finished optimization attempts
Но мои полученные GIF-изображения на самом деле увеличиваются в размере:
[img]https:// i.sstatic.net/LnNZ1Qdr.png[/img]
Как я могу использовать gifsicle с моим кодом уменьшить_gif.py, чтобы правильно уменьшить размер файла gif?import os
import argparse
import subprocess
# Run like: `python3 reduce_gif.py --gifPath "exampleGif3.gif" `
# Parse command line arguments
parser = argparse.ArgumentParser(description="Optimize GIF file if it's larger than 15MB")
parser.add_argument('--gifPath', type=str, required=True, help="Path to the GIF file")
parser.add_argument('--maxAttempts', type=int, default=5, help="Maximum number of optimization attempts")
args = parser.parse_args()
gif_filename = args.gifPath
max_attempts = args.maxAttempts
original_filename = os.path.basename(gif_filename)
# Get gif filesize
gif_filesize = os.path.getsize(gif_filename) / (1024 * 1024)
print(f'GIF: {gif_filename} ({gif_filesize:.2f} MB)')
# If filesize is greater than 15MB, try to optimize it
attempt = 0
while gif_filesize > 15 and attempt
Подробнее здесь: https://stackoverflow.com/questions/786 ... nder-15-mb