Yaroslav commited on
Commit
9a9f3ed
·
verified ·
1 Parent(s): 165497b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +67 -9
app.py CHANGED
@@ -1,29 +1,87 @@
 
1
  import os
2
  import gradio as gr
3
- from rife_ncnn_vulkan import RIFE
4
-
5
- # Инициализация модели RIFE
6
- model = RIFE()
7
 
 
8
  def increase_fps(input_video_path, target_fps=60):
9
  output_path = "output.mp4"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
- # Используем RIFE для интерполяции кадров
12
- model.process_video(input_video_path, output_path, target_fps)
13
 
14
  return output_path
15
 
 
16
  def process_video(video_path):
17
- return increase_fps(video_path)
 
 
 
 
18
 
19
  interface = gr.Interface(
20
  fn=process_video,
21
  inputs=gr.Video(label="Загрузите видео для обработки"),
22
  outputs=gr.Video(label="Видео с увеличенным FPS"),
23
  title="Увеличение FPS до 60",
24
- description="Этот инструмент увеличивает частоту кадров видео до 60 FPS с использованием интерполяции RIFE. Загрузите видео с низким FPS, чтобы получить плавный результат.",
 
 
 
25
  examples=[]
26
  )
27
 
 
28
  if __name__ == "__main__":
29
- interface.launch()
 
1
+ import cv2
2
  import os
3
  import gradio as gr
 
 
 
 
4
 
5
+ # Функция для увеличения FPS
6
  def increase_fps(input_video_path, target_fps=60):
7
  output_path = "output.mp4"
8
+ cap = cv2.VideoCapture(input_video_path)
9
+ input_fps = cap.get(cv2.CAP_PROP_FPS)
10
+ frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
11
+ width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
12
+ height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
13
+ codec = cv2.VideoWriter_fourcc(*"mp4v")
14
+
15
+ # Проверка: если входное FPS >= 60, просто копируем файл
16
+ if input_fps >= target_fps:
17
+ cap.release()
18
+ return input_video_path # Возвращаем оригинальное видео
19
+
20
+ # Расчет коэффициента интерполяции
21
+ ratio = target_fps / input_fps
22
+ output = cv2.VideoWriter(output_path, codec, target_fps, (width, height))
23
+ ret, prev_frame = cap.read()
24
+
25
+ # Проверка первого кадра
26
+ if not ret:
27
+ cap.release()
28
+ output.release()
29
+ raise ValueError("Не удалось прочитать кадры из видео.")
30
+
31
+ prev_frame_gray = cv2.cvtColor(prev_frame, cv2.COLOR_BGR2GRAY)
32
+
33
+ for _ in range(frame_count - 1):
34
+ ret, next_frame = cap.read()
35
+ if not ret:
36
+ break
37
+
38
+ # Преобразуем текущий кадр в черно-белый
39
+ next_frame_gray = cv2.cvtColor(next_frame, cv2.COLOR_BGR2GRAY)
40
+
41
+ # Убедимся, что размеры кадров совпадают
42
+ if prev_frame_gray.shape != next_frame_gray.shape:
43
+ next_frame_gray = cv2.resize(next_frame_gray, (prev_frame_gray.shape[1], prev_frame_gray.shape[0]))
44
+
45
+ # Оптический поток
46
+ flow = cv2.calcOpticalFlowFarneback(
47
+ prev_frame_gray, next_frame_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0
48
+ )
49
+
50
+ # Генерация промежуточных кадров
51
+ for i in range(1, int(ratio)):
52
+ alpha = i / ratio
53
+ intermediate_frame = cv2.addWeighted(prev_frame_gray, 1 - alpha, next_frame_gray, alpha, 0)
54
+ intermediate_bgr = cv2.cvtColor(intermediate_frame, cv2.COLOR_GRAY2BGR)
55
+ output.write(intermediate_bgr)
56
+
57
+ output.write(next_frame)
58
+ prev_frame_gray = next_frame_gray
59
 
60
+ cap.release()
61
+ output.release()
62
 
63
  return output_path
64
 
65
+ # Gradio интерфейс
66
  def process_video(video_path):
67
+ try:
68
+ result_path = increase_fps(video_path)
69
+ return result_path
70
+ except Exception as e:
71
+ return f"Ошибка обработки: {str(e)}"
72
 
73
  interface = gr.Interface(
74
  fn=process_video,
75
  inputs=gr.Video(label="Загрузите видео для обработки"),
76
  outputs=gr.Video(label="Видео с увеличенным FPS"),
77
  title="Увеличение FPS до 60",
78
+ description=(
79
+ "Этот инструмент увеличивает частоту кадров видео до 60 FPS с использованием "
80
+ "оптического потока. Загрузите видео с низким FPS, чтобы получить плавный результат."
81
+ ),
82
  examples=[]
83
  )
84
 
85
+ # Запуск интерфейса
86
  if __name__ == "__main__":
87
+ interface.launch(share=True)