Spaces:
Sleeping
Sleeping
import os | |
import moviepy.video.io.VideoFileClip as mp | |
import gradio as gr | |
from concurrent.futures import ThreadPoolExecutor | |
def split_video(video_file, parts, resolution, quality, audio_enabled, volume): | |
video = mp.VideoFileClip(video_file.name) | |
duration = video.duration | |
part_duration = duration / parts | |
output_files = [] | |
with ThreadPoolExecutor() as executor: | |
futures = [] | |
for part in range(parts): | |
start_time = part * part_duration | |
end_time = (part + 1) * part_duration | |
futures.append(executor.submit(process_part, video, start_time, end_time, resolution, quality, audio_enabled, volume, part)) | |
for future in futures: | |
output_filename = future.result() | |
output_files.append(output_filename) | |
return output_files | |
def process_part(video, start_time, end_time, resolution, quality, audio_enabled, volume, part): | |
part_clip = video.subclip(start_time, end_time) | |
# Настройка параметров кодирования | |
if quality == "Низкое": | |
bitrate = "1M" | |
elif quality == "Среднее": | |
bitrate = "2M" | |
else: | |
bitrate = "4M" | |
# Настройка параметров звука | |
if not audio_enabled: | |
part_clip.audio = None | |
else: | |
part_clip.audio = part_clip.audio.volumex(volume) | |
# Сохранение видео | |
output_filename = f"part_{part + 1}.mp4" | |
part_clip.write_videofile( | |
output_filename, | |
codec="libx264", | |
audio_codec="aac", | |
bitrate=bitrate, | |
preset="medium", | |
ffmpeg_params=["-vf", f"scale={resolution}"], | |
) | |
return output_filename | |
iface = gr.Interface( | |
fn=split_video, | |
inputs=[ | |
gr.File(label="Upload Video"), | |
gr.Slider(minimum=2, maximum=10, value=2, label="Number of Parts"), | |
gr.Dropdown(choices=["720p", "1080p", "4K"], label="Resolution"), | |
gr.Dropdown(choices=["Низкое", "Среднее", "Высокое"], label="Качество"), | |
gr.Checkbox(label="Включить звук"), | |
gr.Slider(minimum=0, maximum=2, value=1, label="Громкость"), | |
], | |
outputs=gr.Files(label="Download Split Videos"), | |
title="Video Splitter", | |
description="Upload your video and select how many parts you want to split it into." | |
) | |
if __name__ == "__main__": | |
iface.launch() |