-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmp4_to_gif.py
71 lines (54 loc) · 3 KB
/
mp4_to_gif.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import moviepy.editor as mp
import os
def convert_mp4_to_gif(mp4_path, output_path, max_size_kb, resolution_percent):
# Загрузка видео
clip = mp.VideoFileClip(mp4_path)
# Получение исходного разрешения видео
original_width, original_height = clip.size
# Вычисление нового разрешения на основе процента уменьшения
new_width = int(original_width * (resolution_percent / 100))
new_height = int(original_height * (resolution_percent / 100))
# Изменение разрешения видео
clip = clip.resize((new_width, new_height))
# Определение начального качества GIF
quality = 100
# Флаг для отслеживания текущей итерации (True - изменение качества, False - изменение размера)
quality_iteration = True
while True:
# Создание анимированного GIF с текущим качеством
clip.write_gif(output_path, fps=15, program='ffmpeg', opt=f'optimizeplus -q {quality}')
# Проверка размера полученного GIF
gif_size = os.path.getsize(output_path) / 1024 # Размер в КБ
if gif_size <= max_size_kb:
break
else:
if quality_iteration:
# Уменьшение качества GIF на текущей итерации
quality -= 5
quality_iteration = False
else:
# Уменьшение разрешения GIF на текущей итерации
resolution_percent -= 10
new_width = int(original_width * (resolution_percent / 100))
new_height = int(original_height * (resolution_percent / 100))
clip = clip.resize((new_width, new_height))
quality_iteration = True
print(f"Конвертация завершена. Размер GIF: {gif_size:.2f} КБ")
# Папка с исходными видео файлами
video_folder = "video"
# Папка для сохранения GIF файлов
gif_folder = "gif"
# Создание папки для GIF, если она не существует
if not os.path.exists(gif_folder):
os.makedirs(gif_folder)
# Максимальный размер GIF в килобайтах
max_size_kb = 2500
# Процент разрешения (например, 50% от исходного разрешения)
resolution_percent = 50
# Обработка всех файлов с расширением .mp4 в папке video
for filename in os.listdir(video_folder):
if filename.endswith(".mp4"):
mp4_path = os.path.join(video_folder, filename)
gif_filename = os.path.splitext(filename)[0] + ".gif"
output_path = os.path.join(gif_folder, gif_filename)
convert_mp4_to_gif(mp4_path, output_path, max_size_kb, resolution_percent)