2024-05-24 23:44:26 +03:00
# atranscoder-rpc
2024-05-26 14:58:12 +03:00
[![Docker Automated build ](https://img.shields.io/docker/automated/neur0toxine/atranscoder-rpc.svg )](https://hub.docker.com/r/neur0toxine/atranscoder-rpc/)
[![docker Status ](https://github.com/Neur0toxine/atranscoder-rpc/workflows/docker/badge.svg )](https://github.com/Neur0toxine/atranscoder-rpc/actions?query=workflow%3Adocker)
2024-05-25 21:50:34 +03:00
Audio transcoder with simple HTTP API. Work in progress.
2024-05-26 14:58:12 +03:00
# How to Use
2024-05-25 21:50:34 +03:00
2024-05-26 14:58:12 +03:00
Transcoding can be done like this:
2024-05-26 22:13:30 +03:00
1. Use [`neur0toxine/atranscoder-rpc` ](https://hub.docker.com/r/neur0toxine/atranscoder-rpc/ ) Docker image.
2024-05-25 21:50:34 +03:00
2. Upload file for transcoding:
```bash
curl --location 'http://localhost:8090/enqueue' \
2024-05-27 18:36:36 +03:00
--form 'file=@"/home/user/Music/test.mp3"' \
--form 'format="mp4"' \
--form 'codec="libfdk_aac"' \
2024-05-29 18:32:17 +03:00
--form 'codec_opts="profile=aac_he"' \
--form 'bit_rate="64000"' \
--form 'max_bit_rate="64000"' \
--form 'sample_rate="44100"' \
--form 'channel_layout="stereo"' \
--form 'callback_url="http://127.0.0.1:8909/callback"'
2024-05-27 18:36:36 +03:00
```
2024-05-29 18:32:17 +03:00
3. Your `callback_url` will receive JSON response with job ID and error in case of failure. Error will be null if transcoding was successful.
2024-05-27 18:36:36 +03:00
4. You can download transcoded file like this (replace `job_id` with the ID you've received):
```bash
curl -L http://localhost:8090/get/job_id -o file.mp4
2024-05-25 21:50:34 +03:00
```
2024-05-26 14:58:12 +03:00
2024-05-29 18:32:17 +03:00
You can also enqueue a remote file like this:
```bash
curl --location 'http://localhost:8090/enqueue_url' \
--header 'Content-Type: application/json' \
--data '{
"format": "mp4",
"codec": "libfdk_aac",
"codec_opts": "profile=aac_he",
"bit_rate": 64000,
"max_bit_rate": 64000,
"sample_rate": 44100,
"channel_layout": "stereo",
"url": "https://upload.wikimedia.org/wikipedia/commons/c/c8/Example.ogg",
"callback_url": "http://127.0.0.1:8909/callback"
}'
```
Mandatory fields:
- `format`
- `codec`
- `sample_rate`
- `url` (for `/enqueue_url` )
2024-05-29 20:27:46 +03:00
# Configuration
You can change configuration using these environment variables:
2024-05-26 14:58:12 +03:00
- `LISTEN` - change this environment variable to change TCP listen address. Default is `0.0.0.0:8090` .
- `NUM_WORKERS` - can be used to change how many threads will be used to transcode incoming files. Default is equal to logical CPUs.
- `TEMP_DIR` - this can be used to change which directory should be used to store incoming downloads and transcoding results. Useful if you want to use a Docker volume for this. Default is system temp directory (`/tmp` for Linux).
- `LOG_LEVEL` - changes log verbosity, default is `info` .
2024-05-28 18:11:37 +03:00
- `MAX_BODY_SIZE` - changes max body size for `/enqueue` . Default is 100MB, maximum is 1GiB (which is still *a lot* for the multipart form).
2024-05-27 21:15:16 +03:00
- `RESULT_TTL_SEC` - sets result ttl in seconds, minimum 60 seconds. Default is 3600 (transcoding results are being kept and can be downloaded for an hour).
2024-05-27 18:36:36 +03:00
- `FFMPEG_VERBOSE` - if set to `1` changes FFmpeg log level from quiet to trace.
2024-05-25 21:50:34 +03:00
# Roadmap
2024-05-26 14:28:42 +03:00
- [x] Implement somewhat acceptable error handling.
- [x] Remove old conversion results and input files that are older than 1 hour.
2024-05-26 13:13:29 +03:00
- [x] Remove input file after transcoding it.
2024-05-27 18:36:36 +03:00
- [x] Do not upload files directly, add download route with streaming instead.
2024-05-27 20:41:15 +03:00
- [x] Conversion from OGG Opus mono to HE-AAC v1 Stereo outputs high-pitched crackling audio.
- [x] Conversion from OGG Opus mono to AAC sometimes crashes the app with SIGSEGV (this can be seen more often with very short audio).
2024-05-29 18:32:17 +03:00
- [x] ~~If FFmpeg fails, `send_error` won't be called - fix that.~~ It actually works, I just didn't notice before.
- [x] Ability to enqueue a remote file.
2024-05-27 18:36:36 +03:00
- [ ] Default errors are returned in plain text. Change it to the JSON.
- [ ] Docker image for `amd64` and `arm64` (currently only `amd64` is supported because `arm64` cross-compilation with QEMU is sloooooooooooowwwww...).
2024-05-25 21:50:34 +03:00
- [ ] Tests!