昨天收到一“挨踢”兄的邮件,估计是看到我以前上CSDN咨询过同样的一样问题“FFMPEG在windows2003下不生效”(http://topic.csdn.net/u/20080902/16/fab6e4f3-92b3-4d4b-9286-71259f770a50.html)当时这个问题折腾我整整一个通宵(项目紧急被逼的)才搞定,估计这位仁兄也是备受煎熬,否则不会这么“执着”的发邮件来问我了,呵呵。看到这位同命的“挨踢”人,我也是找遍了所有文档,终于在我的笔记中看到了,你够幸运!!!为了过去的,现在的,将来的,我把我当时的处理方法贴上来,希望对有需要的朋友有用,喔喔~~使用php_ffmpeg.dll方式生成视频截图代码(在window2003下不好使!!!!)
首先安装php_ffmpeg,安装方法如下: 
1.copy php_ffmpeg.dll到PHP扩展目录 
2.copy avcodec-51.dll、avformat-51.dll等到system32目录 
3.安装gd2 
3.配置php.ini,extension=php_ffmpeg.dll; 
成功安装使用phpinfo可以看到如下显示: 
ffmpeg support (ffmpeg-php) enabled 
ffmpeg-php version  0.5.2.1  
libavcodec version  Lavc51.43.0  
libavformat version  Lavf51.12.2  
ffmpeg-php gd support  enabled  使用方法:
下面的代码我就不整理了,大家看看就明白了(前面是路径,文件名等的规则而已,后面几行就是真正的干活部分)function generateThumb($path){
    try {
        $yearMonth = date('Ym');
        $VIDEO_IMAGE_BASEW_PATH = dirname(__FILE__).DIRECTORY_SEPARATOR."uploadimg".DIRECTORY_SEPARATOR."video";
        $video_image_path = $VIDEO_IMAGE_BASEW_PATH.DIRECTORY_SEPARATOR.$yearMonth.DIRECTORY_SEPARATOR;
        
        if(!file_exists($video_image_path)){
           mkdir($video_image_path, 0777);  
        }
        $imageName = 'pocle_'.date("YmdGis").'_'.rand(1000,9999).".jpg";
        $imagePath = 'system/uploadimg/video/'.$yearMonth."/".$imageName;
        
        $frame = 1;
        $mov = new ffmpeg_movie($path);
        
        $img = sprintf("%s/".$imageName, $video_image_path, $frame);
        $ff_frame = $mov->getFrame($frame);
        if ($ff_frame) {
            $gd_image = $ff_frame->toGDImage();
            if ($gd_image) {
                imagejpeg($gd_image, $img);
                imagedestroy($gd_image);
            }
        }
        return $imagePath;
    }catch(Exception $e){
        return "";
    }
}
使用ffmpeg.exe方式生成视频截图代码(在window2003和windowXP下都好使,我当时就是这样处理的)
注意:在2003下由于存在权限问题,不能直接在php中使用exec调用ffmpeg命令,必须使用COM$phpwsh=new COM("Wscript.Shell") or die("Create Wscript.Shell Failed!"); 
$exec=$phpwsh->exec("cmd.exe /c ffmpeg.exe -i D:/FFmpeg/test.flv -f image2 -ss 5 -s 120*90 -vframes 1 D:/FFmpeg/test.jpg"); 另外附上ffmpeg.exe参数说明:
ffmpeg -i "e:\test.flv" -f image2 -ss 5 -s 120*90 -vframes 1 "e:\test.jpg"
ffmpeg            // 命令
-i "f:\test.flv"  // 输入文件
-f image2 -ss 6 -s 120*90 -vframes 1 
// 可选参数: -f表示输出文件格式、
//           -ss表示相对于文件开始处的时间偏移值, 即从6秒出开始截图
//           -s表示截图的的大小
//           -vframes表示截图的桢数
"f:\test.jpg"     // 输出文件
 上面的意思就是,从test.flv中的第5秒开始截1帧大小为120*90保存成名为test.jpg的图片至于ffmpeg.exe文件我不知道如何传附件,有需要的可以到网上下载或邮件给我([email protected])希望对大家帮助!!!!!

解决方案 »

  1.   

    $phpwsh=new COM("Wscript.Shell") or die("Create Wscript.Shell Failed!"); 是自带的吗?
      

  2.   

    Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `WScript.Shell': 无效的语法 ' in D:\wwwroot\h\web\home\convert\tmp4.php:46 Stack trace: #0 D:\wwwroot\h\web\home\convert\tmp4.php(46): com->com('WScript.Shell') #1 {main} thrown in D:\wwwroot\h\web\home\convert\tmp4.php on line 46
    --------------------------------------------
    弟46行代码为 : $shell = new COM("WScript.Shell") or die("Create Wscript.Shell Failed!");
      

  3.   

    搞成功了,使用php_ffmpeg.dll,贴出来看看:http://www.beijibear.com/index.php?aid=194
      

  4.   

    搞成功了,使用php_ffmpeg.dll,贴出来看看:http://www.beijibear.com/index.php?aid=194