384 votos

Eliminar el audio de un archivo de vídeo con FFmpeg

¿Cómo puedo eliminar la pista de audio de un archivo de vídeo con FFmpeg?

548voto

Jan Hlavacek Puntos 156

Para eliminar el audio se utiliza el botón -an flag.

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

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

Documentación completa de ffmpeg aquí .

1 votos

Soy un bash y ffmpeg novato pero he juntado esta respuesta con algunas otras piezas para crear function ffsilent { ffmpeg -i $1 -c copy -an "$1-nosound.${1#*.}" } que puedes utilizar en tu perfil para crear rápidamente una versión silenciosa de cualquier archivo de vídeo.

4 votos

@Aaron agradable, pero debería ser function ffsilent { ffmpeg -i "$1" -c copy -an "${1%.*}-nosound.${1#*.}" } o terminará con "archivo.mp4-nosound.mp4" al utilizarlo en "archivo.mp4".

0 votos

Esto no se traslada a las coordenadas del GPS.

119voto

Philipp Puntos 2117

Probablemente no quieras recodificar el vídeo (un proceso lento y con pérdidas), así que prueba:

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

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

(n.b. algunas distribuciones de Linux vienen ahora con el avconv fork de ffmpeg )

2 votos

Esto no me supuso ninguna diferencia respecto a la solución aceptada.

4 votos

vcodec es un alias de -c:v , por lo que específicamente copiará sólo el flujo de vídeo. Los únicos datos que se evitan con esto serían los subtítulos, los metadatos, etc. por lo que puedo ver.

2 votos

En otras palabras, esta solución puede perder posiblemente más información que la solución aceptada.

11voto

Abdennour TOUMI Puntos 136
avconv -i [input_file] -vcodec copy -an [output_file]

Si no puede instalar ffmpeg debido a la existencia de avconv prueba que .

2voto

apolak Puntos 19

He elaborado un breve fragmento de código que automatiza el proceso de eliminación del audio de los archivos de vídeo para todo un directorio que contenga archivos de vídeo:

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

Espero que esto ayude.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: