PHP 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

Если я скопирую эту команду и запущу ее в оболочке, все будет отлично работать, видео будет обрезано, идеально.

Однако при запуске через 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);

 ?>

Я что-то упускаю? Я пробовал escapeshellcmd, escapeshellarg, даже двойная обратная косая черта, чтобы избежать обратной косой черты, и ничего.

Это происходит и в винде, и в юниксе, ошибки точно такие же.

Любая идея о том, что происходит с этим?


person Tio    schedule 17.03.2015    source источник
comment
убери \ и сделай все одной строкой   -  person    schedule 18.03.2015
comment
@ Дагон, спасибо, это работает отлично ... но принятый ответ достается Диего из-за объяснения. Спасибо   -  person Tio    schedule 18.03.2015


Ответы (1)


Обратная косая черта (\) в сценарии оболочки в этом случае используется только для того, чтобы игнорировать разрыв строки (Ссылка)

Поэтому попробуйте запустить команду без обратной косой черты в одной строке:

<?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';
    (...)
?>
person Diego Bauleo    schedule 17.03.2015
comment
спасибо... так вот почему это не сработало, я не знал, что \ должен был экранировать новую строку - person Tio; 18.03.2015