Extraer sonido de videos flash

En ocasiones puede ser que quieras quedarte sólo con el audio de un archivo que tienes en formato Flash Video (.flv, el que usan webs como youtube). Para ello puedes extraerlo y guardarlo como un mp3 con ffmpeg  de la siguiente forma:

 ffmpeg -i video_original.flv audio_destino.mp3

Si lo que quieres es hacer esto mismo en un gran número de vídeos, aquí tienes un script bash que lo hace por ti (lo siento, no funciona en windows):

#!/bin/bash - 
#===============================================================================
#
#          FILE:  flv2mp3
# 
#         USAGE:  ./flv2mp3 
# 
#   DESCRIPTION:  Extrae la pista de música de un archivo flash
#                 y lo guarda como mp3
#
#       OPTIONS:  ---
#  REQUIREMENTS:  ffmpeg,xterm
#          BUGS:  ---
#         NOTES:  ---
#        AUTHOR:  ---
#       COMPANY: 
#       CREATED: 02/14/2012 08:38:01 PM CET
#      REVISION:  ---
#===============================================================================

set -o nounset                              # Treat unset variables as an error

clear 
echo ===============================================================================
echo
echo Introduzca la ruta \(relativa\) en la que se encuentran el\(los\) video\(s\) originales
echo Se extraerá el audio de todos los archivos con extensión .flv y se
echo guardará en formato mp3
read -p ">>" RUTA
echo ===============================================================================
echo
echo

RUTA=$RUTA/
# Comprobamos que existe algún archivo

if [ -e "$RUTA"aa ]
then
	ls $RUTA*.flv > /dev/shm/listado_flv    # Guardamos la lista de los 
	echo listado_flv:                       # archivos flash en la memoria ram
	echo -------------------------------------------------------------------------------
	cat /dev/shm/listado_flv
	echo
	echo -------------------------------------------------------------------------------
else 		               			      
	echo en $RUTA no se han encontrado archivos .flv
	exit
fi

# Procesamos los archivos

if [ -e /dev/shm/listado_flv ]
then
	echo ===============================================================================
	echo 
	while read ARCHIVO
	do
		echo ·Procesando "$ARCHIVO"
		NOMBRE=$(echo $ARCHIVO | awk -F . {'print $1'})
		xterm  -e ffmpeg -i "$ARCHIVO" "$NOMBRE".mp3
	done < /dev/shm/listado_flv
	# Borramos la lista de la ram
	rm /dev/shm/listado_flv
else
	echo ERROR: No se ha podido escribir la lista a /dev/shm

fi

echo Finalizado


Una vez que lo ejecutas, te pide la ruta relativa a la carpeta en donde se encuentran los vídeos. Tras esto el programa va extrayendo el audio y guardándolo en formato mp3 y con el mismo nombre que el vídeo del cual procede.

ffmpeg es un programa muy potente, por lo que modificándo un poco el script (que por cierto, si quieres, puedes 😉 ) se puede lograr que guarde el audio en otros formatos, o que realice infinidad de modificaciones tanto sobre el vídeo, como el audio o incluso los subtítulos.

Por último, dos anotaciones:
1º. Por algún motivo que se me escapa, tras procesar el primer archivo, el script no sigue trabajando con el resto de los vídeos (lo que sí sé es que es culpa de ffmpeg). Para solucionarlo lanzo el proceso en un terminal aparte con xterm.
2º. No fui capaz de hacer que ffmpeg no imprimiese la salida en la pantalla, pero al usar un terminal aparte consideré que era mejor opción poder ver lo que está haciendo.

Alguien sabe por que pasa esto??