无法在php上使用ffmpeg生成缩略图

时间:2015-03-18 18:38:47

标签: php ffmpeg phpvibe

我在247host上托管我的phpvibe网站,当我上传一切正常,除了两件事。当我上传视频时,缩略图不会生成,并且不会生成视频的总时间。当我联系他们的客户支持时,他们会向我发送终端的屏幕截图,其中生成了执行命令和缩略图的根。但是当我在vibecron.php中这样做时,它就不起作用了。我购买了共享主机,我没有访问apache日志,现在我无法理解为什么我的脚本无法在服务器上运行?以及我如何测试。

这是我的vibecron.php

 <?php error_reporting(E_ALL); 
        //Vital file include
        require_once("load.php");
        $tp = ABSPATH.'/'.get_option('tmp-folder','rawmedia')."/";
        $fp = ABSPATH.'/'.get_option('mediafolder')."/";
        $ip = ABSPATH.'/'.get_option('mediafolder').'/thumbs/'; ;
        //Run conversions
        $crons = $db->get_results("select id,tmp_source,token from ".DB_PREFIX."videos where tmp_source != '' and source = '' limit 0,100000");
        if($crons) {
        foreach ($crons as $cron) {
        $db->query("UPDATE  ".DB_PREFIX."videos SET tmp_source='' WHERE id = '".intval($cron->id)."'");
        $output ="{ffmpeg-cmd} -i {input} -vcodec libx264 -s {ffmpeg-vsize} -threads 4 -movflags faststart {output}.mp4";
        //$output ="{ffmpeg-cmd} -i {input} -vcodec libx264 -s {ffmpeg-vsize} -threads 4 -strict experimental {output}.mp4";
        $input = $tp.$cron->tmp_source;
        $final = $fp.$cron->token;
        $check = $fp.$cron->token.'.mp4';
        $source= 'localfile/'.$cron->token.'.mp4';
        if (file_exists($input)) {  
        //Start video conversion
        $out = str_replace(array('{ffmpeg-cmd}','{input}','{ffmpeg-vsize}','{ffmpeg-bitrate}','{output}'),array(get_option('ffmpeg-cmd','ffmpeg'), $input, get_option('ffmpeg-vsize','640x360'), get_option('ffmpeg-bitrate','1750'),$final), $output);
        shell_exec($out);

        //Extract thumbnail
        $imgout = "{ffmpeg-cmd} -itsoffset -4 -i {input} -y -f image2  -ss ".get_option('ffmpeg-thumb-time','00:00:03')." -vcodec mjpeg -vframes 1 -an -f rawvideo -s 500x300 {output}";
        $imgfinal = $ip.$cron->token.'.jpg';
        $thumb = str_replace(ABSPATH.'/' ,'',$ip.$cron->token.'.jpg');
        $imgout = str_replace(array('{ffmpeg-cmd}','{input}','{output}'),array(get_option('ffmpeg-cmd','ffmpeg'), $input,$imgfinal), $imgout);
        exec ( $imgout);
        // Update so far
        $db->query("UPDATE  ".DB_PREFIX."videos SET thumb='".$thumb."', source='".$source."', pub = '".intval(get_option('videos-initial'))."'  WHERE id = '".intval($cron->id)."'");
        //Extract Duration

        $cmd = get_option('ffmpeg-cmd','ffmpeg')." -i ".$check;
        exec ( "$cmd 2>&1", $output );
        $text = implode ( "\r", $output );
        if (preg_match ( '!Duration: ([0-9:.]*)[, ]!', $text, $matches )) {
                    list ( $v_hours, $v_minutes, $v_seconds ) = explode ( ":", $matches [1] );
                    // duration in time format
                    $d = $v_hours * 3600 + $v_minutes * 60 + $v_seconds;            
                }
        if(isset($d)) {     
        list ( $duration, $trash ) = explode ( ".", $d );
        }       



        if(isset($duration)) {
        $db->query("UPDATE  ".DB_PREFIX."videos SET duration='".$duration."' WHERE id = '".intval($cron->id)."'");
        }
         add_activity('4', $cron->id); 
        /* End this loops item */
        }
        }
        $db->clean_cache();
        } 

        ?>

1 个答案:

答案 0 :(得分:0)

他们在&#34;要求&#34;下有一个测试人员,这是你在购买剧本时应该首先阅读的内容。

确保你的ffmpeg工作,你在cms中的ffmpeg路径以及服务器上的ffmpeg版本是正确的,它们支持1.0 +。

你发布的php很适合他们,管理员的配置或服务器上的ffmpeg就是问题。