更新:

更新:

我在 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执行命令时,请注意不要在变量中包含任何换行符。

相关内容