Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Conversion de videos MP4 con ffmpeg desde linux suse con php!

Estas en el tema de Conversion de videos MP4 con ffmpeg desde linux suse con php! en el foro de PHP en Foros del Web. Bueno llevo ya varias semanas tratando de resolver un problema que se me presento con ffmpeg , el problema es que al momento de realizar ...
  #1 (permalink)  
Antiguo 10/07/2015, 09:34
 
Fecha de Ingreso: junio-2015
Ubicación: León, Guanajuato
Mensajes: 4
Antigüedad: 8 años, 9 meses
Puntos: 1
Sonrisa Conversion de videos MP4 con ffmpeg desde linux suse con php!

Bueno llevo ya varias semanas tratando de resolver un problema que se me presento con ffmpeg , el problema es que al momento de realizar la conversion de un video de cualquier formato a MP4,OGG y WEBM, el MP4 no se visualiza en ningun navegador , y pues es necesario ya que IE solo acepta videos en formato MP4. Al principio ffmpeg creaba archivos vacios , ahora si tienen contenido, ya que se pueden visualizar con cualquier reproductor de videos. El servidor desde el cual se realiza la conversion esta en Linux SUSE, pero el sistema estaen windows 7, no se si exista algun problema al momento de traer los archivos desde el servidor para mostrarlos por medio de codigo PHP y HTML.

Código en php que ejecuta ffmpeg para la conversión de vídeos a los formatos OGG, WEBM y MP4 y realiza la inserción de las rutas a una tabla de una base de datos en oracle.

Código PHP:
/*esta funcion realiza la conversion  de los videos a los 3 formatos (OGG,WEBM,MP4) recibiendo como parametro la ruta origen y la ruta final
y el formato al que se debe convertit*/
function convertirVideo($rutaConvertir,$rutaFinal,$formato){    
    echo 
shell_exec("ffmpeg -y -i $rutaConvertir -s 720x480 $rutaFinal{$formato} >/dev/null 2>/dev/null &");    
        return 
$bandera=true;
}
/*Esta funcion inserta la ruta final de un video ya convertido dependiendo del tipo de video*/
function insertar($idNuevo,$rutaConvertirSinPuntos,$columna,$ruta,$newIdArchivo){
    if(
$columna==" "){
    
$query_sql "insert into FO04(FO04_ID,FO04_RUTACONVERTIR,FO04_ID_ARCHIVO)VALUES($idNuevo,'$rutaConvertirSinPuntos',$newIdArchivo)";
     }
    else{
    
$query_sql "insert into FO04(FO04_ID,FO04_RUTACONVERTIR,$columna,FO04_ID_ARCHIVO)VALUES($idNuevo,'$rutaConvertirSinPuntos','$ruta',$newIdArchivo)";        
    }
    echo 
$query_sql;
    
query_bd($query_sql);        
}
/*Arreglos que contienen los formatos en los que se convertira el video*/
$formatos= Array (".ogg",".webm",".mp4");
$formatosConvertirMP4= Array (".ogg",".webm");
$formatosConvertirOGG= Array (".webm",".mp4");
$formatosConvertirWEBM= Array (".ogg",".mp4");
//compara si el video es admitido o no    
if (in_array($extension$extensionesVIDEOS))
{   
/*COMIENZAN LAS COMPARACIONES DE VIDEOS*/        
    
if ($tipoVideo != "mp4" && $tipoVideo != "ogg" && $tipoVideo != "webm"
    {  if (
move_uploaded_file($_FILES["archivo"]["tmp_name"], $rutaConvertir))
        {   
$rutaConvertirSinPuntos substr("$rutaConvertir"3);
            
insertar($idNuevo,$rutaConvertirSinPuntos," "," ",$newIdArchivo);
            
ocicommit($conexion);
            echo 
"El archivo " $nombreCompleto " se ha subido.";
            
$rutaFinal "../subidas/$nombre";//esta es la ruta final en el servidor
            
$rutaFinal22 "subidas/$nombre";//esta es la ruta final en el servidor          
            
$columnasParaTODOS=Array("FO04_RUTASERVIDOR_OGG","FO04_RUTASERVIDOR_WEBM","FO04_RUTASERVIDOR_MP4");
            for(
$i 0$i count($formatos); ++$i){
                
$bandera=convertirVideo($rutaConvertir,$rutaFinal,$formatos[$i]);                
                if(
$bandera==true){
                    
$rt substr("$rutaFinal{$formatos[$i]}"3);
                    
updateRuta($columnasParaTODOS[$i],$rt,$idNuevo);
                    
ocicommit($conexion);}
                else 
                {
                echo 
"Error al convertir el video";
                }
            }
        } 
        else{echo 
"Ocurrió un error al subir el video!!.";}
    } 
    else 
    {
    if (
$tipoVideo == "mp4")
        {   
            if (
move_uploaded_file($_FILES["archivo"]["tmp_name"], $target_file))
            {
                
$rutaFinalServidorSinPuntos substr("$target_file"3);
                
insertar($idNuevo,$rutaFinalServidorSinPuntos,"FO04_RUTASERVIDOR_MP4",$rutaFinalServidorSinPuntos,$newIdArchivo);
                
ocicommit($conexion);

                echo 
"El archivo " $nombreCompleto " se ha subido.";
                
$rutaFinal2 "../subidas/$nombre";//esta es la ruta final en el servidor
                
$columnasParaMP4=Array("FO04_RUTASERVIDOR_OGG","FO04_RUTASERVIDOR_WEBM");

                for(
$i 0$i count($formatosConvertirMP4); ++$i)
                {
                    
$bandera=convertirVideo($target_file,$rutaFinal2,$formatosConvertirMP4[$i]);
                    if(
$bandera==true)
                    {
                        
$rt2 substr("$rutaFinal2{$formatosConvertirMP4[$i]}"3);
                        
updateRuta($columnasParaMP4[$i],$rt2$idNuevo);
                        
ocicommit($conexion);
                    }
                    else
                    {
                        echo 
"Error al convertir el video";
                    }
                }
            } 
            else 
            {
                echo 
"Ocurrió un error al subir el video!!.";
            }
        } 
        else
        {
        if (
$tipoVideo == "ogg" || $tipoVideo == "webm")
        {
            if (
$tipoVideo == "ogg")
            {
                if (
move_uploaded_file($_FILES["archivo"]["tmp_name"], $target_file))
                {
                    
$rutaFinalServidorSinPuntos2 substr("$target_file"3);
                    
insertar($idNuevo,$rutaFinalServidorSinPuntos2,"FO04_RUTASERVIDOR_OGG",$rutaFinalServidorSinPuntos2,$newIdArchivo);
                    
ocicommit($conexion);

                    echo 
"El archivo " $nombreCompleto " se ha subido.";

                    
$rutaFinal3 "../subidas/$nombre";//esta es la ruta final en el servidor
                    
$columnasParaOGG=Array("FO04_RUTASERVIDOR_WEBM","FO04_RUTASERVIDOR_MP4");
                    
                    for(
$i 0$i count($formatosConvertirOGG); ++$i)
                    {
                        
$bandera=convertirVideo($target_file,$rutaFinal3,$formatosConvertirOGG[$i]);
                        if(
$bandera==true)
                        {
                            
$rt3 substr("$rutaFinal3{$formatosConvertirOGG[$i]}"3);
                            
updateRuta($columnasParaOGG[$i],$rt3$idNuevo);
                            
ocicommit($conexion);
                        }
                        else
                        {
                            echo 
"Error al convertir el video";
                        }
                    }
                }
                else
                {
                    echo 
"Error al convertir el video";
                }
            }
            else
            {
               if (
$tipoVideo == "webm")
                {
                    if (
move_uploaded_file($_FILES["archivo"]["tmp_name"], $target_file))
                    {
                        
$rutaFinalServidorSinPuntos3 substr("$target_file"3);
                        
insertar($idNuevo,$rutaFinalServidorSinPuntos3,"FO04_RUTASERVIDOR_WEBM",$rutaFinalServidorSinPuntos3,$newIdArchivo);
                        
ocicommit($conexion);

                        echo 
"El archivo " $nombreCompleto " se ha subido.";
                        
$rutaFinal4 "../subidas/$nombre";//esta es la ruta final en el servidor
                        
$columnasParaWEBM=Array("FO04_RUTASERVIDOR_OGG","FO04_RUTASERVIDOR_MP4");

                        for(
$i 0$i count($formatosConvertirWEBM); ++$i)
                        {
                            
$bandera=convertirVideo($target_file,$rutaFinal4,$formatosConvertirWEBM[$i]);
                            if(
$bandera==true)
                            {
                                
$rt4 substr("$rutaFinal4{$formatosConvertirWEBM[$i]}"3);
                                
updateRuta($columnasParaWEBM[$i],$rt4$idNuevo);
                                
ocicommit($conexion);
                            }
                            else
                            {
                                echo 
"Error al convertir el video";
                            }
                        }
                    } 
                    else 
                    {
                        echo 
"Ocurrió un error al subir el video!!.";
                    }    
                }                                 
            }
            }
        }
    }
}
?> 
Parte del código en PHP que extrae las rutas de los videos de una tabla de BD y los muestra a través de la etiqueta vídeo de html.

Código PHP:
if ($TIPO_EXTENSION == "video") {
                
$query_sql2 " SELECT FO04_RUTASERVIDOR_MP4, FO04_RUTASERVIDOR_OGG, FO04_RUTASERVIDOR_WEBM FROM FO04 WHERE FO04_ID_ARCHIVO = $ID_ARCHIVO";
                
$resultado2 query_bd($query_sql2);
                if (
$resultado2) {
                    while ((
$row2 oci_fetch_array($resultado2OCI_ASSOC)) != false) {
                        
$RUTA_VIDEO $row2["FO04_RUTASERVIDOR_MP4"];
                        
$RUTA_OGG $row2["FO04_RUTASERVIDOR_OGG"];
                        
$RUTA_WEBM $row2["FO04_RUTASERVIDOR_WEBM"];
                        echo 
"<center><video id='imgTemaDesplegado' controls>";
                        if(
$RUTA_VIDEO!=null){
                            echo 
"<source src='$RUTA_VIDEO' type=\"video/mp4\">";
                        }
                        if(
$RUTA_OGG!=null){
                            echo 
"<source src='$RUTA_OGG' type=\"video/ogg\">";
                        }
                        if(
$RUTA_WEBM!=null){
                            echo 
"<source src='$RUTA_WEBM' type=\"video/webm\">";
                        }
                        echo 
"Your browser does not support the video tag.</video></center>";
                    }
                }
            } 
Para terminar debo mencionar que con los formatos OGG y WEBM no existen problemas de visualizacion solo es con el MP4.

De antemano gracias y espero que puedan ayudarme resolviendo las dudas que tengo y o proporcionando informacion que sea de mi ayuda
  #2 (permalink)  
Antiguo 10/07/2015, 13:00
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Conversion de videos MP4 con ffmpeg desde linux suse con php!

El comando que uso para MP4 y me ha funcionado es:

Código:
ffmpeg -y -i {input} -s {scale} -qscale 15 -strict experimental -acodec aac -ab 96k -ac 2 -ar 22050 -vcodec libx264 -level 30 -r 24 -g 48 -b 384k -threads 64 {output}.mp4
Reemplaza:
{input} Ruta y nombre del archivo original
{scale} AnchoxAlto, ejemplo: 720x480
{output} Ruta y nombre de archivo final

Por supuesto, todos los parámetros dependen de tu versión de ffmpeg y sus respectivos códecs.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 14/07/2015, 08:41
 
Fecha de Ingreso: junio-2015
Ubicación: León, Guanajuato
Mensajes: 4
Antigüedad: 8 años, 9 meses
Puntos: 1
Respuesta: Conversion de videos MP4 con ffmpeg desde linux suse con php!

Ya probe el comando, y obtuve como resultado el siguiente mensaje:

Código:
Please use -q:a or -q:v, -qscale is ambiguous
Please use -b:a or -b:v, -b is ambiguous
Unknown encoder 'libx264'
Segun he leido la libreria libx264 es necesaria para operar con videos formato MP4, sabes donde podria conseguir esta libreria?.
  #4 (permalink)  
Antiguo 14/07/2015, 23:37
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Conversion de videos MP4 con ffmpeg desde linux suse con php!

Encontré esta guía: https://www.vimp.com/en/web/faq/item...suse-sles.html

Recuerdo también haber tenido algún problema con ciertas librerías y había que reemplazarlas con otras; lógicamente, también cambia el comando de conversión.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 16/07/2015, 08:15
 
Fecha de Ingreso: junio-2015
Ubicación: León, Guanajuato
Mensajes: 4
Antigüedad: 8 años, 9 meses
Puntos: 1
Respuesta: Conversion de videos MP4 con ffmpeg desde linux suse con php!

voy a instalar la librería para ver si es ese el problema, lo mas seguro es que si.
Muchas gracias por la guía!
  #6 (permalink)  
Antiguo 31/07/2015, 10:51
 
Fecha de Ingreso: junio-2015
Ubicación: León, Guanajuato
Mensajes: 4
Antigüedad: 8 años, 9 meses
Puntos: 1
Respuesta: Conversion de videos MP4 con ffmpeg desde linux suse con php!

Ya eh resuelto el problema, y efectivamente era el codec libx264, muchas gracias por responder.

Etiquetas: ffmpeg, linux, mp4, suse, video
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:32.