https://github.com/linuxmatters/jive-visualiser
Spin your podcast .wav into a groovy MP4 visualiser with spring-driven real-time audio frequencies 🔥
https://github.com/linuxmatters/jive-visualiser
audio-visualization audio-visualizer cava mp4 podcast youtube
Last synced: about 8 hours ago
JSON representation
Spin your podcast .wav into a groovy MP4 visualiser with spring-driven real-time audio frequencies 🔥
- Host: GitHub
- URL: https://github.com/linuxmatters/jive-visualiser
- Owner: linuxmatters
- License: gpl-3.0
- Created: 2025-11-03T08:50:21.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2026-07-04T21:48:20.000Z (2 days ago)
- Last Synced: 2026-07-04T22:03:48.664Z (2 days ago)
- Topics: audio-visualization, audio-visualizer, cava, mp4, podcast, youtube
- Language: Go
- Homepage: https://linuxmatters.sh
- Size: 38 MB
- Stars: 11
- Watchers: 0
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
- Support: SUPPORT.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Jive Visualiser ✨
> Spin your podcast .wav into a groovy MP4 visualiser with spring-driven real-time audio frequencies.
_Formerly known as Jivefire._
## The Groove
Your podcast audio deserves more than a static image on YouTube. Jive Visualiser transforms WAV/MP3/FLAC into delightful 720p visuals—bars that breathe with your dialogue, rise with your laughter, and groove through every frequency.
### What's Cooking
- 🖼️ **Thumbnail generator** YouTube-style PNG with your title, saved alongside the video
- 🎬 **1280×720 @ 30fps** H.264/AAC YouTube-ready MP4, no questions asked
- 🎚️ **64 frequency bars** that look discrete (not that smeared spectrum nonsense)
- 🪞 **Symmetric mirroring** above and below centre, doubles the visual impact
- 🔬 **FFT-based analysis** 2048-point Hanning window, linear frequency binning, log-scaled amplitude
- ✨ **Spring-driven bar dynamics** bars snap up instantly, spring back down via harmonica peak-hold
- 🚀 **Stupidly fast** streaming pipeline, parallel RGB→YUV conversion
- ⚡ **GPU acceleration** auto-detected: NVENC, Vulkan, VA-API, QuickSync, VideoToolbox
- 📦 **Single binary** No Python. No FFmpeg install required. Just drop and render
- 🐧 **Linux** (amd64 and AArch64)
- 🍏 **macOS** (x86 and Apple Silicon)
## Usage
### Generate Video
```bash
./jive-visualiser input.wav output.mp4
```
### With Episode Number and Title
```bash
./jive-visualiser --episode=42 --title="Linux Matters" input.wav output.mp4
```
### Without Episode Number (Unnumbered Audio)
```bash
./jive-visualiser --title="Linux Matters" input.wav output.mp4
```
`--episode` is optional. Omitting it suppresses the episode number overlay entirely — useful for archive or bonus audio that has no episode number. Passing `--episode=0` still renders `00` on-screen (single-digit values are zero-padded, so `5` renders as `05`); absence is what controls the overlay, not the value.
### Example
## Build
Jive Visualiser uses [FFmpeg statigo](https://github.com/linuxmatters/ffmpeg-statigo) for FFmpeg static bindings.
```bash
# Setup or update ffmpeg-statigo submodule and library
just setup
# Build and test
just build # Build binary
just test # Run tests
just test-encoder # Test encoder
```
## Why Jive Visualiser?
FFmpeg's audio visualisation filters (`showfreqs`, `showspectrum`) render continuous frequency spectra, not discrete bars. No amount of FFmpeg filter chain kung-fu can achieve the discrete 64-bar aesthetic required for Linux Matters branding. Solution: Do the FFT analysis and bar rendering in Go, pipe frames to FFmpeg for encoding.
**Why Go over Python?** The original `djfun/audio-visualizer-python` tool is a moribund Qt5 GUI with significant tech debt. For our podcast production needs we wanted multi-architecture tools that can integrate into automation pipelines.
The Jive Visualiser architecture, such as it is, is available in the [architecture document](docs/ARCHITECTURE.md).