audio-transcode-watcher

audio-transcode-watcher

Docker app from geiserx's Repository

Overview

Watches a source folder for audio files and automatically transcodes them to multiple formats (ALAC, AAC, MP3, Opus, FLAC, WAV) in parallel using FFmpeg. Configured via a YAML config file for flexible source/output directory mapping.

Ideal for music library management — keep lossless originals and automatically generate compressed versions for mobile devices or streaming.

More info: https://github.com/GeiserX/audio-transcode-watcher

audio-transcode-watcher

A containerized service that watches a source folder and automatically transcodes audio files to multiple formats simultaneously.

PyPI Tests License Docker Pulls

Keep one library in several formats: lossless for the archive, lossy for phones and cars. Drop a FLAC into the source folder and the ALAC, MP3, AAC and Opus copies appear in their own trees.

Features

  • Watches the source folder and reacts to new, changed, renamed and deleted files.
  • Writes any number of outputs in one pass, in ALAC, AAC, MP3, Opus, FLAC or WAV at the bitrate you pick.
  • Mirrors the Artist/Album folder tree in every output.
  • Copies lossy sources (MP3, M4A, Ogg, Opus, WMA) unchanged instead of inflating them into a lossless output.
  • Fails loudly on a source that does not decode cleanly, and writes no output for it.
  • Keeps ReplayGain, MusicBrainz ids, ISRC, label and sort tags in ALAC and AAC copies.
  • Optionally measures every file and writes ReplayGain 2.0 track gain into the source and every output, so the whole library plays at one volume.
  • Fetches synced .lrc lyrics, and writes nothing when no real lyrics are found.
  • Embeds cover art if you want it.
  • Writes atomically and removes orphaned outputs, but never deletes anything when a folder looks empty.
  • Handles Unicode file names.
  • Ships as a small container on Python 3.14-slim with FFmpeg.

Quick start

curl -fsSL -o config.yaml https://raw.githubusercontent.com/GeiserX/audio-transcode-watcher/main/config.example.yaml
docker run -d --name audio_transcoder -e CONFIG_FILE=/app/config.yaml \
  -v ./config.yaml:/app/config.yaml:ro -v /path/to/flac:/music/flac:ro -v /path/to/mp3:/music/mp3 \
  drumsergio/audio-transcoder:0.7.1

Edit config.yaml first so its outputs match the folders you mount; the example writes ALAC, MP3 and AAC. Getting started has Docker Compose and the full docker run.

Documentation

Related projects

Project Description
slskd-transform Bulk upgrade your music library from lossy to lossless via Soulseek
telegram-slskd-local-bot Automated music discovery and download via Telegram
quality-gate-encoder (formerly jellyfin-encoder) Automatic 720p HEVC, H.264 or AV1 copies for Jellyfin

License

GPL-3.0-or-later

Download Statistics

6,563
Total Downloads

Related apps

Explore more like this

Explore all

Details

Repository
drumsergio/audio-transcoder:latest
Last Updated2026-04-21
First Seen2026-04-06

Runtime arguments

Network
bridge
Privileged
false

Template configuration

Config FilePathro

YAML configuration file (read-only)

Target
/app/config.yaml
Default
/mnt/user/appdata/audio-transcoder/config.yaml
Source AudioPathro

Source audio folder (read-only)

Target
/music/flac
Default
/mnt/user/Multimedia/Music/FLAC
ALAC OutputPathrw

ALAC output directory

Target
/music/alac
Default
/mnt/user/Multimedia/Music/ALAC
MP3 OutputPathrw

MP3 output directory

Target
/music/mp3
Default
/mnt/user/Multimedia/Music/MP3
AAC OutputPathrw

AAC output directory

Target
/music/aac
Default
/mnt/user/Multimedia/Music/AAC
TZVariable

Timezone

Default
America/New_York