Update README.md

This commit is contained in:
Zakary Timson 2023-11-24 20:34:36 +00:00
parent af74dcd727
commit bfadab84ad

268
README.md
View File

@ -1,134 +1,134 @@
<!-- Header --> <!-- Header -->
<div id="top" align="center"> <div id="top" align="center">
<br /> <br />
<!-- Logo --> <!-- Logo -->
<img src="https://git.zakscode.com/repo-avatars/b497daaf22a214fe6d6cc35b8ec217cd22401b668dff93dcfcc7557bd8a46d96" alt="Logo" width="200" height="200"> <img src="https://git.zakscode.com/repo-avatars/b497daaf22a214fe6d6cc35b8ec217cd22401b668dff93dcfcc7557bd8a46d96" alt="Logo" width="200" height="200">
<!-- Title --> <!-- Title -->
### Transmute ### Transmute
<!-- Description --> <!-- Description -->
Distributed Video Transcoding Distributed Video Transcoding
<!-- Repo badges --> <!-- Repo badges -->
[![Version](https://img.shields.io/badge/dynamic/json.svg?label=Version&style=for-the-badge&url=https://git.zakscode.com/api/v1/repos/ztimson/Transmute/tags&query=$[0].name)](https://git.zakscode.com/ztimson/Transmute/tags) [![Version](https://img.shields.io/badge/dynamic/json.svg?label=Version&style=for-the-badge&url=https://git.zakscode.com/api/v1/repos/ztimson/Transmute/tags&query=$[0].name)](https://git.zakscode.com/ztimson/Transmute/tags)
[![Pull Requests](https://img.shields.io/badge/dynamic/json.svg?label=Pull%20Requests&style=for-the-badge&url=https://git.zakscode.com/api/v1/repos/ztimson/Transmute&query=open_pr_counter)](https://git.zakscode.com/ztimson/Transmute/pulls) [![Pull Requests](https://img.shields.io/badge/dynamic/json.svg?label=Pull%20Requests&style=for-the-badge&url=https://git.zakscode.com/api/v1/repos/ztimson/Transmute&query=open_pr_counter)](https://git.zakscode.com/ztimson/Transmute/pulls)
[![Issues](https://img.shields.io/badge/dynamic/json.svg?label=Issues&style=for-the-badge&url=https://git.zakscode.com/api/v1/repos/ztimson/Transmute&query=open_issues_count)](https://git.zakscode.com/ztimson/template/issues) [![Issues](https://img.shields.io/badge/dynamic/json.svg?label=Issues&style=for-the-badge&url=https://git.zakscode.com/api/v1/repos/ztimson/Transmute&query=open_issues_count)](https://git.zakscode.com/ztimson/template/issues)
<!-- Links --> <!-- Links -->
--- ---
<div> <div>
<a href="https://git.zakscode.com/ztimson/Transmute/wiki" target="_blank">Documentation</a> <a href="https://git.zakscode.com/ztimson/Transmute/wiki" target="_blank">Documentation</a>
<a href="https://git.zakscode.com/ztimson/Transmute/releases" target="_blank">Release Notes</a> <a href="https://git.zakscode.com/ztimson/Transmute/releases" target="_blank">Release Notes</a>
<a href="https://git.zakscode.com/ztimson/Transmute/issues/new?template=.github%2fissue_template%2fbug.md" target="_blank">Report a Bug</a> <a href="https://git.zakscode.com/ztimson/Transmute/issues/new?template=.github%2fissue_template%2fbug.md" target="_blank">Report a Bug</a>
<a href="https://git.zakscode.com/ztimson/Transmute/issues/new?template=.github%2fissue_template%2fenhancement.md" target="_blank">Request a Feature</a> <a href="https://git.zakscode.com/ztimson/Transmute/issues/new?template=.github%2fissue_template%2fenhancement.md" target="_blank">Request a Feature</a>
</div> </div>
--- ---
</div> </div>
## Table of Contents ## Table of Contents
- [Transmute](#top) - [Transmute](#top)
- [About](#about) - [About](#about)
- [Built With](#built-with) - [Built With](#built-with)
- [Setup](#setup) - [Setup](#setup)
- [Production](#production) - [Production](#production)
- [Development](#development) - [Development](#development)
- [License](#license) - [License](#license)
## About ## About
![Placeholder Screenshot](./docs/images/screenshot.png) <img alt="Screenshot" src="./docs/images/screenshot.png" width="75%" height="auto">
Transmute provides a simple web based tool to manage your video library. Transmute will watch a directory and automatically Transmute provides a simple web based tool to manage your video library. Transmute will watch a directory and automatically
transcode videos using [FFmpeg](https://ffmpeg.org/) & hardware acceloration (if available) so that your entire library transcode videos using [FFmpeg](https://ffmpeg.org/) & hardware acceloration (if available) so that your entire library
meets a specified standard. In addition to transcoding, Transmute can also remove undesired audio tracks, subtitles, meets a specified standard. In addition to transcoding, Transmute can also remove undesired audio tracks, subtitles,
perform healthchecks & upscale/downscale video. perform healthchecks & upscale/downscale video.
--- ---
> Why do I care? > Why do I care?
1. Transcoding `MPEG-2/MPEG-4` video to `h.264/h.265` can reduce file size by **50-90%** 1. Transcoding `MPEG-2/MPEG-4` video to `h.264/h.265` can reduce file size by **50-90%**
2. A more extreme measure is downscaling `4K` to `1080p` to reduce size by a further **75%** 2. A more extreme measure is downscaling `4K` to `1080p` to reduce size by a further **75%**
3. Stripping out unused audio tracks & subtitles can result in more savings 3. Stripping out unused audio tracks & subtitles can result in more savings
4. Some devices or players will be unable to play specific formats 4. Some devices or players will be unable to play specific formats
5. If you use a self-hosted streaming service, your host will have to transcode videos on the fly when a device doesn't 5. If you use a self-hosted streaming service, your host will have to transcode videos on the fly when a device doesn't
support the original format/resolution leading to choppy playback, transcoding your library ahead of time can avoid this support the original format/resolution leading to choppy playback, transcoding your library ahead of time can avoid this
in most cases in most cases
> Why should I use this over __________? > Why should I use this over __________?
Transmute's goal is to make the transcoding process as fast & simple as possible. Most transcoders provide hundreds of Transmute's goal is to make the transcoding process as fast & simple as possible. Most transcoders provide hundreds of
settings requiring some expertise to properly setup. With Transmute you simply specify what your video files should look settings requiring some expertise to properly setup. With Transmute you simply specify what your video files should look
like & it will transcode your videos as lossless-ly as possible using multiple computers to make short work of large like & it will transcode your videos as lossless-ly as possible using multiple computers to make short work of large
libraries. libraries.
> How does it work? > How does it work?
After choosing your desired settings & creating a new library in the WebUI, the server will begin scanning videos to After choosing your desired settings & creating a new library in the WebUI, the server will begin scanning videos to
collect metadata. If this metadata doesn't match your settings or a healthcheck is required, the server will queue a job. collect metadata. If this metadata doesn't match your settings or a healthcheck is required, the server will queue a job.
Once a worker is available, it will request a job from the server & complete it using FFmpeg. Once a worker is available, it will request a job from the server & complete it using FFmpeg.
### Built With ### Built With
[![Angular](https://img.shields.io/badge/Angular-DD0031?style=for-the-badge&logo=angular)](https://angular.io/) [![Angular](https://img.shields.io/badge/Angular-DD0031?style=for-the-badge&logo=angular)](https://angular.io/)
[![Bootstrap](https://img.shields.io/badge/Bootstrap-563D7C?style=for-the-badge&logo=bootstrap&logoColor=white)](https://getbootstrap.com) [![Bootstrap](https://img.shields.io/badge/Bootstrap-563D7C?style=for-the-badge&logo=bootstrap&logoColor=white)](https://getbootstrap.com)
[![Docker](https://img.shields.io/badge/Docker-384d54?style=for-the-badge&logo=docker)](https://docker.com/) [![Docker](https://img.shields.io/badge/Docker-384d54?style=for-the-badge&logo=docker)](https://docker.com/)
[![Node](https://img.shields.io/badge/Node.js-000000?style=for-the-badge&logo=nodedotjs)](https://nodejs.org/) [![Node](https://img.shields.io/badge/Node.js-000000?style=for-the-badge&logo=nodedotjs)](https://nodejs.org/)
[![Shell](https://img.shields.io/badge/Shell-000000?style=for-the-badge&logo=windowsterminal&logoColor=00ff00)](https://en.wikipedia.org/wiki/Shell_script) [![Shell](https://img.shields.io/badge/Shell-000000?style=for-the-badge&logo=windowsterminal&logoColor=00ff00)](https://en.wikipedia.org/wiki/Shell_script)
[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://typescriptlang.org/) [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://typescriptlang.org/)
## Setup ## Setup
<details> <details>
<summary> <summary>
<h3 id="production" style="display: inline">Production</h3> <h3 id="production" style="display: inline">Production</h3>
</summary> </summary>
#### Prerequisites #### Prerequisites
- [Docker](https://www.docker.com/products/docker-desktop/) - [Docker](https://www.docker.com/products/docker-desktop/)
#### Instructions #### Instructions
1. Download the [example compose file](https://gitlab.zakscode.com/zakscode/transmute/transmute/-/blob/main/docker-compose.yml) on your server: `curl -o transmute.yml https://gitlab.zakscode.com/zakscode/transmute/transmute/-/raw/main/docker-compose.yml` 1. Download the [example compose file](https://gitlab.zakscode.com/zakscode/transmute/transmute/-/blob/main/docker-compose.yml) on your server: `curl -o transmute.yml https://gitlab.zakscode.com/zakscode/transmute/transmute/-/raw/main/docker-compose.yml`
2. Read the [Configuration Guide](https://gitlab.zakscode.com/zakscode/transmute/transmute/-/wikis/home) & edit the compose file accordingly 2. Read the [Configuration Guide](https://gitlab.zakscode.com/zakscode/transmute/transmute/-/wikis/home) & edit the compose file accordingly
3. Run the compose file: 3. Run the compose file:
- Using Docker Compose: `docker compose -f transmute.yml up` - Using Docker Compose: `docker compose -f transmute.yml up`
- Using Docker Swarm: `docker stack deploy transmute -c transmute.yml` - Using Docker Swarm: `docker stack deploy transmute -c transmute.yml`
</details> </details>
<details> <details>
<summary> <summary>
<h3 id="development" style="display: inline">Development</h3> <h3 id="development" style="display: inline">Development</h3>
</summary> </summary>
#### Prerequisites #### Prerequisites
- [Git](https://git-scm.com/downloads) - [Git](https://git-scm.com/downloads)
- [Node](https://nodejs.org/en/download) - [Node](https://nodejs.org/en/download)
- [FFmpeg](https://ffmpeg.org/download.html) - [FFmpeg](https://ffmpeg.org/download.html)
- [Docker](https://www.docker.com/products/docker-desktop/) - [Docker](https://www.docker.com/products/docker-desktop/)
#### Instructions #### Instructions
1. Clone this project: `git clone ` 1. Clone this project: `git clone `
2. Pull the submodules: `git submodule update --remote --init` 2. Pull the submodules: `git submodule update --remote --init`
3. Checkout the latest: `git submodule foreach git switch develop` 3. Checkout the latest: `git submodule foreach git switch develop`
4. Install dependencies: `git submodule foreach npm i` 4. Install dependencies: `git submodule foreach npm i`
5. Link common: 5. Link common:
1. Link common to npm: `cd common && npm link` 1. Link common to npm: `cd common && npm link`
2. Link common to client (re-run after every `npm install`): `cd ../client && npm link @transmute/common` 2. Link common to client (re-run after every `npm install`): `cd ../client && npm link @transmute/common`
3. Link common to server (re-run after every `npm install`): `cd ../server && npm link @transmute/common` 3. Link common to server (re-run after every `npm install`): `cd ../server && npm link @transmute/common`
4. Link common to worker (re-run after every `npm install`): `cd ../worker && npm link @transmute/common` 4. Link common to worker (re-run after every `npm install`): `cd ../worker && npm link @transmute/common`
6. Start each project as needed: 6. Start each project as needed:
- Start common: `cd ../common && npm run watch` - Start common: `cd ../common && npm run watch`
- Start client: `cd ../client && npm run start` - Start client: `cd ../client && npm run start`
- Start server: `cd ../server && npm run start` - Start server: `cd ../server && npm run start`
- Start worker: `cd ../worker && npm run start` - Start worker: `cd ../worker && npm run start`
</details> </details>
## License ## License
Copyright © 2023 Zakary Timson | Available under MIT Licensing Copyright © 2023 Zakary Timson | Available under MIT Licensing
See the [license](./LICENSE) for more information. See the [license](./LICENSE) for more information.