¿Quieres registrarte?

Convertir videos de cualquier formato a FLV con ffmpeg y PHP

Por: azhton
7 de Noviembre del 2008
54 de clabLevel
Otros artículos de azhton
13,537 visitas

En este tip mostraré cómo subir a un servidor un archivo de vídeo de cualquier formato y codificarlo automáticamente en formato FLV.

Pare realizar este proceso tendremos los siguiente requerimientos:



Una vez cumplamos con ellos, iniciaremos los siguientes procesos:

Instalar php_ffmpeg


Ya descargado el php_ffmpeg, lo descomprimes y copias el archivo php_ffmpeg.dll en php/ext

Añades esta lineas en el php.ini: "extensión = php_ffmpeg.dll"
Luego copias los archivos avcodec.dll y avformat.dll en windows/system32

Nota :

En linux, el proceso es muy similar. Sólo reemplaza los archivos y rutas por sus equivalentes


Instalar ffmpeg


Es simple. Ya descargado, coges el ffmpeg.exe y lo copias en windows/system32. Para ver si te funcionó, dirígete a Inicio -> Ejecutar luego escribes ffmpeg.exe y enter. Si corre es por que ya esta muy bien. Ya puedes convertir tus vídeos a .FLV o a cualquier formato.

Convertir los videos mediante PHP


Como ya tienes instalado todo lo necesario ahora esto es muy fácil tan solo llamando al ffmpeg con la función exec(),
los las conversiones se guardan en la misma carpeta donde esta el archivo.php

De .xxx formato a .FLV


Código :

<form id="form2" name="form1" enctype="multipart/form-data" method="post" action="">
      <span id="sprytextfield3">
      Nombre del  el mp3<br />
        <input name="arts" type="text" id="arts" />  
      <span class="textfieldRequiredMsg"></span></span>
              <br />
              Seleciona el video que quieres transformar a mp3<br />
        <input type="file" name="video" id="video" />
 <br />
        <br />
        <input type="submit" name="button" id="button" value="Convertir" />
      </label>
    </form>
      <?
      if(isset($_FILES[video])){
//$pumit  = rand(1,50);md5($pumit);
$to = $_POST["arts"];
$video = $_FILES['video']['tmp_name']. $_FILES['archivito']['name'] ;
$imagenes=(exec("ffmpeg -i ".$video."  ".$to.".flv  2>&1",$output));
echo $imagenes."<br>";

foreach($output as $item){
   echo $item;
}} else {echo "Selecciona tu video";}
?>


Extraer audio de un video


Código :

<form id="form2" name="form1" enctype="multipart/form-data" method="post" action="">
      <span id="sprytextfield3">
      Nombre del  el mp3<br />
        <input name="arts" type="text" id="arts" />  
      <span class="textfieldRequiredMsg"></span></span>
              <br />
              Seleciona el video que quieres transformar a mp3<br />
        <input type="file" name="video" id="video" />
 <br />
        <br />
        <input type="submit" name="button" id="button" value="Convertir" />
      </label>
    </form>
      <?
      if(isset($_FILES[video])){
//$pumit  = rand(1,50);md5($pumit);
$to = $_POST["arts"];
$video = $_FILES['video']['tmp_name']. $_FILES['archivito']['name'] ;
$imagenes=(exec("ffmpeg -i ".$video."  -ar 44100 -ac 2 -ab 192 -f mp3 ".$to.".mp3  2>&1",$output));
echo $imagenes."<br>";

foreach($output as $item){
   echo $item;
}} else {echo "Selecciona tu video";}
?>


Extraer una imagen de un video


Código :

<form id="form" name="form1" enctype="multipart/form-data" method="post" action="">
      <label> Del segundo<br />
        <input name="ds" type="text" id="ds" value="00:00:10 " />
        <br />
        <br />
        Al segundo<br />
        <input name="fs" type="text" id="textfield4" value="00:00:10 " />
        <br />
        <br />
        Seleciona el video que quieres transformar a mp3<br />
        <input type="file" name="videos" id="videos" />
      </label>
      <label> <br />
        <br />
        <input type="submit" name="buttons" id="buttons" value="Convertir" />
      </label>
    </form>
      <?
     if(isset($_FILES["videos"])){

 $pumit  = rand(1,5);
$to = md5($pumit);
$video = $_FILES['videos']['tmp_name']. $_FILES['archivitoz']['name'] ;
$imagenes=(exec("ffmpeg -i ".$video."  -t ".$_POST['ds']." -ss ".$_POST['ds']." -vframes 1 ".$to."%d.jpg  2>&1",$output));
echo $imagenes."<br>";

foreach($output as $item){
   echo $item;}
 } else 
 {
   echo "Selecciona tu video";
   }
?>


Más cosas que puede hacer con ffmpeg


Obtener información de un vídeo

Código :

ffmpeg -i video.avi


Combinar una serie de imágenes en un vídeo

Código :

ffmpeg -f image2 -i imagen%d.jpg video.mpg

Con este comando convertiríamos todas las imágenes del directorio actual (con nombres imagen1.jpg, imagen2.jpg, etc) en un video llamado video.mpg.

Convertir un vídeo en imágenes

Código :

ffmpeg -i video.mpg imagen%d.jpg

Con este comando se crearan varias imágenes imagen1.jpg, imagen2.jpg, ... Para las imágenes resultantes se pueden usar los formatos PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF o SGI.

Convertir un vídeo para verlo en el iPod/iPhone

Código :

ffmpeg -i entrada.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320×180 -title X salida.mp4



Convertir un vídeo para verlo en la PSP

Código :

ffmpeg -i entrada.avi -b 300 -s 320×240 -vcodec xvid -ab 32 -ar 24000 -acodec aac salida.mp4



Extraer el sonido de un vídeo, y guardarlo como MP3

Código :

ffmpeg -i video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 audio.mp3



Convertir un wav en MP3

Código :

ffmpeg -i audio.wav -ar 44100 audio.mp3


Convertir un avi a mpg

Código :

ffmpeg -i entrada.avi salida.mpg


Convertir un mpg a avi

Código :

ffmpeg -i entrada.mpg salida.avi


Convertir un avi a gif

Código :

ffmpeg -i entrada.avi salida.gif


Añadir el sonido de un archivo de audio a un vídeo

Código :

ffmpeg -i audio.wav -i video_entrada.avi video_salida.mpg


Convertir avi a flv

Código :

ffmpeg -i entrada.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320×240 -f flv salida.flv


Convertir avi a dv

Código :

ffmpeg -i entrada.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 salida.dv

O bien

Código :

ffmpeg -i entrada.avi -target pal-dv salida.dv


Convertir avi a mpeg para reproductores de dvd

Código :

ffmpeg -i entrada.avi -target pal-dvd -ps 2000000000 -aspect 16:9 salida.mpeg



Comprimir avi a divx

Código :

ffmpeg -i entrada.avi -s 320×240 -vcodec msmpeg4v2 salida.avi


Comprimir Ogg Theora a Mpeg dvd

Código :

ffmpeg -i entrada.ogm -s 720×576 -vcodec mpeg2video -acodec mp3 salida.mpg


Comprimir avi a SVCD mpeg2. Para PAL:

Código :

ffmpeg -i entrada.avi -target pal-svcd salida.mpg


Para NTSC:

Código :

ffmpeg -i entrada.avi -target ntsc-svcd salida.mpg


Comprimir avi a VCD mpeg2. Para PAL:

Código :

ffmpeg -i entrada.avi -target pal-vcd salida.mpg


Para NTSC:

Código :

ffmpeg -i entrada.avi -target ntsc-vcd salida.mpg


Codificación con varias pasadas

Código :

ffmpeg -i entrada -pass 2 -passlogfile ffmpeg2pass salida

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas php video flv

Comentarios | Enviar un comentario
Buen tip, muy completo (y) thanks
Por: Zguillez
Un poco enredado y jodido de editar, pero con contenido muy valioso. Un muy buen aporte.
Por: Freddie
Buenísimo y super útil si tenemos un proyecto dónde sacarle partido.

Un saludo
Por: marcosdev
Muy util el Tip :D
Saludos.
Por: UrbaN77
Excelente, gracias por el aporte.
Por: Jimmy Villegas-blog
Esto tambien sirve para Xampp? Se ve muy bueno :)
Por: Brundows
Excelente, este codigo es muy bueno [img]
Por: Juan-blog
Es muy bueno. Pero tengo una pregunta. podria ser usado para unir dos videos en formato FLV a traves de php??

Muchas gracias
Por: panchesco
Hola me parece un tip excelente, pero tengo una duda, el ejemplo es para ejecutarlo localmente, si este proceso lo deseo pasar a un servidor en internet cuales serian los pasos? un saludo
Por: Oscar-blog
Hola amigo gracias por el aporte... la pregunta es la siguiente como puedo averiguar si el ffmpeg esta instalado correctamente en php. fui a phpinfo.php
y no me sale ninguna informacion del ffmpeg.. por fa una ayudita.. hice todos los pasos.. tengo el mismo servidor que es appserver instale bajo windows xp gracias mano
Por: Omarcingo-blog
es muy buena esta utleria, pero tambien me queda la duda de como implementar esto online, ya que si mi cliente tiene contratado un servicio de hosting no podria meterme a modificar la configuracion de php ni instalar nada en el windows del servidor, o si?
Por: Juan Pablo-blog
hola a todos, llevo buscando un tiempo como utilizar esta clase y solo encuentro tutoriales para usarlo en local, pero a mi me interesaría usarlo en un servidor.

como podría hacerlo?


gracias!
Por: hiulit-blog
gracias esta bueno este tutorial

http://www.prevedis.com/foro/index.php
Por: esta bueno -blog
¿Sabes como se podría dividir un video en trozos de 1 minuto?
Por: Jorge-blog
que onda como estan???, tengo una duda, ya instale los programas y si funciona, de hecho en linea de comando cambia el video perfectamente, pero al momento de hacerlo con PHP, me sale un error, no hace nada.

Nombre del el mp3

Seleciona el video que quieres transformar a mp3


&1",$output)); echo $imagenes."
"; foreach($output as $item){ echo $item; }} else {echo "Selecciona tu video";} ?>

lo ultmo es el codigo que tiene error supongo.....
espero me puedan resolver mi duda
Saludos......
Por: demon011
Tengo un problema, segun yo ya tengo todo instalado en el server, al momento de ejecutar o subir el archivo al server me sale el siguiente error...
Could not open '.flv'
FFmpeg version SVN-r19672, Copyright (c) 2000-2009 Fabrice Bellard, et al. configuration: --enable-shared --prefix=/usr libavutil 50. 3. 0 / 50. 3. 0 libavcodec 52.32. 0 / 52.32. 0 libavformat 52.37. 0 / 52.37. 0 libavdevice 52. 2. 0 / 52. 2. 0 libswscale 0. 7. 1 / 0. 7. 1 built on Aug 20 2009 09:45:21, gcc: 4.1.2 20070925 (Red Hat 4.1.2-27)Input #0, avi, from '/tmp/phpu2907A': Duration: 00:00:01.73, start: 0.000000, bitrate: 5132 kb/s Stream #0.0: Video: rawvideo, bgr24, 180x79, 15 tbr, 15 tbn, 15 tbcCould not open '.flv'
alguien me podria ayudar por fas
Por: Hyavary-blog
ya vi cual fue el problema... y pues muchas gracias por esto, me sirvio de mucho...
Por: Hyavary-blog
Hola

Segui las instrucciones de instalacion y copie el primer ejemplo, no he logrado que funcione.

Alguien me podria ayudar por favor.
Por: ViriPA
Consulta, El codigo para iphone convierte desde avi, pero y en el caso de cualquier formato para pasarlo al iphone?

Gracias

ffmpeg -i entrada.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320×180 -title X salida.mp4
Por: Albert-blog
bien tio me has salvado de una buena ... quiero probar el ClipBucket
Por: Alan-blog
Hola excelente tutorial pero que pasa con las personas que usamos MAC y que tenemos MAMP instalado estos archivos son para PC, cuales serian los archivos para mac?? saludos
Por: MIKE MORALES-blog
q veciones del php funcionan lo e probado con el php 5.3.0 y no funka
Por: yose
Sirve para todas las versiones.
Por: azhton
En PHP 5.3 no furrula los modulos compilados con diferentes APIS!!!!!!!!!!!! AGGGGGGG!!
Por: yo-blog
Interesante...
Por: Web-Master-blog
Estimado,
muy buen aporte, he estado trabajando con FFMPEG y he logrado realizar varios de los ejemplos que acá aparecen...

Tengo una duda...

COMO PUEDO OPTIMIZAR EL PESO DE LOS VÍDEOS CONVERTIDOS?

he intentado con

exec("ffmpeg -i {video-in} -ar 11025 -ab 16 -b 100k -f flv -s 320x240 {video-out}v");

Este queda mucho mas ligero que el original, pero su calidad no es la optima...

Puedes recomendarme alguna configuración para no perder calidad y que me permita bajar el peso del archivo?

Muchas gracias
Por: dimdaos-blog
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.
Por: Jorge Rubiano-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.