Ytdlp_errors / app.py
launch-calcium's picture
Update app.py
7545ca5 verified
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()