Dices que quieres "extraer audio de ellos (mp3 u ogg)". Pero, ¿qué pasa si el audio en el archivo mp4 no es uno de esos? tendrías que transcodificar de todos modos. Entonces, ¿por qué no dejar la detección del formato de audio en ffmpeg?
Para convertir un archivo:
ffmpeg -i videofile.mp4 -vn -acodec libvorbis audiofile.ogg
Para convertir muchos archivos:
for vid in *.mp4; do ffmpeg -i "$vid" -vn -acodec libvorbis "${vid%.mp4}.ogg"; done
Por supuesto, puede seleccionar cualquier parámetro ffmpeg para la codificación de audio que desee, para establecer cosas como la tasa de bits, etc.
Use -acodec libmp3lame
y cambie la extensión de .ogg
a .mp3
para codificación de mp3.
Si lo que quiere es realmente extraer el audio, simplemente puede "copiar" la pista de audio a un archivo usando -acodec copy
. Por supuesto, la principal diferencia es que la transcodificación es lenta e intensiva en CPU, mientras que la copia es realmente rápida, ya que solo está moviendo bytes de un archivo a otro. Aquí se explica cómo copiar solo la pista de audio (suponiendo que esté en formato mp3):
ffmpeg -i videofile.mp4 -vn -acodec copy audiofile.mp3
Nótese que en este caso, el formato de archivo de audio tiene que ser coherente con lo que dispone el recipiente (es decir, si el audio está en formato AAC, que tiene que decir audiofile.aac
). Puede usar el ffprobe
comando para ver qué códec tiene, esto puede proporcionar alguna información:
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "videofile.mp4"
Una posible forma de analizar automáticamente el códec de audio y nombrar el archivo de audio en consecuencia sería:
mkdir -p output
# current directory has to contain at least one .mp4 file
for vid in *.mp4; do
codec="$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "$vid")"
case "$codec" in
mp3 ) filetype=mp3 ;;
vorbis ) filetype=ogg ;;
* ) filetype= ;;
esac
if [ "$filetype" ]; then
ffmpeg -i "$vid" -vn -acodec copy output/"${vid%.*}"."$filetype"
else
ffmpeg -i "$vid" -vn -acodec libvorbis output/"${vid%.*}".ogg
done
Notas: los archivos de salida se crean en el subdirectorio output
que crea al principio (si es necesario). Para otros códecs que no sean mp3 y vorbis, convierte el audio a ogg. Ubuntu 14.04 no tiene ffmpeg en los repositorios estándar, pero puede agregar el repositorio ppa: mc3man / trusty-media e instalar el paquete ffmpeg para obtener el software necesario. Ver aquí para más detalles.