我正在尝试使用FFMPEG将视频转换为MP4。我以这种方式设置它:
.
.
private $ffmpegPath;
public function __construct($con) {
$this->con = $con;
$this->ffmpegPath = realpath("ffmpeg/bin/ffmpeg.exe");
}
.
.
public function convertVideoToMp4($tempFilePath, $finalFilePath){
$cmd = "$this->ffmpegPath -i $tempFilePath $finalFilePath 2>&1";
$outputLog = array();
exec($cmd, $outputLog, $returnCode);
if($returnCode != 0){
foreach ($outputLog as $line){
echo $line."<br>";
return false;
}
}
return true;
}
然后在浏览器中出现以下错误: 无法将“ C:\ xampp \ htdocs \ Thinksmart First Sprint”识别为内部或外部命令。
在我的构造函数中,我设置了它来给我真实路径,并且我怀疑这就是它在命令行中所做的事情:
C:/ xampp / htdocs / Thinksmart FIRST冲刺/ffmpeg/bin/ffmpeg.exe -i(文件临时名称)(我想要的文件名称)
这应该工作,但是我不知道为什么不会。有任何想法吗?这是我第一次进行视频转换。
答案 0 :(得分:1)
如您所见,命令中的空格用于分隔参数。因此,如果路径中有空格,则需要在整个路径上用引号引起来,以便外壳程序/处理器知道它们不是分隔符,而是一个参数:
$cmd = $cmd = '"' . $this->ffmpegPath . '" -i $tempFilePath $finalFilePath 2>&1';
这将导致如下所示的命令:
“ C:/ xampp / htdocs / Thinksmart First Sprint / ffmpeg / bin / ffmpeg.exe” -i C:/ path / to / file1 C:/ path / to / file2 2>&1
我认为Windows上仅双引号有效。如果它们之间也可能有空格,则需要引用$tempFilePath
和$finalFilePath
。