Aug 19 2008
ffmpeg, codecs, libmp3lame, libxvid y otras hierbas
Quiero convertir un video descargado de YouTube a formato AVI (xvid, mp3). Lo primero: eso de mp3 es tabú para el conversor ffmpeg que viene de serie en Ubuntu. Hay que instalar el ffmpeg-sin-miedos del repositorio Medibuntu.
Una vez hecho, pasemos a la conversión:
$ ffmpeg -i pocoyo_bed_time.flv -s 320×240 -r 24 -acodec libmp3lame -vcodec libxvid -vtag XVID -f avi -qscale 3 -g 300 -deinterlace -ab 56k -ar 24000 -async 1 pocoyo_bed_time.avi
…
….
Unknown codec ‘libmp3lame’
Vaya por dios. ¿No hay soporte libmp3lame en ffmpeg? Pero ¿no era eso lo que precisamente aportaba la versión de Medibuntu?
Veamos:
juanan@morton:~/Desktop/zen$ ffmpeg -version
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2007 Fabrice Bellard, et al.
configuration: –enable-gpl –enable-pp –enable-swscaler –enable-pthreads –enable-libvorbis –enable-libtheora –enable-libogg –enable-libgsm –enable-dc1394 –disable-debug –enable-libmp3lame –enable-libfaadbin –enable-libfaad –enable-libfaac –enable-xvid –enable-x264 –enable-liba52 –enable-amr_nb –enable-amr_wb –enable-shared –prefix=/usr
libavutil version: 1d.49.3.0
libavcodec version: 1d.51.38.0
libavformat version: 1d.51.10.0
built on Jul 29 2008 18:21:25, gcc: 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
ffmpeg SVN-rUNKNOWN
libavutil 3212032
libavcodec 3352064
libavformat 3344896
Pues en el configure se ve claramente –enable-libmp3lame .
¿Qué ocurre? Que nos quieren volver locos con los nombres :-) Para averiguar el nombre del encoder necesario, hay que realizar el conjuro mágico:
$ ffmpeg -formats | grep -i mp3
Ahí, entre otras cosas, veremos:
DE mp3 MPEG audio layer 3
DEA mp3
D A mp3adu
D A mp3on4
La D indica "decoder". La E indica "encoder". La A no sé qué indica :-O
Es decir, podemos codificar (encode) si usamos la opción "-vcodec mp3 "
y no "-vcodec libmp3lame" como estábamos haciendo.
Si lo probamos:
juanan@morton:~/Desktop/zen$ ffmpeg -i pocoyo_bed_time.flv -s 320×240 -r 24 -acodec mp3 -vcodec libxvid -vtag XVID -f avi -qscale 3 -g 300 -deinterlace -ab 56k -ar 24000 -async 1 pocoyo_bed_time.avi
…
Unknown codec ‘libxvid’
El error es otro… y ya sabéis cómo resolver. La orden final correcta sería:
$ ffmpeg -i pocoyo_bed_time.flv -s 320x240 -r 24 -acodec mp3 -vcodec xvid -vtag XVID -f avi -qscale 3 -g 300 -deinterlace -ab 56k -ar 24000 -async 1 pocoyo_bed_time.avi
Otra opción sería pasarlo al formato abierto ogg con ffmpeg2theora :) , tan facil como:
ffmpeg2theora video.flv
el resultado es video.ogg o video.ogv , y parece más sencillo (no sé si los resultados son peores).
yo lo utilizo en un script juntamente con youtube-dl para automatizar la descarga y conversión de los videos de youtube, pues no tengo adobe flash instalado.
Si quieres convertir video y audio de un formato a otro la mejor solución es usar mencoder, que además de soportar todos los codecs de ffmpeg añade otros y es más fácil.
Te sugiero que no recomprimas el audio, no sé cómo será el flv que tienes pero por defecto suelen ser mp3, así que con mencoder sería cuestión de usar la opción -oac copy.
Si necesitas recomprimirlo el mencoder que viene con ubuntu include liblame, el codec se llama mp3lame.
@Andreu: no lo he dicho, pero el vídeo lo necesito en el formato indicado porque va a parar a un player portátil (Creative Zen) que sólo soporta xvid (y wmv, que todavía sería peor ;-)
@Ontza: mencoder también lo he probado y sí, funciona bien. Realmente no tengo ninguna pega en usar uno u otro, me he inclinado en esta ocasión por ffmpeg. Lo de recomprimir el audio, también lo he hecho para ajustarlo al formato que usa el player portátil.
Pocoyo rules!
Gran serie de animacion :D
[...] salida.mp3, es el nombre que tendrá el fichero resultante. Importante: si te aparece un error como Unknown encoder ‘mp3′ intenta poner libmp3lame después de -acodec (quizas te interese leer esto). [...]
[...] primera opcion. Lo mismo sucede con el codec de audio mp3 y talvez suceda con algun otro codec. En DiarioLinux muestran como saber los codecs que pueden ser usados con ffmpeg (el corazon de WinFF) con el [...]
Por si le sirve a alguien comentar que
A = Audio
V = Vídeo
Salu2