452

How can I strip the audio track out of a video file with FFmpeg?

Brad
  • 5,446
  • 8
  • 49
  • 79
Rami Dabain
  • 4,757
  • 2
  • 16
  • 10

4 Answers4

647

You remove audio by using the -an flag:

input_file=example.mkv
output_file=example-nosound.mkv

ffmpeg -i $input_file -c copy -an $output_file

This ffmpeg flag is documented here.

Iulian Onofrei
  • 313
  • 4
  • 17
Martin Beckett
  • 8,993
  • 1
  • 24
  • 28
  • 2
    I'm a `bash` and `ffmpeg` newbie but I put this answer together with some other pieces to create `function ffsilent { ffmpeg -i $1 -c copy -an "$1-nosound.${1#*.}" }` which you can use in your profile to quickly create a silent version of any video file. – Aaron Dec 16 '19 at 15:18
  • 5
    @Aaron nice, but should be `function ffsilent { ffmpeg -i "$1" -c copy -an "${1%.*}-nosound.${1#*.}" }` or you'll end up with "file.mp4-nosound.mp4" when using it on "file.mp4". – Alexander Revo Jul 07 '20 at 08:52
  • 1
    This doesn't carry over GPS coordinates. – Donny V Dec 08 '20 at 16:43
  • Using `-c copy -an` works on most video files but it won't strip audio from SWF (Shockwave Flash) files. The solution is to shorten it to just `-an` then it works. – bat_cmd Apr 04 '21 at 00:18
  • Are you sure that this avoids re-encoding the video? – rlittles Jun 13 '22 at 00:06
  • 1
    @rlittles Yes, `-c copy` always avoids re-encoding, If it can't it will fail with an error. – TheRandomGuyNamedJoe12 Jul 10 '22 at 00:35
125

You probably don't want to reencode the video (a slow and lossy process), so try:

input_file=example.mkv
output_file=example-nosound.mkv

ffmpeg -i $input_file -vcodec copy -an $output_file

(n.b. some Linux distributions now come with the avconv fork of ffmpeg)

Bruno Bronosky
  • 1,755
  • 1
  • 18
  • 25
John Mellor
  • 1,541
  • 1
  • 10
  • 6
  • 2
    This didn't make any difference to me compared to the accepted solution. – nidi Dec 29 '17 at 00:49
  • 5
    vcodec is an alias for `-c:v`, so specifically it'd copy the video stream only. The only data you're preventing with this would be subtitles, metadata, etc from what I can see. – Rogue Mar 08 '18 at 15:48
  • 3
    In other words, this solution can conceivably lose more information than the accepted solution. – Alex Feb 25 '20 at 15:12
  • We can call this "only video" solution :+1: – Vladimir Vukanac Nov 01 '21 at 10:44
12
avconv -i [input_file] -vcodec copy -an [output_file]

If you cannot install ffmpeg because of existing of avconv try that .

Abdennour TOUMI
  • 249
  • 2
  • 7
3

I put together a short code snippet that automates the process of removing audio from videos files for a whole directory that contains video files:

FILES=/{videos_dir}/*
output_dir=/{no_audio_dir}
for input_file in $FILES
do
  file_name=$(basename $input_file)
  output_file="$output_dir/$file_name"
  ffmpeg -i $input_file -c copy -an $output_file
done

I hope this one helps!

apolak
  • 39
  • 1