我在 PHP 中设置了以下变量:
$ffmpeg = ffmpeg.exe;
$VideoFilename = "C:/Videos/VideoFile_1.mp4";
$CroppedVideoFilename= "C:/Videos/VideoFile_1_Cropped.mp4";
我在 PHP 中有以下代码行:
$cmd = "$ffmpeg -i $VideoFilename -vf crop=848:352:4:64 $CroppedVideoFilename";
$Return = `$cmd`;
效果似乎不错;它创建了一个裁剪的视频。
但是,以下方法不起作用:
$cmd = "ffmpeg.exe -i $VideoFilename -vf crop=848:352:4:64 $CroppedVideoFilename";
或者
$cmd = "ffmpeg.exe -i C:/Videos/VideoFile_1.mp4 -vf crop=848:352:4:64 $CroppedVideoFilename";
或者
$cmd = "$ffmpeg -i C:/Videos/VideoFile_1.mp4 -vf crop=848:352:4:64 C:/Videos/VideoFile_1_Cropped.mp4";
我尤其想尝试的是:
$CroppingValues = "crop=848:384:4:32";
$cmd = "$ffmpeg -i $VideoFilename -vf $CroppingValues $CroppedVideoFilename";
我发布了其他几行错误代码,因为它可能有助于解决“为什么”某些变量被 ffmpeg 命令接受,而其他变量则不接受。
我想让最后一段代码运行起来。由于某种原因,它就是无法执行。我一直在研究转义字符,并尝试过:
$CroppingValues = "crop=848\:384\:4\:32"
这不起作用,但是
$cmd = "$ffmpeg -i $VideoFilename -vf crop=848\:384\:4\:32 $CroppedVideoFilename";
确实有效,然后执行以下操作:
$CroppingValues = "crop\=848\:384\:4\:32"
不起作用,所以$CroppingValues
变量有问题。
更新:
刚刚发现里面$CroppingValues
有一条新线。\n
答案1
这是 $CroppingValues 变量内的“\n”新行符。
完整代码:
Function GetStringBetween($string, $start, $end)
{
$string = ' ' . $string;
$ini = strpos($string, $start);
if ($ini == 0) return '';
$ini += strlen($start);
$len = strpos($string, $end, $ini) - $ini;
return substr($string, $ini, $len);
}
和
$CroppingValues = GetStringBetween($returnnn, "crop=", "[");
if(strstr($CroppingValues, "\n"))
{
$CroppingValues = str_replace("\n", "", $CroppingValues);
}
else
{
echo 'There is no Line Break detected.';
}
if(strstr($CroppingValues, "\n"))
{
echo 'There is still a Line Break detected';
}
else
{
echo 'There is no Line Break detected';
}
$cmd
因此,在通过 ffmpeg.exe执行命令时,请注意不要在变量中包含任何换行符。