Victor Castelan en Agosto 5, 2008

Convertir videos a FLV con FFMPEG puede ser muy laborioso. Pero, encontrando los parámetros correctos, nos genera en segundos nuestro video convertido con una calidad aceptable. Además FFMPEG es gratuito.

AVI a FLV

ffmpeg -y -i 'videoentrada.avi' -threads 2 -s 320x240 -r 30.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 512k -async 50 -acodec mp3 -ar 11025 -ac 1 -ab 16k videosalida.flv

donde ffmpeg se invoca con los siguientes parámetros:

  • -y -> sobreescribe archivo de salida
  • -i ‘videoentrada.avi’ -> archivo de entrada
  • -threads 2 -> hilos de decodificación
  • -s 320×240 -> Tamaño de salida
  • -r 30.00 -> Velocidad de cuadro (fps, cuadros x segundo)
  • -threads 1 -> hilo de decodificación
  • -pix_fmt yuv420p -> Formato del pixel
  • -g 300 -> Grupo de tamaño de imágenes
  • -qmin 3 -> Escala mínima del compresor de secuencia del video
  • -b 512k -> Bitrate del video en bits/s
  • -async 50 -> Método de sincronización de audio.
  • -acodec mp3 -> Forzar audio codec a mp3
  • -ar 11025 -> Frecuencia del muestreo de audio
  • -ac 1 -> Número de canales de audio
  • -ab 16k -> Bitrate del audio en bits/s
  • videosalida.flv -> Es el archivo de salida en formato FLV

MPEG a FLV

ffmpeg -y -i 'videoentrada.mpg' -threads 2 -s 320x240 -r 29.97 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 512k -async 50 -acodec mp3 -ar 44100 -ac 2 -ab 128k videosalida.flv

Después de varios meses probando, estos son los parámetros óptimos que he encontrado para procesar mis videos. Más información, consulta la documentación de ffmpeg.

Tags: ,

33 Comentarios a “Convertir videos mpeg y avi a flv con FFMPEG”

  1. mmm comoes que lo uso

  2. Hola buenas mira llevo buscando para poder hacer esto hace casi 2 meses
    pero nada y probe lo tuyo y tampoco me puedes echar una mano mira lo que quiero hacer es que queden los videos iguales que vimeo o blip.tv quedan asi:
    contenerdor;FLV
    Video;On2 VP6 Video
    Audio;MPEG 1 Audio, Layer 3 (MP3)

    pero no tengo manera de hacerlo si cambio con winff me sale bien el video pero el auido no sale e leido que es por una licencia de mp3 o algo asi pero ya no se que hacer mira este es el error que me da cuando hago lo que tu dices ;

    30.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 512k -async 50 -acodec mp3 -ar 11025 -ac 1 -ab 16k prueba.flv
    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-shared --prefix=/usr
    libavutil version: 1d.49.3.0
    libavcodec version: 1d.51.38.0
    libavformat version: 1d.51.10.0
    built on Jul 23 2008 22:38:24, gcc: 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
    Input #0, avi, from 'prueba.avi':
    Duration: 00:01:16.2, start: 0.000000, bitrate: 1734 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 480x360, 25.00 fps(r)
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, 123 kb/s
    Output #0, flv, to 'prueba.flv':
    Stream #0.0: Video: flv, yuv420p, 320x240, q=3-31, 512 kb/s, 30.00 fps(c)
    Stream #0.1: Audio: 0x0000, 11025 Hz, mono, 16 kb/s
    Stream mapping:
    Stream #0.0 -> #0.0
    Stream #0.1 -> #0.1
    Unsupported codec for output stream #0.1

  3. Cholito,
    Perdona por no responderte pero tu comentario estaba en la cola de SPAM y apenas lo he rescatado.
    Buenas noticias!! Al usar Ubuntu tienes una manera de resolver tu problema. Lo que necesitas es LAME para que tus videos te queden como quieres.
    La buena noticia es que es muy facil de instalar en Ubuntu:

    sudo apt-get install lame

    Eso es todo. Intenta volver a convertir tus videos. La técnica que describo aquí la utilizo para convertir cerca de 50 videos por semana sin ningún problema.

  4. y en centos?

  5. Lo siento, nunca he usado CentOS, sin embargo una vez instalado FFMPEG funciona igual en cualquier distribución LINUX

  6. hize la prueba pero no quedan como vimeo, se ven super pixeleados

  7. @eduardo: eso es porque ffmpeg codifica con sorenson, no con on2 vp6. La codificación a vp6 no está soportada con ffmpeg (al menos hasta donde yo sé). Hay que usar mencoder con las dll win32 vp6vfw.dll:

    http://www.mplayerhq.hu/DOCS/H.....ndows.html
    http://es.kioskea.net/faq/suje.....-de-fedora
    http://www.mjmwired.net/resour.....edora.html

    yo lo estoy intentando, pero mencoder me da error al cargar la dll :( .
    Lo he instalado todo de los repositorios de fedora, quizá tenga que compilar el mencoder/mplayer, aunque parece que el error viene de la dll (la descargué y copié al directorio de dlls por las bravas) ¿Puede que haya que configurar algo?

  8. Hola:
    Estoy trabajando con ffmpeg para pasar videos .mpeg a .flv
    El problema que tengo es que una vez convertidos, al mirar las propiedades del video recien creado aparece en tasa de fotogramas = 1000 (fps), cuando por defecto debería ser 25 fps. He intentado poner la opción -r con diferentes valores (20, 25…)pero siempre me los convierte a 1000fps

    Sin embargo, al convertir el mismo archivo .mpeg a .avi, si me pone la tasa de fotogramas adecuada( 25 por defecto o la que yo la especifique)

    Si alguien pudiera ayudarme estaría muy agradecido.
    Un saludo.

  9. Raúl:
    Lo que solicitas se puede corregir empleando la opción -r que indica los fps que necesitas. Ejemplo sencillo:


    ffmpeg -i 'archivodeentrada.mpg' -s 320x240 -r 25 archivosalida.flv

    En donde:

    • -i ‘archivodeentrada.mpg’ -> indica el archivo de entrada
    • -s 320×240 -> indica el tamaño de salida de tu video
    • -r 25 -> indica los fps que solicitas
    • archivosalida.flv -> es el archivo de salida

    Lo acabo de probar con un mpeg -> flv y el archivo de salida contiene 25 fps.
    Suerte!!

  10. Amigo, tu tutorial, es muy bueno… Pero bueno, aparte de felicitarte por cno buen blog, tengo una duda que casi no he encontrado…

    Recién bajé la película de The Dark Knight… es un archivo *.AVI… PEROOO… tiene DOS audios… ok?… en el totem, puedo eleir entre el audio en ingles o el castellano… yo prefiero inglés… y por otras cuestiones de los subtitulos… necesito recortar el video 34.82 segundos… pero por cuestión de los dos audios, no me deja convertir, ni recortar nada… nisiquiera extraer el audio… mira, este es mi log…

    ***********************

    zero@zero-laptop:~/Videos/peliculas_conciertos/el_caballero_de_la_noche$ ffmpeg -i the_dark_knight2.avi -ss 00:00:34[.98] -t 180 the_dark_knight.avi
    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 Mar 17 2009 21:37:49, gcc: 4.2.4 (Ubuntu 4.2.4-1ubuntu3)
    Input #0, avi, from ‘the_dark_knight2.avi’:
    Duration: 02:25:59.1, start: 0.000000, bitrate: 2267 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 720×400, 23.98 fps(r)
    Stream #0.1: Audio: ac3, 48000 Hz, 5:1, 192 kb/s
    Stream #0.2: Audio: ac3, 48000 Hz, 5:1, 192 kb/s
    Output #0, avi, to ‘the_dark_knight.avi’:
    Stream #0.0: Video: mpeg4, yuv420p, 720×400, q=2-31, 200 kb/s, 23.98 fps(c)
    Stream #0.1: Audio: mp2, 48000 Hz, 5:1, 64 kb/s
    Stream mapping:
    Stream #0.0 -> #0.0
    Stream #0.1 -> #0.1
    [mpeg4 @ 0xb7df69a8]removing common factors from framerate
    Error while opening codec for output stream #0.1 – maybe incorrect parameters such as bit_rate, rate, width or height
    zero@zero-laptop:~/Videos/peliculas_conciertos/el_caballero_de_la_noche$

    *******************************************************************

    Checa donde dice INPUT, y donde dice OUTPUT…

    Ahi está el lo completo, espero que me ayudes porfavor!!…

    Cuidate, y de antemano, muchas gracias!

  11. Estimado Omar:
    El error es simplemente de sintaxis en los parámetros de ffmpeg:
    1.- -ss el formato es hh:mm:ss[.ff], en donde [ff] es la fracción de segundo y el corchete indica que es opcional, sin embargo si lo empleas no debes escribir los corchetes.

    2.- -t indica la duración que quieres de salida a partir del punto de inicio indicado por -ss. El formato es el mismo que en -ss. Tú lo intentaste escribir en segundos (-t 180), lo que se traduciría a 3 minutos. (00:03:00)

    Checa este ejemplo:
    Aquí se sobreescribirá el archivo de salida, con la opción -y

    ffmpeg -y -i the_dark_knight2.avi -ss 00:00:34.98 -t 00:03:00 the_dark_knight2.avi

    Aquí cambiamos el nombre del archivo de salida

    ffmpeg -i the_dark_knight2.avi -ss 00:00:34.98 -t 00:03:00 the_dark_knight2_salida.avi

    Te debe funcionar bien, lo acabo de probar con un archivo AVI y me funcionó.

    Suerte!!

  12. No me entendiste compañero… lo que pasa es ke mi archivo avi tiene DOS AUDIOS… uno es INGLES y otro en ESPAÑOL… es por eso que en el OUTPUT, no sabía a cual dirigirse, y me mandaba error… la sintaxis de los segundos está bien…

    Tu archivo AVI funciono bien porq solamente tenía un audio… Por eso te dije, checa en INPUT y OUTPUT…

    Pero ya lo solucioné, jejeje…

    Tuve que leerme casi TODA la documentacion de FFMPEG… no manches, cuando Dios iba a editar sus videos, seguramente programó/invento FFMPEG…

    Tengo mi problema solucionado un 25%… porq… aregandole un “-ac 1″ he logrado que grabe un canal de audio… solo que es el de español….

    Y otra cosa, lo poco que he grabado, reduce muchisimo su calidad…

    A que se debe esto?…

    De ante mano, gracias!

  13. Omar,
    Qué bueno que lo solucionaste. Respecto a la calidad puedes intentarlo agregando el parámetro: “-sameq” que indica se use la misma calidad que el archivo de entrada.

  14. Muchas gracias por tu aporte compañero…

    Ciertamente me ayudo mucho, aunq aun no he grabado mi video como deseo…

    Maldito subtitulo…

    No soy quien para hacer menos el español castellano, pero pz no me gusta!!!, que quieres hacer? jejeje

    Cudiate mucho, y gracias!

  15. parce muchas graxx, exactamente todo lo ke buscaba, me parece perfecto que hallan personas como usted que ponen a disposición de todo el mundo sus conocimientos y todo el tiempo que invierten para dar con valores óptimos, los probé, y me funcionaron a las 1000 maravillas…
    cada día amo + a Linux, jejeje+

    d nuevo muchas graxx!!!!!!!

  16. Estimados, quisiera saber(orientenme) si aparte de todo esto (mpg to FLV) que me viene al pelo y lo mismo para el (AVI to flv) se puede poner en la misma linea de comando una marca de agua al video (una imagen o logo transparente).-

    Y si se puede programar un batch para procesar varios videos a la vez..

    saludos y gracias…

  17. Lucas:

    Este es el comando para lo que necesitas, solo que te indico requieres tener instalado vhook:


    ffmpeg -i video.mpg -vhook '/usr/lib/vhook/watermark.so -f watermark.png' -y archivosalida.mpg

    En donde watermark.png es el archivo que contiene la marca de agua.
    Es importante que watermark.png sea de las mismas medidas que tu video, con fondo transparente y ubicando tu logo -por ejemplo- en la esquina inferior derecha, de lo contrario la imagen se sobrepondrá ocupando las dimensiones totales del video.

    Suerte.

  18. Hola, estoy trabajando con FFmpeg y con FFserver.

    Actualmente quiero transmitir un video cuya fuente es un MOV, y quiero que el formato de salida sea M4V (formato para iPhone) y no logro hacerlo.

    Tengo que configurar algo en el ffserver.conf pero no sé qué ponerle,

    También cuando mi archivo de salida será un mpg, sale el archivo mpg con muy baja calidad y sin audio, me podríás ayudar porfa??

    El comando que uso es este:

    ffmpeg -i entrada.mov http://localhost:8090/feed1.ffm

    Y mi ffserver.conf actual es este.

    #———————————————-
    Port 8090
    # bind to all IPs aliased or not
    BindAddress 0.0.0.0
    # max number of simultaneous clients
    MaxClients 1000
    # max bandwidth per-client (kb/s)
    MaxBandwidth 1000000
    # Suppress that if you want to launch ffserver as a daemon.
    NoDaemon

    File /tmp/feed1.ffm
    FileMaxSize 500M

    Feed feed1.ffm
    Format flv
    VideoCodec flv
    VideoFrameRate 50
    VideoBufferSize 80000
    VideoBitRate 200
    VideoQMin 1
    VideoQMax 5
    VideoSize 320×240
    PreRoll 5

    Feed feed1.ffm
    Format mpeg1video
    AudioBitRate 32
    AudioChannels 1
    AudioSampleRate 44100
    VideoBitRate 200
    VideoBufferSize 40
    VideoFrameRate 50
    VideoSize 400×304
    VideoIntraOnly
    VideoGopSize 12
    # More MPEG-4 parameters
    VideoHighQuality
    # Choose your codecs:
    AudioCodec mp2
    VideoCodec mpeg1video

    Format status

    #———————————————-

  19. Hola victor me ha servido mucho tu post pero no he podido instalar el vhook, por favor ayuda =(

  20. Andrés,

    Hace tiempo encontré la manera de compilar FFMPEG con vhook, pero la verdad ya se me olvidó. Discúlpame, si encuentro la información, te la haré llegar a tu correo.

  21. okis gracias

  22. que es eso que escribistes hai arriba

  23. disculpa de casualidad sabes como agregar subtitulos jeje ^^

  24. Hola a todos, en este momento, estoy trabajando con esta excelente librería (FFmpeg) los ejemplos en esta página me han servido mucho, he realizado un pequeño editor de vídeo (http://picasaweb.google.com/lh.....directlink) en el cual el usuario realiza una serie de cortes.

    Esto se ha realizado, debido a que se ha hecho una aplicación que ayudado con otro excelente recurso como es RED5 se hace la grabación de vídeos, pero hay momentos en que se el usuario se equivoca y se necesita tan sólo quitar algunas partes de ls vídeos realizados.

    Mi problema es el siguiente:

    A través de una aplicación en Flash envio los cortes que deseo realizar, como son el punto inicial y final, y guardo los vídeos de forma sucesiva: video_1, video_2

    El video de origen en FLV, he leído que hasta el momento para realizar la acción de “combinación” de vídeos sólo es posible con MPEG, entonces hago lo siguiente:

    Creo las partes de los videos:

    ffmpeg -i video_a_partir.flv -ss 00 -t 10 video_1.mpeg
    ffmpeg -i video_a_partir.flv -ss 80 -t 100 video_2.mpeg

    Y así sucesivamente con los cortes que se requieran, luego los combino, leyendo encontré que para windows que es mi caso, se usa el comando copy

    copy video_1.mpeg /b + video_2.mpeg /b video_unido.mpeg

    Lo cual se hace correctamente, pero como el visor a mostrar el vídeo esta realizado en Flash, hago la conversión al formato FLV

    ffmpeg -y -i video_unido.mpeg -f flv -vcodec flv -s 320×240 -ar 22050 video_final.flv

    La conversión se hace de forma correcta, pero la duración del vídeo se pierde, por lo cual la reproducción no funciona de forma correcta

    Viendo la información del vídeo

    ffmpeg -i video_final.flv

    Me da como respuesta lo siguiente

    Duration: 00:00:00.00, start: 0.000000, bitrate: 64 kb/s

    No sé si me hace falta algún paramétro, pero lo he intentado de varias formas y me sigue saliendo igual, espero haber sido claro en mi inquietud y agradecería cualquier ayuda que me puedieran prestar.

    Muchas gracias.

    Jorge Rubiano.

  25. Hola a todos, ya he solucionado mi problema, la solución es la herramienta flvtool2, la cual procesa el flv resultante.

    Jorge Rubiano

  26. felicitaciones por el articulo publicado me servio muchisimo, al publicar un video tutorial subido en youtube y insertado en mi http://inkscapevodcast.blogspot.com/ pero me gustaria saber cual seria la linea de commando en ffmepg para poder convertir y subir videos HD1080 a la web. Para crear mis videos tutoriales uso RecordMyDesktop en 30fps, la motivación de mi inquietud tiene como referente el blog http://screencasters.heathenx.org/ para lograr algo parecido debo contar con un servidor propio, para lo cual estoy juntando dinero para llegar a la meta.
    Pero mientras hay que encontrar la forma adecuada de convertir los video para poder ser publicados en HD1080, aunque Youtube la acepta HD1080.

    gracias por la ayuda prestada de antemano.

  27. Hola, acabo de encontrar un programa muy útil para Ubuntu que se llama WinFF. Es una GUI para ffmpeg y está en el centro de software Ubuntu.
    Saludos!!

  28. Franco, He seguido tu consejo y desdcargué WinFF en mi Ubuntu. Es una maravilla esta GUI, pues sin mover ni configurarle absolutamente nada, realizé una conversión de un video [MOV de 720x480, H.264/AVC, 30FPS 3:41] a formato FLV y lo realizó sin un solo problema.
    Gracias por tu recomendación

  29. Muchas gracias, por fin me quedó un FLV liviano y de buena calidad a la vez. Saludos desde Santiago de Chile.

  30. Hola estuve buscando por la web y no encontré un buen tutorial para instalar ffmepg, quisiera sabes si es posible y de serlo como lo ago?? .. me encantaria convertir mis videos con ffmepg y una preguntita es rapido convirtiendo? disculpen la ignorancia jaja de antemano gracias xD y si pudieran ayudarme seria genial :D

  31. me olvide de aclarar tengo windows xp…

  32. Tengo una pelicula que tiene el audio en AC3 y quiero pasarlo a MP3, pero solo el audio, sin tocar el video. ¿Se puede?
    Salu2,

Trackbacks/Pingbacks

  1. Crear miniaturas de video con FFMPEG

Escribe un Comentario

Puedes editar tus comentarios después de enviarlos.