M3U8 to MP4 No Audio? Root Causes and How to Fix Them
You waited several minutes for the conversion to finish, opened the MP4 — picture is perfect, but complete silence. This is one of the most common problems in M3U8 conversion, and the cause is almost never your process. It's an audio codec compatibility issue.

Why Is There No Audio After Conversion?
Cause 1: Incompatible Audio Codec (Most Common)
The .ts segments in an HLS stream don't always use AAC audio. Common "problem formats" include:
| Audio Codec | Description | Common In | MP4 Compatibility |
|---|---|---|---|
| AAC-LC | Standard AAC | Most streams | ✅ Fully compatible |
| HE-AAC v2 | High-efficiency AAC | Low-bitrate streams | ⚠️ Some players don't support |
| AC-3 (Dolby) | Dolby audio | Films, high-quality streams | ❌ Most MP4 players won't play |
| EAC-3 (Dolby Digital Plus) | Enhanced Dolby | Streaming platforms | ❌ Mostly unsupported |
| MP3 (MPEG-1 Layer 3) | Legacy codec | Older streams | ⚠️ Container packaging may fail |
When you use ffmpeg -c copy (direct copy mode), FFmpeg places the audio as-is into the MP4 container. If the original audio is AC-3 or EAC-3, many players — especially mobile built-in players — will play silently. The audio track exists; the player just can't decode it.
Cause 2: The TS Segments Simply Have No Audio Track
Some HLS streams separate video and audio into independent streams (especially multilingual content). In this case: - The video M3U8 only contains video segments - Audio has its own separate M3U8 - Downloading only the video M3U8 naturally yields no audio
Cause 3: Audio/Video Timestamp Desync
Sometimes the audio track exists but has been "shifted" to an unexpected position because of PTS/DTS timestamp discontinuities in the TS segments. Some players misread this as "no audio."
Cause 4: Audio Track Lost During Merging
If audio stream IDs are inconsistent across segments (e.g., some segments use stream 0, others use stream 1), -c copy during concat may grab only video and lose audio.
FFmpeg Fixes (Targeted Solutions)
Fix 1: Force Re-encode Audio to AAC (Universal Fix)
ffmpeg -i input.m3u8 -c:v copy -c:a aac -b:a 192k output.mp4
Explanation:
- -c:v copy: Keep video as-is (fast, no re-encode)
- -c:a aac: Force re-encode audio to AAC format
- -b:a 192k: Set audio bitrate to 192kbps (good quality, reasonable size)
This is the recommended universal fix. Regardless of whether the original audio is AC-3, EAC-3, or anything else, re-encoding to AAC ensures compatibility across virtually all devices.
Fix 2: Regenerate Timestamps
ffmpeg -fflags +genpts -i input.m3u8 -c:v copy -c:a aac output.mp4
Explanation:
- -fflags +genpts: Regenerate all timestamps, fixing PTS/DTS discontinuities
- Use for intermittent audio issues ("sometimes has audio, sometimes doesn't")
Fix 3: Explicitly Select Audio Stream
ffmpeg -i input.m3u8 -map 0:v:0 -map 0:a:0 -c:v copy -c:a aac output.mp4
Explanation:
- -map 0:v:0: Explicitly select the first video stream
- -map 0:a:0: Explicitly select the first audio stream
- Prevents FFmpeg from auto-selecting streams and accidentally dropping audio
Fix 4: Merge Separate Audio Stream
If video and audio are in separate M3U8 files:
ffmpeg -i video.m3u8 -i audio.m3u8 \
-c:v copy -c:a aac \
-map 0:v:0 -map 1:a:0 \
output.mp4
Explanation:
- First -i: Video stream
- Second -i: Audio stream
- -map takes video from first input, audio from second input
How to Check Your M3U8 Audio Format
Identifying the problem before fixing saves time. Use FFmpeg's probe:
ffprobe -i "https://example.com/stream.m3u8" -show_streams
Key fields to look at:
codec_name=ac3 ← This is the problem! Re-encode to aac
codec_type=audio
sample_rate=48000
channels=6 ← 6-channel audio can also cause issues
If codec_name is not aac, or channels exceeds 2 (stereo), that's very likely the cause of the silence.
How Browser-Based Tools Handle Audio
Browser-based FFmpeg.wasm tools typically use -c copy for merging. This means:
- If source audio is AAC → Normal audio ✅
- If source audio is AC-3 → Likely muted ⚠️
Because in-browser re-encoding dramatically increases processing time and memory usage, most browser tools don't support audio transcoding.
If you download from this site's HLS Downloader and get no audio, fix it with a quick desktop FFmpeg pass:
ffmpeg -i downloaded.mp4 -c:v copy -c:a aac -b:a 192k fixed.mp4
This only re-encodes the audio — it typically completes in seconds.
Prevention: Pre-Download Checklist
- Test with a player first: Confirm the stream has audio in the M3U8Go Player
- Check audio codec: Use
ffprobeto verify audio encoding - Always use
-c:a aac: Re-encode audio at download time rather than fixing it later - Check for separate audio tracks: Confirm whether a multilingual stream uses a separate audio M3U8
FAQ
Why does VLC play audio fine, but my phone doesn't?
VLC bundles virtually every audio decoder (including AC-3 and EAC-3), while mobile built-in players typically only support AAC. The fix is to re-encode audio to AAC.
What's the difference between -c copy and -c:a aac?
-c copy directly copies raw data — fastest but format-preserving. -c:a aac re-encodes audio to AAC — requires CPU but maximizes compatibility. Always keep -c:v copy for video to avoid unnecessary re-encoding.
Does re-encoding degrade audio quality?
At 192kbps or higher, the difference is practically inaudible. If you have very high audio quality requirements, use -b:a 320k.
Ready to test your M3U8 stream?
🚀 Try the M3U8 Online Player