File size: 2,327 Bytes
19f68b8 65f9346 19f68b8 65f9346 19f68b8 65f9346 e23285e 19f68b8 6f47cc6 e804a7f a6d9fdb 6f47cc6 19f68b8 e804a7f a6d9fdb 19f68b8 a6d9fdb 6f47cc6 19f68b8 a6d9fdb 6f47cc6 19f68b8 65f9346 19f68b8 65f9346 19f68b8 e23285e 19f68b8 |
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 |
import cv2
import os
import gradio as gr
# Функция для увеличения FPS
def increase_fps(input_video_path, target_fps=60):
output_path = "output.mp4"
cap = cv2.VideoCapture(input_video_path)
input_fps = cap.get(cv2.CAP_PROP_FPS)
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
codec = cv2.VideoWriter_fourcc(*"mp4v")
if input_fps >= target_fps:
cap.release()
return input_video_path
ratio = target_fps / input_fps
output = cv2.VideoWriter(output_path, codec, target_fps, (width, height))
ret, prev_frame = cap.read()
if not ret:
cap.release()
output.release()
raise ValueError("Не удалось прочитать кадры из видео.")
prev_frame_gray = cv2.cvtColor(prev_frame, cv2.COLOR_BGR2GRAY)
while True:
ret, next_frame = cap.read()
if not ret:
break
next_frame_gray = cv2.cvtColor(next_frame, cv2.COLOR_BGR2GRAY)
flow = cv2.calcOpticalFlowFarneback(prev_frame_gray, next_frame_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
for i in range(1, int(ratio)):
alpha = i / ratio
flow_intermediate = flow * alpha
intermediate_frame = cv2.remap(prev_frame, flow_intermediate, None, cv2.INTER_LINEAR)
output.write(intermediate_frame)
output.write(next_frame)
prev_frame_gray = next_frame_gray
prev_frame = next_frame
cap.release()
output.release()
return output_path
def process_video(video_path):
return increase_fps(video_path)
interface = gr.Interface(
fn=process_video,
inputs=gr.Video(label="Загрузите видео для обработки"),
outputs=gr.Video(label="Видео с увеличенным FPS"),
title="Увеличение FPS до 60",
description="Этот инструмент увеличивает частоту кадров видео до 60 FPS с использованием оптического потока. Загрузите видео с низким FPS, чтобы получить плавный результат.",
examples=[]
)
if __name__ == "__main__":
interface.launch() |