想做一个PHP自动转码的系统,代码如下:
<?php exec("mencoder d:\\input.mpg -o d:\\test.flv -oac mp3lame -lameopts cbr:br=32 -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=1024:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6 -vf scale=970:520",$out,$status);
print_r($out);
print_r($status);
?>
运行结果为:Array ( ) 1
而在D:盘下并没有发现转码后的test.flv文件,如果我直接在CMD下输入mencoder d:\input.mpg -o d:\test.flv -oac mp3lame -lameopts cbr:br=32 -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=1024:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6 -vf scale=970:520
这个命令就可以正常转码?这是为什么呢?我用的是windows7+apache+mysql系统,并且已经有EXEC执行权限(当我执行exec("ipconfig",$out)的时候可以正常显示IP)

解决方案 »

  1.   

    既然是返回1说明 出错了.
    用dirname(__FILE__)形式指定文件路径试试
    mencoder d:\\input.mpg -o d:\\test.flv
      

  2.   

    如果你不需要转出结果最好将转码放在后台进行执行,否则如果视频比较大哪么容易超时
    给一个如下的例子:
    if(PHP_OS == 'WINNT') { pclose(popen('run '.escapeshellarg($main->getConfig("phpcli_binary")).' -f convert.php convert '.$mid." > nul 2>&1", 'r')); }
    else {
    $info = exec(escapeshellarg($main->getConfig("phpcli_binary"))." -f convert.php convert ".$mid." > /dev/null 2>&1 &");
    }
    上面这段代码是 ostube系统中的,你可以看一下他们的做法
      

  3.   

    如果在 cmd 中执行成功,而在 exce 里执行不成功,首先应检查是否是权限问题
    考虑到你的结果文件是存放在根目录的这一事实,建议将结果文件改置于子目录中,并对该子目录赋予一般用户完全控制权
      

  4.   

    谢谢各位了,我已经找到原因了,我的页面用的是UTF-8编码,目录名中又存在中文名,所以EXEC无法执行。现在已经解决了!