You converted a file with FFmpeg, played it back, and there’s no audio. There are several possible causes, and the fastest path to a fix is to check the output with ffprobe first and then narrow down from there.

Tested with ffmpeg 6.1


Start with ffprobe

ffprobe -i output.mp4

Look at the Stream lines:

Stream #0:0: Video: h264, ...
Stream #0:1: Audio: aac, 44100 Hz, stereo, fltp, 128 kb/s
  • If there is no audio stream, the file contains no audio at all
  • If an audio stream exists but plays silent, the issue is codec-related or on the player side

Cause 1: The -an Option Is Set

Symptom

-an removes the audio stream. It’s easy to leave it in by accident, especially when copying commands from other places.

# Bad — audio is stripped
ffmpeg -i input.mp4 -an output.mp4

Fix

# Remove -an
ffmpeg -i input.mp4 output.mp4

# Or specify an audio codec explicitly
ffmpeg -i input.mp4 -c:a aac output.mp4

Cause 2: The Input File Has No Audio Stream

Symptom

If the input itself has no audio, the output will have none either.

ffprobe -i input.mp4
# → Stream #0:0: Video: h264, ... (no audio stream listed)

Fix

Mix in a separate audio file:

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest output.mp4
  • -shortest — stop when the shorter stream ends

Add a silent audio track (for player compatibility):

ffmpeg -i input.mp4 -f lavfi -i anullsrc=r=44100:cl=stereo \
  -c:v copy -c:a aac -shortest output.mp4

Cause 3: The Audio Codec Doesn’t Match the Output Container

Symptom

Some players will refuse certain container + audio codec combinations.

# MP4 with Vorbis (not recommended)
ffmpeg -i input.mkv -c:v copy -c:a libvorbis output.mp4

Fix

Use aac or mp3 for MP4 containers:

ffmpeg -i input.mkv -c:v copy -c:a aac output.mp4

Recommended audio codecs by container:

ContainerRecommended audio codecs
MP4AAC (aac), MP3 (libmp3lame)
MKVAAC, MP3, Vorbis, Opus — any of these
WebMVorbis (libvorbis), Opus (libopus)
MOVAAC, PCM

Cause 4: Sample-Rate Mismatch

Some codecs only support specific sample rates.

Fix

Specify the sample rate explicitly:

ffmpeg -i input.mp4 -c:a aac -ar 44100 output.mp4

Common sample rates: 44100 Hz (CD quality), 48000 Hz (video standard).


Cause 5: Stream-Mapping Issues (Multiple Streams)

When the input contains multiple audio streams, FFmpeg picks the first one by default.

Inspect

ffprobe -i input.mkv
# Stream #0:0: Video
# Stream #0:1: Audio (Japanese)
# Stream #0:2: Audio (English)

Fix

Select a specific audio stream with -map:

# Use the second audio stream (English)
ffmpeg -i input.mkv -map 0:v:0 -map 0:a:1 -c copy output.mp4

Include every audio stream:

ffmpeg -i input.mkv -map 0:v -map 0:a -c copy output.mp4

Cause 6: Channel Count (Mono vs. Stereo)

Symptom

A player expecting mono may choke on stereo, or vice versa.

Fix

# Convert to stereo
ffmpeg -i input.mp4 -ac 2 output.mp4

# Convert to mono
ffmpeg -i input.mp4 -ac 1 output.mp4

Debug Commands

# Verbose logging
ffmpeg -v verbose -i input.mp4 output.mp4

# Export audio only for isolated testing
ffmpeg -i input.mp4 -vn test_audio.aac
ffplay test_audio.aac

Frequently Asked Questions

Why is there no audio after extracting a clip?

Most often you used -c:v copy without specifying -c:a, and FFmpeg defaulted to remove the audio. Add -c:a copy (or re-encode) explicitly.

AAC plays on phones but not in Premiere — why?

Premiere prefers AAC-LC inside an MP4 with a moov at the start. Re-mux with -movflags +faststart and ensure the profile is LC, not HE-AAC.

My output has the audio track but it is silent

Check the input: ffprobe in.mp4 — if peak level is below -90 dB, the source is silent. Otherwise an -an flag may have been added inadvertently.

How do I keep multiple audio tracks?

Use -map 0:a (without an index) to copy all audio streams. Default -c copy only takes the first audio stream.

Does compressing video kill the audio?

No — compression operates on the video codec only. Always pass -c:a copy (or -c:a aac -b:a 128k) explicitly to preserve the audio.



Tested with ffmpeg 6.1.1 / Ubuntu 24.04
Primary source: ffmpeg.org/ffmpeg.html