video-toolkit / README_DOCS.md
Nipun's picture
Add Hugging Face Space support with streamlined README
1081399
A fast and efficient video trimming toolkit with both a **web interface** and **command-line tool** for MP4 video processing. Features visual trimming with drag-to-scrub sliders and automatic audio extraction.
**Documentation**: https://nipunbatra.github.io/video-toolkit/
## Features
- **Web Interface**: Interactive Gradio demo with drag-to-trim sliders
- **Google Drive Integration**: Load videos from and upload results to Google Drive
- **Command Line**: Fast bash script for automated processing
- **Smart Trimming**: Visual video scrubbing to find exact cut points
- **Audio Extraction**: Automatic AAC extraction with built-in player
- **Minimal Processing**: Stream copying when possible for speed
- **Cross-Platform**: Works on macOS, Linux, and Windows WSL
## Prerequisites
- **ffmpeg** (version 4.0 or higher) - The core dependency for video processing
- **Bash shell** - Available on macOS, Linux, and Windows WSL
### Installing ffmpeg
| Platform | Command |
|----------|---------|
| macOS | `brew install ffmpeg` |
| Ubuntu/Debian | `sudo apt update && sudo apt install ffmpeg` |
| Fedora/CentOS | `sudo dnf install ffmpeg` |
| Windows | Download from [ffmpeg.org](https://ffmpeg.org/download.html) or use `winget install FFmpeg` |
## Installation
### Quick Install (Recommended)
**Step 1:** Download and make executable in one step
```bash
curl -O https://raw.githubusercontent.com/nipunbatra/video-toolkit/main/trim-convert.sh && chmod +x trim-convert.sh
```
**Step 2:** Verify the script works
```bash
./trim-convert.sh --help
```
### Manual Install
**Step 1:** Clone this repository
```bash
git clone https://github.com/nipunbatra/video-toolkit.git
cd video-toolkit
```
**Step 2:** Make the script executable
```bash
chmod +x trim-convert.sh
```
**Note:** The `chmod +x` command grants execute permission to the script file. This is required for shell scripts to run.
**Step 3:** Test the installation
```bash
./trim-convert.sh --help
```
### System-wide Installation (Optional)
**Step 1:** Copy script to system directory
```bash
sudo cp trim-convert.sh /usr/local/bin/trim-convert
```
**Note:** The `sudo` command requires administrator privileges to copy files to system directories like `/usr/local/bin/`.
**Step 2:** Test system-wide access
```bash
trim-convert --help
```
Now you can use `trim-convert` from any directory.
## Gradio Web Interface
For an interactive video trimming experience, use the web interface:
![Video Trimmer Interface](demo/screenshot-ui.jpg)
### Quick Start
```bash
# Install dependencies
pip install -r requirements.txt
# Launch the web interface
./run_demo.sh
```
### Features
- **Video Upload**: Drag & drop MP4/MOV/AVI files or load from Google Drive
- **Google Drive Integration**: Browse your entire Google Drive to pick videos
- **Visual Trimming**: Scrub sliders to find exact start/end points
- **Live Preview**: Video seeks to slider position for precise editing
- **Audio Playback**: Built-in player for extracted audio
- **Download**: Get both trimmed video and AAC audio files
- **Google Drive Upload**: Upload trimmed files back to any folder in your Google Drive
The web interface automatically converts times and calls the command-line script for processing.
### Google Drive Setup (Optional)
To enable Google Drive integration:
1. **Create OAuth credentials**: Follow instructions in `SIMPLE_GOOGLE_SETUP.md`
2. **Download `oauth_credentials.json`** and place in this directory
3. **Run the app** - it will open your browser for one-time authentication
4. **Done!** Browse your entire Google Drive and upload results back
**Note**: Google Drive integration is completely optional - the app works perfectly without it.
## File Permissions
### Understanding Script Permissions
Shell scripts require execute permission to run. When you download a script, it typically doesn't have execute permission by default for security reasons.
### Setting Execute Permission
```bash
chmod +x trim-convert.sh
```
### Verifying Permissions
Check if the script has execute permission:
```bash
ls -l trim-convert.sh
```
Look for `x` in the permissions (e.g., `-rwxr-xr-x`). The `x` indicates execute permission.
### Common Permission Issues
- **"Permission denied"**: Script lacks execute permission - run `chmod +x`
- **"Operation not permitted"**: Need `sudo` for system directories
- **"Command not found"**: Script not in current directory or PATH
## Command Line Usage
```bash
./trim-convert.sh [options] input.mp4
```
### Options
| Option | Description |
|--------|-------------|
| `-s, --start TIME` | Start time (format: HH:MM:SS or seconds) |
| `-e, --end TIME` | End time (format: HH:MM:SS or seconds) |
| `-o, --output PREFIX` | Output file prefix (default: "trimmed") |
| `-h, --help` | Show help message |
### Examples
#### Basic Trimming
```bash
# Trim from 1m30s to 5m45s
./trim-convert.sh -s 00:01:30 -e 00:05:45 video.mp4
# Trim from start to 10 minutes
./trim-convert.sh -e 00:10:00 video.mp4
# Trim from 2 minutes to the end
./trim-convert.sh -s 00:02:00 video.mp4
```
#### Advanced Usage
```bash
# Custom output name
./trim-convert.sh -o my_clip -s 00:01:30 -e 00:05:45 video.mp4
# Process entire file (extract audio only)
./trim-convert.sh video.mp4
# Using seconds instead of HH:MM:SS format
./trim-convert.sh -s 90 -e 345 video.mp4
# Batch processing multiple files
for file in *.mp4; do
./trim-convert.sh -s 00:00:10 -e 00:01:00 "$file"
done
```
#### Time Format Options
- **HH:MM:SS**: `00:01:30` (1 minute 30 seconds)
- **MM:SS**: `01:30` (1 minute 30 seconds)
- **Seconds**: `90` (90 seconds)
- **Decimal seconds**: `90.5` (90.5 seconds)
## How It Works
1. The script analyzes the input video to determine if it can use stream copying (no re-encoding) based on keyframe positioning
2. It attempts to use the fastest method possible while maintaining quality
3. If stream copying would result in imprecise cuts, it falls back to re-encoding
4. The audio track is extracted as a separate AAC file
## Output
- `PREFIX.mp4`: The trimmed video file
- `PREFIX.aac`: The extracted audio file
## Technical Details
- Uses ffmpeg's stream copying (`-c copy`) when possible to avoid quality loss
- Falls back to high-quality, fast encoding when necessary (`-c:v libx264 -preset ultrafast -crf 17`)
- Handles keyframe detection for optimal cutting points
- Works with both relative (seconds) and absolute (HH:MM:SS) time formats
## Demo Videos
This repository includes sample copyright-free videos for testing:
| File | Description | Source | License |
|------|-------------|---------|---------|
| `demo/sample-10s.mp4` | 10-second test pattern | Generated with ffmpeg | Public Domain |
| `demo/sample-30s.mp4` | 30-second test pattern | Generated with ffmpeg | Public Domain |
All demo videos are verified to be free to use, modify, and distribute.
## Performance Notes
- **Stream copying**: Fastest method, preserves original quality
- **Re-encoding**: Used when precision is required, high-quality preset
- **Memory usage**: Minimal - processes videos without loading entire file into memory
- **Supported formats**: MP4, AVI, MOV, MKV (output always MP4)
## Troubleshooting
### Common Issues
| Problem | Solution |
|---------|----------|
| "ffmpeg not found" | Install ffmpeg using your package manager |
| "Permission denied" | Run `chmod +x trim-convert.sh` to make script executable |
| "Invalid time format" | Use HH:MM:SS or seconds format |
| "No keyframes found" | Video will be re-encoded (slower but precise) |
| "Command not found" | Check if script is in current directory or PATH |
| "Operation not permitted" | Use `sudo` for system-wide installation |
### Performance Tips
- Use stream copying when possible by aligning cuts with keyframes
- For bulk processing, consider processing multiple files in parallel
- Use SSD storage for better I/O performance with large files
## Requirements
- **ffmpeg** (version 4.0 or higher)
- **Bash shell** (version 4.0 or higher recommended)
- **Available disk space** equal to at least 2x the size of your largest video file
## License
MIT License - See [LICENSE](https://github.com/nipunbatra/video-toolkit/blob/main/LICENSE) file for details
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
---
## 📖 Documentation Website
This repository has an auto-generated documentation website at: **https://nipunbatra.github.io/video-toolkit**
### How Documentation Works
- **Single source**: Edit only this `README.md` file
- **Auto-build**: GitHub Actions automatically updates the website
- **No manual work**: Never touch the `docs/` folder
- **Live updates**: Changes appear on the website when you push to main
### Making Documentation Changes
1. **Edit this file**: `README.md` (you're reading it now!)
2. **Commit and push**: `git add . && git commit -m "Update docs" && git push`
3. **Done**: Website updates automatically in ~2 minutes
**⚠️ Important**: Never edit files in the `docs/` folder - they're auto-generated!