141 lines
3.4 KiB
Markdown
141 lines
3.4 KiB
Markdown
# Audio Extractor
|
|
|
|
A Python tool for extracting and managing audio tracks from video files using FFmpeg.
|
|
|
|
## Features
|
|
|
|
- **Extract Audio**: Extract all audio channels from video files as individual files
|
|
- **Preserve Quality**: Maintains original bitrate and codec without re-encoding
|
|
- **Batch Processing**: Process multiple video files from a folder
|
|
- **Multi-track Support**: Automatically handles videos with multiple audio tracks
|
|
- **Flexible Output**: Specify custom output folder
|
|
|
|
## Future Features
|
|
|
|
- **Add Tracks**: Add individual audio files as new tracks to video files
|
|
- **Track Titles**: Assign custom titles/names to audio tracks
|
|
- **Batch Operations**: Apply operations to multiple files with matching base names
|
|
|
|
## Installation
|
|
|
|
### Prerequisites
|
|
|
|
- Python 3.6+
|
|
- FFmpeg installed and accessible in your PATH
|
|
- FFprobe (usually included with FFmpeg)
|
|
|
|
### Install FFmpeg
|
|
|
|
**macOS** (using Homebrew):
|
|
```bash
|
|
brew install ffmpeg
|
|
```
|
|
|
|
**Ubuntu/Debian**:
|
|
```bash
|
|
sudo apt-get install ffmpeg
|
|
```
|
|
|
|
**Windows** (using Chocolatey):
|
|
```bash
|
|
choco install ffmpeg
|
|
```
|
|
|
|
Or download from: https://ffmpeg.org/download.html
|
|
|
|
## Usage
|
|
|
|
### Extract Audio from a Single Video
|
|
|
|
```bash
|
|
python main.py extract "path/to/video.mp4" -o ./audio_output
|
|
```
|
|
|
|
### Extract Audio from All Videos in a Folder
|
|
|
|
```bash
|
|
python main.py extract "./videos_folder" -o ./audio_output
|
|
```
|
|
|
|
### Legacy Command Format
|
|
|
|
The tool also supports the original command format:
|
|
|
|
```bash
|
|
python main.py --extract "target" -o output_folder
|
|
```
|
|
|
|
## Examples
|
|
|
|
**Extract from single file:**
|
|
```bash
|
|
python main.py extract "movie.mp4" -o ./extracted_audio
|
|
```
|
|
|
|
**Extract from entire folder:**
|
|
```bash
|
|
python main.py extract "./my_videos" -o "./audio_tracks"
|
|
```
|
|
|
|
**Extract with default output folder (./audio_output):**
|
|
```bash
|
|
python main.py extract "video.mkv"
|
|
```
|
|
|
|
## How It Works
|
|
|
|
1. **Identifies video files** in the target path
|
|
2. **Analyzes audio streams** using ffprobe to detect codec and bitrate information
|
|
3. **Extracts each audio track** using FFmpeg's codec copy mode (no re-encoding)
|
|
4. **Preserves quality** by maintaining original bitrate and codec
|
|
5. **Names files** appropriately based on source video and track number
|
|
|
|
## Output
|
|
|
|
Extracted audio files are saved with the following naming:
|
|
|
|
- **Single audio track**: `video_name.aac` (or appropriate extension)
|
|
- **Multiple audio tracks**: `video_name_audio_0.aac`, `video_name_audio_1.aac`, etc.
|
|
|
|
## Troubleshooting
|
|
|
|
**"ffmpeg is not installed or not found in PATH"**
|
|
- Ensure FFmpeg is installed and the `ffmpeg` command is accessible from your terminal
|
|
- Test with: `ffmpeg -version`
|
|
|
|
**"No audio streams found"**
|
|
- The video file may not contain any audio tracks
|
|
- Try analyzing the file with: `ffprobe "video.mp4"`
|
|
|
|
**Extraction fails**
|
|
- Check that the video file is not corrupted
|
|
- Try opening it with a media player first
|
|
- Check disk space in the output folder
|
|
|
|
## Development
|
|
|
|
### Project Structure
|
|
|
|
```
|
|
audio-extractor/
|
|
├── main.py # Entry point and CLI argument parsing
|
|
├── audio_extractor/
|
|
│ ├── __init__.py
|
|
│ ├── cli.py # CLI interface
|
|
│ └── extractor.py # Core extraction logic
|
|
├── requirements.txt
|
|
└── README.md
|
|
```
|
|
|
|
### Adding Features
|
|
|
|
To add new features:
|
|
|
|
1. Add command logic to `audio_extractor/extractor.py`
|
|
2. Add CLI interface to `audio_extractor/cli.py`
|
|
3. Add new command to the argument parser in `main.py`
|
|
|
|
## License
|
|
|
|
MIT
|