lunes, 10 de diciembre de 2007

Guía rápida de FFMPEG (flv a avi, flv a mpg, avi a mpg, mpg a avi y mucho más)

¡Hola a todos!

Pues sí. Realmente convertir este formato de video flash a Avi o mpeg es de lo más sencillito si tenéis instalada en vuestro ubunto la aplicación ffmpeg.

Para poder descargarlo basta con escribir en la consola:

sudo apt-get install ffmpeg

La forma de convertir el video sería:

ffmpeg -i videoFlash.flv videoFlash.avi
ffmpeg -i videoFlash.flv videoFlash.mpg

Pero, ¿qué sucede si nuestro nombre de archivo tiene espacios? Nada de nada. Bien sencillo. La solución sería:

ffmpeg -i "video en flash.flv" "video en flash.avi"
ffmpeg -i "video en flash.flv" "video en flash.mpg"

Pregunta: ¿Puedo hacer otro tipo de conversiones? Por supuesto:

ffmpeg -i "videoA.avi" "videoB.mpg"
ffmpeg -i "videoB.mpg" "videoA.avi"

Pregunta: ¿y para qué es el -i? Le especifica a ffmpeg cual es el archivo de entrada.

Pregunta: ¿Qué pasa con el bitrate? Bueno. Siguiendo mi método el programa intentará conservar la calidad del video en la mayor medida posible. No debemos olvidar que según que formatos ya de serie; aunque no lo deseemos serían mínimamente comprimidos. Si no os queréis comer la cabeza os recomiendo la opción que yo facilito.

Pregunta: Quiero forzar un frame rate (fotogramas por segundo) ¿Qué debo hacer? Muy sencillo. tanto en el archivo de entrada como en el de salida esto puede ser configurable. Así pues podemos conseguir efectos de acelerado o decelerado en nuestros videos. La línea de ejemplo sería:

ffmpeg -r 25 -i video1.avi -r 25 video2.mpg

En este caso ambos estarían forzados a 25 frames/second.

Pregunta: Quiero saber que formatos de archivos y códecs me soporta actualmente el ffmpeg. ¿Cómo debo hacerlo? Sencillo. Sólo debéis escribir la siguiente línea:

ffmpeg -formats

Pregunta: Tengo un programita que llama al ffmpeg pero en ocasiones el archivo de destino ya existía y la pregunta de Y/N me detiene la ejecución. ¿Cómo puedo solucionarlo? Muy sencillo. Con la propiedad overwrite.

ffmpeg -i "archivoA.avi" -y "archivoExistente.mpg"

Pregunta: Aún y sabiendo lo que me has dicho antes deseo cambiar el bitrate del video. ¿Cómo puedo hacerlo para que lo haga a 100? Bueno, el bitrate por defecto es de 200 pero puedes modificarlo de la forma:

ffmpeg -i "archivoA.avi" -b 100 "archivodestino.mpg"

Pregunta: Todo eso esta muy bien. Pero, ¿Qué hago si deseo extraer el audio de un video? Muy fácil:

ffmpeg -i "archivoVideo.avi" "archivoaudio.mp3"

(Recordad que debéis tener los códecs instalados y que ffmpeg -formats muestre esa extensión como formato reconocido)

Como podéis observar, las posibilidades de este comando son enormes. Por supuesto existen muchas más y mayores combinaciones, incluso de una complejidad muy muy importante. Pensad posee capacidad por parámetros de operar matemáticamente con ciertos resultados para que ciertos parámetros sean el resultado de los mismos. Eso ya da a entender las posibilidad.

Desde editar los tags de un mp3 a añadir subtítulos a un video, todo puede hacerse con este comando. Así pues os invito a jugar con él.

Si deseáis obtener más información podéis escribir la línea:

man ffmpeg

¡Espero que os haya sido de utilidad!

¡Saludos!

8 comentarios:

  1. Muy sencillo y fácil el tutorial, me gusta!

    Te queria preguntar una problema que no se resolver:

    Estoy intentando convertir un fichero avi a mpeg, para poder editarlo con Cinelerra y con la misma calidad. El caso es que cinelerra no me carga el fichero avi y lo intento pasar a mpeg. Este fichero ocupa casi 10GB.

    Cuando lo intento hacer con ffmpeg, con la siguiente instruccion:
    ffmpeg -i entrada.avi -sameq -t 2774 salida.mpeg

    El caso es que solo me graba 3minutos 44 segundos. He probado con diferentes instrucciones, pero el tiempo que me graba es el mismo, y el video avi ocupa más de 46 minutos, en concreto los 2774 segundos de la opción t.

    También lo he intentado simplemente con:
    ffmpeg -i entrada.avi salida.mpeg
    pero el resultado és que ocupa menos el arhcivo resultante, pero se para en el mismo punto.

    Tienes alguna idea de que puede ser?

    Muchas gracias.

    ResponderEliminar
  2. hola quiseir auna ayuda inmensa par algo que estoy relaizando
    y es como atravez del codigo FFmpeg puedo ahcer un video de reproduccion infinita estoy utilizando un software libre llamdo pazera me uedes ayudar ???

    ResponderEliminar
  3. EXCELENETE!!! Gracias Amigo.

    ResponderEliminar
  4. Hola,Alex. Al grano: Tengo un reproductor TITAN MP5 con ciertos parametros especificos;ya logre dar con los que me causaban dificultad en mencoder, en ffmpeg.Solo tengo una piedrita: el codec de video de salida que necesito es XVID MPEG-4 segun la etiqueta de propiedades de los videos de mi reproductor,pero no logro atinar con el nombre,o es que no tengo ese codec instalado.ya probe con xvid,mpeg4,xvid mpeg4,xvid mpeg-4 y nada,en la consola me tira error.
    El codec que viene por defecto es ffmpeg MPEG-4
    Si me puedes dar la info del nombre del codec,o ver los que tengo instalados,te lo agradeceria.
    No quiero renunciar al reproductor:los videos son de excelente calidad y la pantalla es de buen tamaño

    ResponderEliminar
  5. Ya encontre el vcodec: es libxvid.
    y tambien le ajuste otra cosa: -b 700k porque 200k que es por defecto no cumple con la caracteristica que se muestra en windows.
    Pero el reproductor todavia no me lee los videos.
    ¿Y ahora que hago? No se me ocurre otro ajuste.
    Aqui un ejemplo de lo que escribo en consola:
    $ ffmpeg -i lands.flv -r 20 -s qvga -ar 44100 -ab 128k -ac 2 -acodec mp2 -vcodec libxvid -b 700k lands4.avi

    ResponderEliminar
  6. nesecito ayuda T_T

    se supone que este comando debería de funcionar pero me da error... bueno errores :D

    ffmpeg -i /tmp/mmm.mp4 -b 13130 -s 640×480 -vcodec mjpeg -ab 64 -acodec pcm_mulaw -ar 8000 -ac 1 -f mulaw /tmp/mmm.avi

    primero me dice: incorrect frame size

    le borro una parte y el comando queda así

    ffmpeg -i /tmp/mmm.mp4 -b 13130 -vcodec mjpeg -ab 64 -acodec pcm_mulaw -ar 8000 -ac 1 -f mulaw /tmp/mmm.avi

    luego lanza lo siguiente:

    FFmpeg version 0.5-svn17737+3:0.svn20090303-1ubuntu6, Copyright (c) 2000-2009 Fabrice Bellard, et al.
    configuration: --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --extra-version=svn17737+3:0.svn20090303-1ubuntu6 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --disable-stripping --disable-vhook --enable-libdc1394 --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-armvfp --disable-neon --disable-altivec --disable-vis --enable-shared --disable-static
    libavutil 49.15. 0 / 49.15. 0
    libavcodec 52.20. 0 / 52.20. 0
    libavformat 52.31. 0 / 52.31. 0
    libavdevice 52. 1. 0 / 52. 1. 0
    libavfilter 0. 4. 0 / 0. 4. 0
    libswscale 0. 7. 1 / 0. 7. 1
    libpostproc 51. 2. 0 / 51. 2. 0
    built on Apr 10 2009 23:18:41, gcc: 4.3.3

    Seems stream 1 codec frame rate differs from container frame rate: 47.93 (47934/1000) -> 23.98 (24000/1001)
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/tmp/mmm.mp4':
    Duration: 00:03:46.78, start: 0.000000, bitrate: 604 kb/s
    Stream #0.0(und): Audio: aac, 44100 Hz, stereo, s16
    Stream #0.1(und): Video: h264, yuv420p, 472x360, 23.98 tbr, 23.97 tbn, 47.93 tbc
    WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s
    Output #0, mulaw, to '/tmp/mmm.avi':
    Stream #0.0(und): Video: mjpeg, yuvj420p, 472x360, q=2-31, 13 kb/s, 90k tbn, 23.98 tbc
    Stream #0.1(und): Audio: pcm_mulaw, 8000 Hz, mono, s16, 64 kb/s
    Stream mapping:
    Stream #0.1 -> #0.0
    Stream #0.0 -> #0.1
    Press [q] to stop encoding
    frame= 5426 fps= 32 q=24.8 Lsize= 40900kB time=226.31 bitrate=1480.5kbits/s
    video:39128kB audio:1772kB global headers:0kB muxing overhead 0.000000%

    y me crea un video vacio de 39Mb

    =S

    llevo 3 días corrido pasandome de linux a windows a ver que programa es que me va a resolver

    quiero pasar videos a mi camara nikon l20 los videos que coje tienen el siguiente formato

    -s 640×480/320x240 size
    -vcodec mjpeg video codec motion jpeg
    -ab 64 audio a 64kbps
    -acodec pcm_mulaw audio codec ulaw/mulaw/ ley u de CCITT
    -ar 8000 frecuencia:8000Hz
    -ac 1 audio channel mono
    -r 30 30fps

    el tamanho de muestra de sonido es 8bit

    alguien me puede decir algun programa para convertir sea en windows o ubuntu que soporte el audio "ulaw"
    en windows casi encuentro un programa que lo hacia pero no soportaba ese codec =S
    se llama "imtoo mpeg converter"

    por favor alguien que ilumine mi camino hacia la salvación ;O ahhhh!!

    isnotqwerty@yahoo.com

    ResponderEliminar
  7. Hola deseo saber si ffmpeg reconoce el formato mj2 y de ser asi como puedo convertir una file flv a mj2, el formato mj2 es del mjpeg2000.
    Gracias por cualquier informacion

    ResponderEliminar