portalniy-dev commited on
Commit
2a6403a
·
verified ·
1 Parent(s): 8f6c465

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -4
app.py CHANGED
@@ -3,6 +3,7 @@ import random
3
  import re
4
  import struct
5
  import gradio as gr
 
6
 
7
  # Основная функция для обработки видео
8
  def glitch_video(file, mode, countframes, positframes, audio, firstframe, kill):
@@ -76,15 +77,15 @@ def glitch_video(file, mode, countframes, positframes, audio, firstframe, kill):
76
  elif mode == "reverse":
77
  final = clean[::-1]
78
  elif mode == "invert":
79
- final = list(chain(*zip(clean[0::2], clean[1::2])))
80
  elif mode == "bloom":
81
  final = clean[:int(positframes)] + [clean[int(positframes)]] * int(countframes) + clean[int(positframes):]
82
  elif mode == "pulse":
83
- final = [frame for i, frame in enumerate(clean) for _ in range(int(countframes)) if i % int(positframes) == 0] + clean
84
  elif mode == "jiggle":
85
  final = [clean[min(max(0, x + int(random.gauss(0, int(positframes)))), len(clean) - 1)] for x in range(len(clean))]
86
  elif mode == "overlap":
87
- final = [frame for sublist in [clean[i:i+int(countframes)] for i in range(0, len(clean), int(positframes))] for frame in sublist]
88
 
89
  # Сборка видео обратно
90
  fileout = f"{os.path.splitext(filein)[0]}-{mode}.avi"
@@ -100,13 +101,19 @@ def glitch_video(file, mode, countframes, positframes, audio, firstframe, kill):
100
  wr.write(rd.read(size))
101
  bstream_until_marker(temp_idx1, fileout)
102
 
 
 
 
 
 
103
  # Очистка временных файлов
104
  os.remove(temp_hdrl)
105
  os.remove(temp_movi)
106
  os.remove(temp_idx1)
 
107
  os.rmdir(temp_dir)
108
 
109
- return fileout
110
 
111
  # Интерфейс Gradio
112
  with gr.Blocks() as demo:
 
3
  import re
4
  import struct
5
  import gradio as gr
6
+ import subprocess
7
 
8
  # Основная функция для обработки видео
9
  def glitch_video(file, mode, countframes, positframes, audio, firstframe, kill):
 
77
  elif mode == "reverse":
78
  final = clean[::-1]
79
  elif mode == "invert":
80
+ final = sum(zip(clean[1::2], clean[::2]), ())
81
  elif mode == "bloom":
82
  final = clean[:int(positframes)] + [clean[int(positframes)]] * int(countframes) + clean[int(positframes):]
83
  elif mode == "pulse":
84
+ final = [val for i, val in enumerate(clean) for _ in range(int(countframes)) if i % int(positframes) == 0] + clean
85
  elif mode == "jiggle":
86
  final = [clean[min(max(0, x + int(random.gauss(0, int(positframes)))), len(clean) - 1)] for x in range(len(clean))]
87
  elif mode == "overlap":
88
+ final = [item for sublist in [clean[i:i+int(countframes)] for i in range(0, len(clean), int(positframes)) ] for item in sublist]
89
 
90
  # Сборка видео обратно
91
  fileout = f"{os.path.splitext(filein)[0]}-{mode}.avi"
 
101
  wr.write(rd.read(size))
102
  bstream_until_marker(temp_idx1, fileout)
103
 
104
+ # Конвертация в .mp4 для обеспечения совместимости
105
+ fileout_mp4 = f"{os.path.splitext(filein)[0]}-{mode}.mp4"
106
+ cmd = f"ffmpeg -i {fileout} -c:v libx264 -crf 18 -preset veryfast {fileout_mp4}"
107
+ subprocess.run(cmd, shell=True, check=True)
108
+
109
  # Очистка временных файлов
110
  os.remove(temp_hdrl)
111
  os.remove(temp_movi)
112
  os.remove(temp_idx1)
113
+ os.remove(fileout)
114
  os.rmdir(temp_dir)
115
 
116
+ return fileout_mp4
117
 
118
  # Интерфейс Gradio
119
  with gr.Blocks() as demo: