How can I strip the audio track out of a video file with FFmpeg?
Asked
Active
Viewed 4.4e+01k times
4 Answers
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
-
2I'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
-
1This 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
-
5vcodec 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
-
3In other words, this solution can conceivably lose more information than the accepted solution. – Alex Feb 25 '20 at 15:12
-
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
-
Out of interest, how would I use this snippet when there are spaces in the video dir (and output dir)? – PaulSkinner Aug 12 '22 at 14:26