PHP exec()和反斜杠\

时间:2015-03-17 22:36:19

标签: php ffmpeg exec

我试图在exec上运行以下命令:

ffmpeg -y -i video.mp4 \
 -ss 1067 -i video.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -t 32 tmp/cuts/6.ts \
 -ss 1215 -i video.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -t 32 tmp/cuts/7.ts

如果我复制这个命令并在shell上运行它一切都很好,视频是切割的,完美的。

然而,通过php exec运行, ffmpeg 会返回以下错误:

[NULL @ 052a0060] Unable to find a suitable output format for '\'
\: Invalid argument

即使我复制粘贴这样的命令:

<?php
    $command = 'ffmpeg -y -i video.mp4 \
         -ss 1067 -i video.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -t 32 tmp/cuts/6.ts \
         -ss 1215 -i video.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -t 32 tmp/cuts/7.ts';

    echo $command.chr(10);

    $return = 0;
    $output = array();
    exec($command, $output, $return);

 ?>

我错过了什么吗?我已经尝试escapeshellcmdescapeshellarg,甚至双反斜杠来逃避反斜杠,什么都没有。

在Windows和Unix中都会发生这种情况,错误完全相同。

对于这件事的进展有什么想法吗?

1 个答案:

答案 0 :(得分:2)

在这种情况下,shell脚本中的反斜杠(\)仅用于使其忽略换行符(Reference

因此,尝试在没有反斜杠的情况下运行命令,只需一行:

<?php
    $command = 'ffmpeg -y -i video.mp4 -ss 1067 -i video.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -t 32 tmp/cuts/6.ts -ss 1215 -i video.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -t 32 tmp/cuts/7.ts';
    (...)
?>