2010-10-12 15 views
6

Estoy tratando de usar este script para crear una miniatura de un video usando ffmpeg. Al principio usé phpinfo(); y encontré que ffmpeg está instalado en mi servidor.ffmpeg-php para crear una miniatura del video

Entonces copié ffmpeg-php en mi servidor y ejecute el archivo de prueba

llegué a saber que muchas funciones están trabajando en mi servidor

llegué salida como esta

salida: -

Functions available in /usr/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so extension: 

Methods available in class ffmpeg_movie: 
__construct 
getduration 
getframecount 
getframerate 
getfilename 
getcomment 
gettitle 
getauthor 
getartist 
getcopyright 
getalbum 
getgenre 
getyear 
gettracknumber 
getframewidth 
getframeheight 
getframenumber 
getpixelformat 
getbitrate 
hasaudio 
hasvideo 
getnextkeyframe 
getframe 
getvideocodec 
getaudiocodec 
getvideostreamid 
getaudiostreamid 
getaudiochannels 
getaudiosamplerate 
getaudiobitrate 
getvideobitrate 
getpixelaspectratio 
getpixelaspectratio 
getvideobitrate 
getaudiobitrate 
getaudiosamplerate 
getaudiochannels 
getaudiostreamid 
getvideostreamid 
getaudiocodec 
getvideocodec 
getframe 
getnextkeyframe 
hasvideo 
hasaudio 
getbitrate 
getpixelformat 
getframenumber 
getframeheight 
getframewidth 
gettracknumber 
getyear 
getgenre 
getalbum 
getcopyright 
getartist 
getauthor 
gettitle 
getcomment 
getfilename 
getframerate 
getframecount 
getduration 
__construct 

que escribió el código y trie d cualquier camino posible asignar $ffmpeg;

<?php 

    $thumb_stdout; 
    $retval=0; 
    $ffmpeg = '/home/lib/ffmpeg'; 

// change "demo.mpg" to your mpg file name! 
$video = dirname(__FILE__) . 'demo.mpg'; 

// change "demo.jpg" to whichever name you like or don't 
// for this example, the name of the output jpg file does not matter 
$image = dirname(__FILE__) . 'demo.jpg'; 

$second = 1; 

$cmd = "$ffmpeg -i $video 2>&1"; 
if (preg_match('/Duration: ((\d+):(\d+):(\d+))/s', '$cmd', $time)) { 
    $total = ($time[2] * 3600) + ($time[3] * 60) + $time[4]; 
    $second = rand(1, ($total - 1)); 
} 

//$cmd = "$ffmpeg -i $video -deinterlace -an -ss $second -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg $image 2>&1"; 
$cmd = "$ffmpeg -i $video -r 1 -ss 00:00:05 -t 00:00:01 -s 250x250 -f image2 $image"; 
echo $cmd; 
exec($cmd); 
//$return = '$cmd'; 

echo '<br>done!'; 
?> 
+2

Bueno ... ¿cuál es el problema? – deceze

+0

El problema es que el script no funciona. – Wazzzy

+2

A continuación, proporcione más información, hermano. Cualquier mensaje de error? ¿Funciona el comando desde la línea de comando? – deceze

Respuesta

7

Por fin tengo los códigos gracias a Anubhaw .Su enlace ayudó lot.Try este código.

  //thumb path should be added in the below code 
      //test for thumb 
      $dir_img='uploads/'; 
      $mediapath='123.jpg'; 
      $file_thumb=create_movie_thumb($dir_img.$mediapath,$mediapath,$mediaid); 

      $name_file=explode(".",$mediapath); 
      $imgname="thumb_".$name_file[0].".jpg";  

      /* 
       Function to create video thumbnail using ffmpeg 
      */ 
      function create_movie_thumb($src_file,$mediapath,$mediaid) 
      { 
       global $CONFIG, $ERROR; 

       $CONFIG['ffmpeg_path'] = '/usr/local/bin/'; // Change the path according to your server. 
       $dir_img='uploads/'; 
       $CONFIG['fullpath'] = $dir_img."thumbs/"; 

       $src_file = $src_file; 
       $name_file=explode(".",$mediapath); 
       $imgname="thumb_".$name_file[0].".jpg"; 
       $dest_file = $CONFIG['fullpath'].$imgname; 

       if (preg_match("#[A-Z]:|\\\\#Ai", __FILE__)) { 
        // get the basedir, remove '/include' 
        $cur_dir = substr(dirname(__FILE__), 0, -8); 
        $src_file = '"' . $cur_dir . '\\' . strtr($src_file, '/', '\\') . '"'; 
        $ff_dest_file = '"' . $cur_dir . '\\' . strtr($dest_file, '/', '\\') . '"'; 
       } else { 
        $src_file = escapeshellarg($src_file); 
        $ff_dest_file = escapeshellarg($dest_file); 
       } 

       $output = array(); 

       if (eregi("win",$_ENV['OS'])) { 
        // Command to create video thumb 
        $cmd = "\"".str_replace("\\","/", $CONFIG['ffmpeg_path'])."ffmpeg\" -i ".str_replace("\\","/" ,$src_file)." -an -ss 00:00:05 -r 1 -vframes 1 -y ".str_replace("\\","/" ,$ff_dest_file); 
        exec ("\"$cmd\"", $output, $retval); 

       } else { 
        // Command to create video thumb 
        $cmd = "{$CONFIG['ffmpeg_path']}ffmpeg -i $src_file -an -ss 00:00:05 -r 1 -vframes 1 -y $ff_dest_file"; 
        exec ($cmd, $output, $retval); 

       } 


       if ($retval) { 
        $ERROR = "Error executing FFmpeg - Return value: $retval"; 
        if ($CONFIG['debug_mode']) { 
         // Re-execute the command with the backtick operator in order to get all outputs 
         // will not work if safe mode is enabled 
         $output = `$cmd 2>&1`; 
         $ERROR .= "<br /><br /><div align=\"left\">Cmd line : <br /><span style=\"font-size:120%\">" . nl2br(htmlspecialchars($cmd)) . "</span></div>"; 
         $ERROR .= "<br /><br /><div align=\"left\">The ffmpeg program said:<br /><span style=\"font-size:120%\">"; 
         $ERROR .= nl2br(htmlspecialchars($output)); 
         $ERROR .= "</span></div>"; 
        } 
        @unlink($dest_file); 
        return false; 
       } 

       $return = $dest_file; 
       //@chmod($return, octdec($CONFIG['default_file_mode'])); //silence the output in case chmod is disabled 
       return $return; 
      } 

Disfrute de Codificación

en lo que respecta,

Wasim

+0

Ayuda ... Prueba esto ... – Wazzzy

+0

¿podrías mirar mi pregunta, por favor, http: // stackoverflow.com/questions/27189948/ffmpeg-is-not-creating-screenshot-from-video – Hitesh

5

daba el código, hecho que sea más simple y ejecutable, tal vez esto ayude a algunos de ustedes.

class VideoTile 
{ 
    public static function createMovieThumb($srcFile, $destFile = "test.jpg") 
    { 
     // Change the path according to your server. 
     $ffmpeg_path = 'D:\\ffmpeg\\bin\\'; 

     $output = array(); 

     $cmd = sprintf('%sffmpeg -i %s -an -ss 00:00:05 -r 1 -vframes 1 -y %s', 
      $ffmpeg_path, $srcFile, $destFile); 

     if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) 
      $cmd = str_replace('/', DIRECTORY_SEPARATOR, $cmd); 
     else 
      $cmd = str_replace('\\', DIRECTORY_SEPARATOR, $cmd); 

     exec($cmd, $output, $retval); 

     if ($retval) 
      return false; 

     return $destFile; 
    } 
} 

uso es

$file = VideoTile::createMovieThumb("../video3.mp4"); 
Cuestiones relacionadas