auto-transcoder/README.md
Ben Martin 68f6e85c78
Some checks failed
Build and Publish Docker Images / build (server.Dockerfile, ${{ vars.IMAGE_NAME_SERVER }}) (push) Has been cancelled
Build and Publish Docker Images / build (server.Dockerfile, ${{ vars.IMAGE_NAME_WORKER }}) (push) Has been cancelled
Build and Publish Docker Images / build (worker.Dockerfile, ${{ vars.IMAGE_NAME_SERVER }}) (push) Has been cancelled
Build and Publish Docker Images / build (worker.Dockerfile, ${{ vars.IMAGE_NAME_WORKER }}) (push) Has been cancelled
Build and Publish Docker Images / setup (push) Has been cancelled
Initial commit
2025-05-11 23:12:17 +01:00

193 lines
5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# auto-transcoder
**Auto-transcoder** is a Python-based media transcoding application that automatically processes media files when they are added to a specified directory. It leverages Redis for tracking media state and Celery for handling transcoding tasks asynchronously. The application is containerised using Docker for easy deployment and management.
---
## 📦 Features
- **Automatic Transcoding**: Detects new media files in a watched directory and triggers transcoding tasks.
- **Redis Integration**: Tracks media state (e.g., whether a file has been transcoded) using Redis.
- **Celery Worker Support**: Uses Celery to handle transcoding tasks in the background.
- **Docker-Ready**: Comes with Dockerfiles for both the server and worker components.
- **Cross-Platform Compatibility**: Runs on Linux (ARM64 and AMD64 architectures).
---
## 📦 Requirements
- **Redis Server**: Required for media state tracking.
- **Celery Worker**: Needed to process transcoding tasks.
- **Docker**: For containerisation and deployment.
---
## 📁 Project Structure
Here are a few key files in the project structure:
```
auto-transcoder/
├── server.Dockerfile
├── worker.Dockerfile
├── pyproject.toml
├── src/
│ └── auto_transcoder/
│ ├── model.py
│ ├── tasks.py
│ └── server.py
```
---
## 🚀 Getting Started
### 1. **Build Docker Images**
Run the following commands to build the server and worker Docker images:
```bash
docker build -t auto-transcoder-server -f server.Dockerfile .
docker build -t auto-transcoder-worker -f worker.Dockerfile .
```
### 2. **Run Redis Server**
Ensure a Redis server is running. You can use Docker:
```bash
docker run --name redis -d -p 6379:6379 redis
```
### 3. **Run the Server and Worker**
To run the server and worker, use Docker Compose or individual commands. Heres an example using Docker Compose:
```yaml
# docker-compose.yml
services:
redis:
image: redis
ports:
- "6379:6379"
server:
image: auto-transcoder-server
command:
- /data
- --recycle-bin
- /data/recycle_bin
ports:
- "5000:5000"
volumes:
- /path/to/media:/data
depends_on:
- redis
environment:
- REDIS_URL=redis://redis:6379
worker:
image: auto-transcoder-worker
volumes:
- /path/to/media:/data
depends_on:
- redis
environment:
- REDIS_URL=redis://redis:6379
```
Start services with:
```bash
docker compose up -d
```
> 🔍 Note: Replace `/path/to/media` with the actual path to the directory you want to watch.
You may find a standalone docker-compose.yml example if you need help getting started [here](docker-compose.example.yml).
---
## 📌 Configuration
### Command Line Arguments
- `directory_to_watch`: Path to the directory where media files are stored. This is a required argument.
- `--recycle-bin`: Path to a directory where original media files will be moved after transcoding. If not provided, the original files will be deleted.
### Environment Variables
- `REDIS_URL`: URL to your Redis instance (e.g., `redis://redis:6379`).
---
## 🧪 Usage
1. Place media files in the watched directory.
2. The server will automatically detect new files and add them to the queue.
3. A Celery worker will process the transcoding tasks in the background.
---
## 📦 Dependencies
This project uses the following dependencies (managed via Poetry):
- `celery[redis]`
- `flask`
- `python-magic`
- `redis`
- `asyncio`
Install them with:
```bash
poetry install
```
---
## 🧱 Development
To set up the development environment:
1. Install [Poetry](https://python-poetry.org/docs/).
2. Run `poetry install` to install dependencies.
3. Run the server with `poetry run python src/auto_transcoder/server.py` (ensure Redis is running).
4. Run the worker with `poetry run celery -A auto_transcoder.tasks worker --loglevel=info`.
---
## 📝 Notes
- Ensure that both the worker and server instances have access to the media files at the same path.
- If you're using Docker, this can be achieved by mounting the media directory as a volume in your Docker Compose setup.
- The `pyproject.toml` defines package structure and build settings. It currently uses `poetry-core` for building the package.
- The `MediaDTO` class encapsulates media file metadata, and the `RedisManager` class is used to manage Redis connections.
---
## 📄 License
This project is licensed under the **MIT License**. See the [LICENCE](LICENCE) file for details.
---
## 📈 Contributing
Contributions are welcome! To contribute:
1. Fork the repository.
2. Create a feature branch.
3. Make your changes.
4. Submit a pull request.
This repository uses British English spelling. Please ensure that your contributions adhere to this standard.
---
## 📚 References
- [Poetry Documentation](https://python-poetry.org/docs/)
- [Docker Documentation](https://docs.docker.com/)
- [Redis Documentation](https://redis.io/docs/)
- [Celery Documentation](https://docs.celeryproject.org/)