If a file you converted with FFmpeg plays without sound, there are several possible causes. Check the output with ffprobe first (it comes with FFmpeg and shows what a file contains), then narrow it down.

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
  • No Audio: line: the file has no audio at all
  • An Audio: line but no sound: the problem is the codec or the player

Cause 1: The -an Option Is Set

Symptom

-an removes the audio stream. It often slips in when you copy a command from somewhere else.

# 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 has no audio, the output has none either.

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

Fix

Add 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 won’t play certain combinations of container (the file format, such as MP4 or MKV) and audio codec.

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

Fix

For MP4, use aac or mp3:

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

Recommended audio codecs by container:

Container Recommended audio codecs
MP4 AAC (aac), MP3 (libmp3lame)
MKV AAC, MP3, Vorbis or Opus
WebM Vorbis (libvorbis), Opus (libopus)
MOV AAC, PCM

Cause 4: Sample-Rate Mismatch

Some codecs only support certain sample rates (how many times per second the sound is sampled). If the input uses another rate, FFmpeg converts it by itself, so the output still has sound. For example, 96000 Hz audio encoded with libmp3lame comes out at 48000 Hz. Players and devices can have limits too: Android lists AAC-LC support only for 8 to 48 kHz.

Fix

Set the sample rate with -ar:

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

The usual rates are 44100 Hz (CD quality) and 48000 Hz (the standard for video).

Cause 5: Stream-Mapping Issues (Multiple Streams)

If the input has several audio streams and you don’t use -map, FFmpeg keeps only one. It prefers a stream marked (default) in ffprobe’s output, then the one with the most channels.

Inspect

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

Fix

Pick the audio stream you want with -map:

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

To 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

Some players and devices support only certain channel counts. Android, for example, lists mono, stereo, 5.0 and 5.1 for AAC-LC.

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

What to Expect

If a 2-minute MP4 seems to have no sound, first check whether the output file has an audio stream:

ffprobe -v error -select_streams a \
  -show_entries stream=index,codec_name,channels,sample_rate,bit_rate \
  -of default=nw=1 output.mp4

For normal stereo AAC you see lines such as codec_name=aac, channels=2 and sample_rate=48000. If nothing is printed, the file has no audio stream.

If there is an audio stream but no sound, extract the audio on its own (the last two commands under Debug Commands). That tells you whether the player or the encoding is at fault. A 2-minute AAC track is usually only a few megabytes, and extraction often takes seconds.

Frequently Asked Questions

Why is there no audio after extracting a clip?

Usually the command maps only the video stream, so the audio is left out. Map the audio too, for example -map 0:v:0 -map 0:a:0, then add -c:a copy to copy it or -c:a aac to re-encode it.

AAC plays on phones but not in Premiere — why?

Premiere can import AAC audio in MP4 (see Adobe’s list of supported formats). If the audio still won’t import, re-encode only the audio with FFmpeg’s aac encoder (AAC-LC by default) and try again. ffmpeg -i in.mp4 -c:v copy -c:a aac -b:a 192k out.mp4 does that and leaves the video untouched.

My output has the audio track but it is silent

First check that the input has sound. Run ffmpeg -i in.mp4 -af volumedetect -f null -. If it reports max_volume: -91.0 dB, the source is silent or too quiet to hear. If the input has sound, FFmpeg may have picked a silent audio track (see Cause 5).

How do I keep multiple audio tracks?

Use -map 0:v -map 0:a. 0:a with no index selects all audio streams. With -map 0:a alone, the video is left out. Without -map, only one audio stream is kept, with or without -c copy (see Cause 5).

Does compressing video kill the audio?

No. Compressing changes only the video. To be sure the audio is kept, add -c:a copy (or -c:a aac -b:a 128k).


Primary source: ffmpeg.org/ffmpeg.html