import os
import cv2
from PIL import Image
# Поддерживаемые расширения
IMAGE_EXTS = ['.png', '.jpg', '.jpeg', '.webp', '.bmp', '.tiff']
VIDEO_EXTS = ['.mp4', '.avi', '.mov', '.mkv', '.wmv']
def convert_image(input_path: str, target_format: str):
"""Конвертация изображений (PNG, JPG, WEBP и др.)"""
ext = target_format.lower()
if not ext.startswith('.'):
ext = '.' + ext
output_path = os.path.splitext(input_path)[0] + f"_converted{ext}"
try:
with Image.open(input_path) as img:
# Для сохранения в JPG убираем прозрачность (Альфа-канал)
if ext in ['.jpg', '.jpeg'] and img.mode in ('RGBA', 'LA', 'P'):
img = img.convert('RGB')
img.save(output_path)
print(f"[✓] Картинка успешно сохранена: {output_path}")
except Exception as e:
print(f"[!] Ошибка конвертации картинки: {e}")
def convert_video(input_path: str, target_format: str):
"""Конвертация видео (MP4, AVI, MOV и др.)"""
ext = target_format.lower()
if not ext.startswith('.'):
ext = '.' + ext
output_path = os.path.splitext(input_path)[0] + f"_converted{ext}"
cap = cv2.VideoCapture(input_path)
if not cap.isOpened():
print(f"[!] Ошибка: Не удалось открыть видео {input_path}")
return
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
if fps == 0:
fps = 30.0
# Выбираем подхощий FourCC-кодек в зависимости от формата
if ext == '.mp4':
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
elif ext == '.avi':
fourcc = cv2.VideoWriter_fourcc(*'XVID')
else:
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
print(f"Обработка видео {input_path} -> {ext}...")
frame_count = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
out.write(frame)
frame_count += 1
cap.release()
out.release()
print(f"[✓] Видео успешно сохранено: {output_path} (кадров: {frame_count})")
def main():
print("====================================")
print(" УНИВЕРСАЛЬНЫЙ КОНВЕРТЕР ")
print("====================================")
file_path = input("Перетащите файл сюда (или введите путь): ").strip(' "\'')
if not os.path.exists(file_path):
print("[!] Ошибка: Файл не найден!")
return
file_ext = os.path.splitext(file_path)[1].lower()
if file_ext in IMAGE_EXTS:
print(f"\n[+] Обнаружена картинка ({file_ext})")
print("Доступные форматы: png, jpg, webp, bmp, tiff")
target_fmt = input("В какой формат перевести? ").strip()
convert_image(file_path, target_fmt)
elif file_ext in VIDEO_EXTS:
print(f"\n[+] Обнаружено видео ({file_ext})")
print("Доступные форматы: mp4, avi, mov, mkv")
target_fmt = input("В какой формат перевести? ").strip()
convert_video(file_path, target_fmt)
else:
print("[!] Неподдерживаемый формат файла.")
if __name__ == "__main__":
main()