import gradio as gr import cv2 import numpy as np import ffmpeg def resize_and_stretch_ffmpeg(video_path, direction): """ Уменьшает видео по горизонтали или вертикали на 25%, а затем растягивает обратно с помощью интерполяции Ланцоша, используя ffmpeg. Args: video_path: Путь к видеофайлу. direction: Направление сжатия ("horizontal" или "vertical"). Returns: Путь к обработанному видеофайлу. """ output_path = "output_video_ffmpeg.mp4" # Получаем свойства видео с помощью ffprobe probe = ffmpeg.probe(video_path) video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None) width = int(video_stream['width']) height = int(video_stream['height']) # Вычисляем новые размеры if direction == "horizontal": new_width = int(width * 0.75) new_height = height scale_down_filter = f"scale={new_width}:{new_height}:flags=lanczos" scale_up_filter = f"scale={width}:{height}:flags=lanczos" else: # vertical new_width = width new_height = int(height * 0.75) scale_down_filter = f"scale={new_width}:{new_height}:flags=lanczos" scale_up_filter = f"scale={width}:{height}:flags=lanczos" try: ( ffmpeg .input(video_path) .filter('scale', new_width, new_height, flags='lanczos') .filter('scale', width, height, flags='lanczos') .output(output_path, vcodec='libx264', crf=28) #Измените кодек и параметр crf при необходимости .run(capture_stdout=True, capture_stderr=True) ) except ffmpeg.Error as e: print('stdout:', e.stdout.decode('utf8')) print('stderr:', e.stderr.decode('utf8')) raise e return output_path # Создаем интерфейс Gradio (остается таким же, как и в первом примере) iface = gr.Interface( fn=resize_and_stretch_ffmpeg, inputs=[ gr.Video(label="Загрузите видео"), gr.Radio(["horizontal", "vertical"], label="Направление сжатия") ], outputs=gr.Video(label="Обработанное видео"), title="Сжатие и растягивание видео", description="Загрузите видео, выберите направление сжатия (горизонтальное или вертикальное), и программа уменьшит его размер на 25% в этом направлении, а затем растянет обратно с помощью интерполяции Ланцоша (с использованием ffmpeg)." ) iface.launch()