Skip to main content
Glama
09-transcoding.md4.78 kB
# Transcoding API ## Overview Manage audio transcoding configurations for converting between audio formats and qualities. Transcoding is used for streaming optimization. **Note**: Transcoding management may be admin-only or disabled based on server configuration. ## Base URL: `/api/transcoding` ### GET /api/transcoding List all available transcoding configurations. **Response (200 OK):** ```json [ { "id": "string", "name": "string", // Human-readable name "targetFormat": "string", // Output format (mp3, opus, aac, etc.) "command": "string", // FFmpeg command template "defaultBitRate": number // Default bitrate in kbps } ] ``` ### GET /api/transcoding/{id} Get a specific transcoding configuration. **Response (200 OK):** Single transcoding configuration object ### POST /api/transcoding Create a new transcoding configuration (admin-only). **Request Body:** ```json { "name": "string (required)", "targetFormat": "string (required)", "command": "string (required)", "defaultBitRate": number } ``` **Response (201 Created):** Created transcoding configuration ### PUT /api/transcoding/{id} Update a transcoding configuration (admin-only). **Request Body:** ```json { "name": "string", "targetFormat": "string", "command": "string", "defaultBitRate": number } ``` **Response (200 OK):** Updated configuration ### DELETE /api/transcoding/{id} Delete a transcoding configuration (admin-only). **Response (200 OK):** ```json { "id": "string" } ``` ## Command Templates FFmpeg commands use placeholder variables: | Placeholder | Description | Example | |-------------|-------------|---------| | `%s` | Input file path | `/music/song.flac` | | `%t` | Start time offset | `30` (seconds) | | `%bk` | Target bitrate | `192` | | `%b` | Target bitrate (no 'k') | `192` | ### Example Commands **MP3 Transcoding:** ```bash ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 - ``` **AAC Transcoding:** ```bash ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts - ``` **Opus Transcoding:** ```bash ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus - ``` **High-Quality MP3:** ```bash ffmpeg -i %s -ss %t -map 0:a:0 -q:a 0 -v 0 -f mp3 - ``` ## Supported Formats ### Input Formats Navidrome supports transcoding from: - FLAC - ALAC - WAV - AIFF - MP3 - AAC - OGG - Opus - WMA - And many others (FFmpeg-dependent) ### Output Formats Common target formats: - **MP3**: Universal compatibility - **AAC**: Good compression, iOS/macOS native - **Opus**: Best compression ratio - **OGG**: Open standard - **WAV**: Uncompressed (rarely used for streaming) ## Usage in Streaming ### Player Configuration Players can request transcoding by setting: - `maxBitRate`: Maximum acceptable bitrate - `format`: Preferred output format - `transcoding`: Enable/disable transcoding ### Automatic Selection Server selects transcoding based on: 1. Original file format/bitrate 2. Player's max bitrate setting 3. Available transcoding profiles 4. Network conditions (if configured) ### Stream URLs Transcoded streams use format: ``` /stream/{songId}?format={format}&maxBitRate={bitrate} ``` ## Performance Considerations ### CPU Usage - Transcoding is CPU-intensive - Real-time encoding required for streaming - Consider server capacity when adding profiles ### Caching - Some servers cache transcoded segments - First-time transcoding may have delay - Popular songs may be pre-transcoded ### Quality vs Size | Format | Quality | Size | CPU Load | |--------|---------|------|----------| | WAV | Perfect | Huge | None | | FLAC | Perfect | Large | Low | | MP3 320k | Excellent | Medium | Medium | | AAC 256k | Excellent | Small | Medium | | Opus 128k | Very Good | Tiny | High | ## Configuration Requirements ### Server Setup Transcoding requires: - FFmpeg installed and accessible - Sufficient CPU resources - Transcoding enabled in configuration ### FFmpeg Dependencies Common codec requirements: ```bash # For MP3 apt-get install libmp3lame # For AAC apt-get install libfdk-aac # For Opus apt-get install libopus ``` ### Security Considerations - Command templates executed as shell commands - Validate commands before saving - Restrict access to admin users only - Consider sandboxing FFmpeg execution ## Troubleshooting ### Common Issues 1. **FFmpeg not found**: Check PATH and installation 2. **Codec missing**: Install required codec libraries 3. **High CPU usage**: Reduce concurrent transcodings 4. **Playback stuttering**: Increase buffer sizes ### Testing Commands Verify FFmpeg commands manually: ```bash # Test MP3 transcoding ffmpeg -i input.flac -b:a 192k -f mp3 output.mp3 # Test with time offset ffmpeg -i input.flac -ss 30 -b:a 192k -f mp3 output.mp3 ```

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Blakeem/Navidrome-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server