Convert AMR to J2B — Free Online Tool
Convert AMR voice recordings to J2B audio format using the LAME MP3 encoder, decoding the narrow-band AMR codec (libopencore_amrnb) and re-encoding at 128k bitrate into the Jazz Jackrabbit 2 game audio container. Runs entirely in your browser — no upload required.
to
FFmpeg Command
Copy this command to run the same conversion locally with FFmpeg on your desktop. Download FFmpeg
Drop your AMR file here
or click to browse
Free — no uploads, no signups. Your files never leave your browser.
Settings
Note: Browser-based encoding uses approximate quality targets. For precise CRF compression, copy the FFmpeg command above and run it on your desktop.
Estimated output:
Conversion Complete!
DownloadHow It Works
AMR (Adaptive Multi-Rate) files store speech-optimized audio at very low bitrates — as low as 4.75 kbps — using a codec designed for GSM mobile telephony, not general-purpose audio. During this conversion, FFmpeg decodes the AMR bitstream using the libopencore_amrnb decoder, which reconstructs raw PCM audio from the narrow-band (8 kHz sample rate) speech frames. That PCM data is then re-encoded by the LAME MP3 encoder (libmp3lame) at 128 kbps and wrapped in the J2B container, which is the ASYLUM Music Format with a Jazz Jackrabbit 2-specific header. Because AMR is sampled at only 8 kHz optimized for voice, the output audio will reflect that limited frequency range regardless of the MP3 bitrate chosen — the re-encoding cannot recover frequency information that was discarded by the original AMR encoding.
What Each Flag Does
| Flag | What it does |
|---|---|
ffmpeg
|
Invokes the FFmpeg binary — the open-source multimedia processing engine that handles decoding the AMR input and encoding the J2B output entirely within your browser via WebAssembly (FFmpeg.wasm). |
-i input.amr
|
Specifies the input AMR file. FFmpeg detects the AMR container and automatically selects the libopencore_amrnb (or libopencore_amrwb) decoder based on the stream's codec, reading the narrow-band speech frames for decoding to raw PCM. |
-c:a libmp3lame
|
Instructs FFmpeg to encode the decoded AMR audio using the LAME MP3 encoder, producing the MP3 audio stream that will be wrapped inside the J2B container. LAME is the standard high-quality MP3 encoder and is the only audio codec supported for J2B output in this pipeline. |
-b:a 128k
|
Sets the MP3 audio bitrate to 128 kbps. For AMR-NB source material (8 kHz mono), this is generous — the narrow-band source limits perceptible quality well below what 128k can represent — but it ensures broad compatibility with any player that might attempt to read the MP3 stream inside the J2B wrapper. |
output.j2b
|
Specifies the output filename and triggers FFmpeg's J2B muxer, which wraps the LAME-encoded MP3 stream in the Jazz Jackrabbit 2 game audio container header. The .j2b extension is what causes FFmpeg to apply the appropriate container format for this game-specific output. |
Common Use Cases
- Modding Jazz Jackrabbit 2 and needing to incorporate a voice memo or spoken dialogue recorded on a mobile phone as an in-game audio asset in J2B format.
- Game audio researchers or preservationists archiving AMR-based speech samples in J2B for use within Jazz Jackrabbit 2 level editors or toolchains that only accept J2B files.
- Retro game hobbyists experimenting with procedurally replacing J2B music tracks with voice recordings, speech, or telephony audio captured in AMR format.
- Developers testing Jazz Jackrabbit 2 audio pipeline tools who need sample J2B files and want to generate them quickly from readily available AMR voice recordings.
- Audio format researchers exploring the J2B container structure who need a reproducible FFmpeg pipeline to wrap re-encoded MP3 content into a J2B-compatible output.
- Game modders who have archived old mobile voice clips in AMR and want to repurpose them as ambient or novelty audio tracks within JJ2 custom levels.
Frequently Asked Questions
The quality ceiling is set by the original AMR file, not the MP3 bitrate. AMR-NB (narrow-band) encodes audio at an 8 kHz sample rate, which means frequencies above 4 kHz are simply not present in the source data. When LAME re-encodes this to 128k MP3, it is faithfully reproducing that band-limited, telephone-quality audio — raising the bitrate cannot recover frequency content that was discarded by AMR encoding. The result will always sound like a phone call regardless of the output bitrate.
J2B is a container tied to the ASYLUM Music Format (AMF), which JJ2 natively expects to contain tracker-style module music with specific structural data. A J2B file with an MP3-encoded audio stream wrapped in the header may not play correctly in the original JJ2 engine, which expects AMF module data rather than a raw MP3 stream. This output is more useful for toolchain testing, research, or custom engines that interpret J2B more loosely.
Yes. The default AMR decoder used here is libopencore_amrnb, which handles AMR Narrow-Band files (the standard .amr format from mobile phones, 8 kHz). If your source is an AMR Wide-Band file (AMR-WB, 16 kHz, sometimes with a .awb extension), FFmpeg will use libopencore_amrwb instead and the audio quality will be noticeably better, since AMR-WB captures frequencies up to 8 kHz. FFmpeg selects the correct decoder automatically based on the file's codec, so no command change is needed.
Replace the value after -b:a in the command. For example, to encode at 64 kbps (smallest file, sufficient for narrow-band voice) use '-b:a 64k', or for 320 kbps (maximum MP3 quality) use '-b:a 320k'. For AMR-NB source material sampled at 8 kHz, anything above 64k–96k provides no perceptible improvement, since the source lacks the high-frequency content that higher bitrates are designed to preserve.
Yes. On Linux or macOS, you can run: for f in *.amr; do ffmpeg -i "$f" -c:a libmp3lame -b:a 128k "${f%.amr}.j2b"; done. On Windows (PowerShell), use: Get-ChildItem *.amr | ForEach-Object { ffmpeg -i $_.FullName -c:a libmp3lame -b:a 128k ($_.BaseName + '.j2b') }. The browser-based tool processes one file at a time, so the desktop FFmpeg command is the practical choice for batch jobs.
AMR files carry minimal metadata to begin with — typically just codec parameters and occasionally a creation timestamp. The J2B container format, being a game-specific wrapper around AMF module data, does not define standard metadata fields like ID3 tags. As a result, no meaningful metadata is transferred during this conversion; the output is effectively a bare audio stream in a game container header with no title, artist, or date information.
Technical Notes
AMR-NB, decoded via libopencore_amrnb, operates at a fixed 8 kHz sample rate with mono audio — it was engineered exclusively for intelligible speech transmission over GSM networks, not music or broadband audio. The LAME encoder (libmp3lame) will encode whatever PCM it receives, so the 8 kHz mono signal becomes a 128k MP3, but the output remains 8 kHz mono unless sample-rate conversion flags are explicitly added (e.g., -ar 44100 to upsample, though this adds no real audio information). The J2B container is an obscure, game-specific format: it prepends a small binary header to ASYLUM Music Format (AMF) data intended for tracker-style module playback in Jazz Jackrabbit 2. FFmpeg can write the .j2b extension and wrap MP3-encoded audio in it, but the resulting file is structurally different from a genuine AMF module and may be rejected by the original game engine. For actual JJ2 modding workflows, purpose-built tools like JJ2+ or the ASYLUM tracker are the authoritative path. This conversion is best suited for research, toolchain validation, or experimental custom engine audio pipelines. No chapters, subtitle streams, or multiple audio tracks are supported by either format, so the output is always a single mono audio stream.