audio-trim / app.py
sheikhed's picture
Update app.py
8c9b09a verified
import os
import gradio as gr
import re
def extract_shortcode(url):
"""Extract Instagram shortcode from various URL formats"""
patterns = [
r'instagram\.com/p/([^/?]+)',
r'instagram\.com/reel/([^/?]+)',
r'instagram\.com/tv/([^/?]+)',
]
for pattern in patterns:
match = re.search(pattern, url)
if match:
return match.group(1)
return None
def download_reel_audio(url, output_folder="downloads"):
"""
Download audio from Instagram reel using instaloader
"""
try:
import instaloader
# Clean URL and create output directory
clean_url = url.split('?')[0].strip()
shortcode = extract_shortcode(clean_url)
if not shortcode:
return "Invalid Instagram URL", None
os.makedirs(output_folder, exist_ok=True)
# Create instaloader instance - download only what we need
L = instaloader.Instaloader(
download_pictures=False,
download_videos=False,
download_video_thumbnails=False,
download_geotags=False,
download_comments=False,
save_metadata=False,
compress_json=False
)
# Get post info
post = instaloader.Post.from_shortcode(L.context, shortcode)
if not post.is_video:
return "This post doesn't contain a video", None
# Get video URL directly
video_url = post.video_url
# Download video content
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15',
}
response = requests.get(video_url, headers=headers)
if response.status_code != 200:
return f"Failed to download video: {response.status_code}", None
# Save video temporarily
import tempfile
with tempfile.NamedTemporaryFile(delete=False, suffix='.mp4') as temp_video:
temp_video.write(response.content)
temp_video_path = temp_video.name
# Extract audio using ffmpeg
audio_filename = f"instagram_audio_{shortcode}.mp3"
audio_path = os.path.join(output_folder, audio_filename)
import subprocess
cmd = [
'ffmpeg', '-i', temp_video_path,
'-vn', '-acodec', 'mp3', '-ab', '192k',
'-y', audio_path
]
result = subprocess.run(cmd, capture_output=True, text=True)
# Clean up temp file
os.unlink(temp_video_path)
if result.returncode != 0:
return f"Audio extraction failed: {result.stderr}", None
return "Audio downloaded successfully!", audio_path
except ImportError:
return "Please install: pip install instaloader requests", None
except Exception as e:
return f"Error downloading audio: {str(e)}", None
# Gradio Interface
interface = gr.Interface(
fn=download_reel_audio,
inputs=gr.Textbox(
label="Instagram Reel URL",
placeholder="Enter public Instagram reel URL (e.g., https://www.instagram.com/reel/...)"
),
outputs=[
gr.Textbox(label="Status"),
gr.Audio(label="Downloaded Audio")
],
title="Instagram Reel to Audio Downloader",
description="Enter URL of a public Instagram reel to download its audio as MP3",
theme="default"
)
if __name__ == "__main__":
interface.launch()