Spaces:
Build error
Build error
File size: 4,295 Bytes
a5d0e38 7545ca5 a5d0e38 7545ca5 a5d0e38 7545ca5 a5d0e38 7545ca5 a5d0e38 7545ca5 a5d0e38 7545ca5 a5d0e38 7545ca5 a5d0e38 7545ca5 a5d0e38 | 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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | import gradio as gr
import subprocess
import os
from pathlib import Path
# Install ffmpeg (runs once when space starts)
subprocess.run(["apt-get", "update"], check=False)
subprocess.run(["apt-get", "install", "-y", "ffmpeg"], check=False)
def convert_audio(audio_file, output_format):
try:
if audio_file is None:
return "β No file uploaded", None
# Create output filename
input_path = audio_file
output_path = f"/tmp/output.{output_format}"
# Run FFmpeg command
cmd = ["ffmpeg", "-i", input_path, "-y", output_path]
subprocess.run(cmd, capture_output=True, check=True)
return f"β Converted to {output_format.upper()}", output_path
except Exception as e:
return f"β Error: {str(e)}", None
def extract_audio(video_file):
try:
if video_file is None:
return "β No file uploaded", None
output_path = "/tmp/extracted_audio.mp3"
# Extract audio from video
cmd = ["ffmpeg", "-i", video_file, "-q:a", "0", "-map", "a", "-y", output_path]
subprocess.run(cmd, capture_output=True, check=True)
return "β Audio extracted", output_path
except Exception as e:
return f"β Error: {str(e)}", None
def compress_video(video_file, quality):
try:
if video_file is None:
return "β No file uploaded", None
output_path = "/tmp/compressed_video.mp4"
crf_value = int(quality) # 0-51, lower = better quality
# Compress video
cmd = ["ffmpeg", "-i", video_file, "-crf", str(crf_value), "-y", output_path]
subprocess.run(cmd, capture_output=True, check=True)
return "β Video compressed", output_path
except Exception as e:
return f"β Error: {str(e)}", None
# Create Gradio interface
with gr.Blocks(title="FFmpeg Tools") as demo:
gr.Markdown("# FFmpeg Media Tools")
with gr.Tabs():
# Tab 1: Audio Conversion
with gr.Tab("Audio Converter"):
gr.Markdown("Convert audio between formats")
audio_input = gr.Audio(label="Upload Audio", type="filepath")
format_select = gr.Dropdown(
choices=["mp3", "wav", "aac", "flac", "ogg"],
value="mp3",
label="Output Format"
)
audio_convert_btn = gr.Button("Convert", variant="primary")
audio_status = gr.Textbox(label="Status", interactive=False)
audio_output = gr.File(label="Download")
audio_convert_btn.click(
fn=convert_audio,
inputs=[audio_input, format_select],
outputs=[audio_status, audio_output]
)
# Tab 2: Extract Audio from Video
with gr.Tab("Extract Audio"):
gr.Markdown("Extract audio track from video files")
video_input = gr.Video(label="Upload Video")
extract_btn = gr.Button("Extract Audio", variant="primary")
extract_status = gr.Textbox(label="Status", interactive=False)
extract_output = gr.File(label="Download MP3")
extract_btn.click(
fn=extract_audio,
inputs=[video_input],
outputs=[extract_status, extract_output]
)
# Tab 3: Video Compression
with gr.Tab("Video Compressor"):
gr.Markdown("Compress video files (lower CRF = better quality)")
video_comp_input = gr.Video(label="Upload Video")
quality_slider = gr.Slider(
minimum=18,
maximum=51,
value=28,
step=1,
label="Quality (CRF: 18=high, 51=low)"
)
compress_btn = gr.Button("Compress", variant="primary")
compress_status = gr.Textbox(label="Status", interactive=False)
compress_output = gr.File(label="Download")
compress_btn.click(
fn=compress_video,
inputs=[video_comp_input, quality_slider],
outputs=[compress_status, compress_output]
)
demo.launch()
|