Spaces:
Sleeping
Sleeping
| title: Video to Audio Extractor | |
| emoji: π΅ | |
| colorFrom: blue | |
| colorTo: purple | |
| sdk: docker | |
| pinned: false | |
| license: mit | |
| # Video to Audio Extractor | |
| A FastAPI-based web application that extracts audio from video files using FFmpeg. Convert your videos to audio in various formats with customizable quality settings. | |
| ## π― Features | |
| - π₯ **Multiple video formats**: MP4, AVI, MOV, MKV, WebM, FLV, WMV, M4V | |
| - π΅ **Multiple audio formats**: MP3, AAC, WAV, FLAC, M4A, OGG | |
| - π **Quality levels**: High, Medium, Low | |
| - π **Smart processing**: Direct response for small files, background jobs for large files | |
| - π **Web interface**: User-friendly UI with real-time progress | |
| - π **REST API**: Full API access for programmatic use | |
| - π§Ή **Auto-cleanup**: Temporary files cleaned automatically | |
| ## π₯οΈ Web Interface | |
| Visit the Space URL to access the web interface where you can: | |
| - Upload video files via drag-and-drop or file selection | |
| - Choose output format and quality | |
| - Preview and download extracted audio | |
| - See real-time processing status | |
| ## π‘ API Usage | |
| ### Extract Audio (Direct Response) | |
| For files under 10MB, get immediate response: | |
| ```bash | |
| curl -X POST -F "video=@video.mp4" \ | |
| -F "output_format=mp3" \ | |
| -F "quality=high" \ | |
| https://your-space.hf.space/extract-audio \ | |
| --output audio.mp3 | |
| ``` | |
| ### Extract Audio (Background Job) | |
| For larger files: | |
| ```bash | |
| # Submit job | |
| response=$(curl -X POST -F "video=@large_video.mp4" \ | |
| -F "output_format=mp3" \ | |
| https://your-space.hf.space/extract-audio) | |
| # Get job ID | |
| job_id=$(echo $response | jq -r '.job_id') | |
| # Check status | |
| curl https://your-space.hf.space/status/$job_id | |
| # Download when ready | |
| curl https://your-space.hf.space/download/$job_id --output audio.mp3 | |
| ``` | |
| ### Python Example | |
| ```python | |
| import requests | |
| import time | |
| def extract_audio(video_path, output_format='mp3', quality='medium'): | |
| url = 'https://your-space.hf.space/extract-audio' | |
| with open(video_path, 'rb') as f: | |
| files = {'video': f} | |
| data = {'output_format': output_format, 'quality': quality} | |
| response = requests.post(url, files=files, data=data) | |
| if response.headers.get('content-type', '').startswith('audio/'): | |
| # Direct response - save file | |
| return response.content | |
| else: | |
| # Background job - poll for completion | |
| job_data = response.json() | |
| job_id = job_data['job_id'] | |
| while True: | |
| status = requests.get(f'{url.replace("/extract-audio", "")}/status/{job_id}').json() | |
| if status['status'] == 'completed': | |
| audio = requests.get(f'{url.replace("/extract-audio", "")}/download/{job_id}') | |
| return audio.content | |
| elif status['status'] == 'failed': | |
| raise Exception(f"Processing failed: {status.get('error')}") | |
| time.sleep(2) | |
| # Usage | |
| audio_data = extract_audio('my_video.mp4', 'mp3', 'high') | |
| with open('output.mp3', 'wb') as f: | |
| f.write(audio_data) | |
| ``` | |
| ## π§ API Endpoints | |
| - `GET /` - Web interface | |
| - `POST /extract-audio` - Extract audio from video | |
| - `GET /status/{job_id}` - Check job status | |
| - `GET /download/{job_id}` - Download processed audio | |
| - `GET /api/info` - API information and supported formats | |
| ## π Quality Settings | |
| | Quality | MP3 Bitrate | AAC Bitrate | Description | | |
| |---------|-------------|-------------|-------------| | |
| | High | 320 kbps | 256 kbps | Best quality, larger files | | |
| | Medium | 192 kbps | 192 kbps | Balanced (default) | | |
| | Low | 128 kbps | 128 kbps | Smaller files | | |
| ## π Local Development | |
| ```bash | |
| # Clone the repository | |
| git clone <your-repo> | |
| cd video-to-audio-extractor | |
| # Install dependencies | |
| pip install -r requirements.txt | |
| # Install FFmpeg | |
| # Ubuntu/Debian | |
| sudo apt-get update && sudo apt-get install ffmpeg | |
| # macOS | |
| brew install ffmpeg | |
| # Windows | |
| # Download from https://ffmpeg.org/download.html | |
| # Run the application | |
| uvicorn app:app --reload --host 0.0.0.0 --port 7860 | |
| ``` | |
| ## π³ Docker Deployment | |
| ```bash | |
| # Build the image | |
| docker build -t video-to-audio-extractor . | |
| # Run the container | |
| docker run -p 7860:7860 video-to-audio-extractor | |
| ``` | |
| ## π License | |
| This project is licensed under the MIT License. | |
| ## π€ Contributing | |
| Contributions are welcome! Please feel free to submit a Pull Request. | |
| ## π Issues | |
| If you encounter any issues or have feature requests, please file them in the [Issues](https://huggingface.co/spaces/your-username/your-space-name/discussions) section. |