lanzox / app.py
Serg4451D's picture
Update app.py
9e605f0 verified
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()