ffmpeg는 PHP exec가 아닌 터미널에서 작동합니다 exec를 통해 호출되는 경우

터미널에서 ffmpeg 명령을 실행하면 원하는 결과가 나타납니다.

ffmpeg  -i src.mp4 -ar 22050 -ab 32 -f flv -s 320x240 video.flv

터미널의 출력

… 비디오 : 3404kB 오디오 : 1038kB 글로벌 헤더 : 0kB 멀티플렉싱 오버 헤드 2.966904 %

그리고 video.flv가 올바르게 생성됩니다 .

그런 다음 PHP exec를 통해 호출되는 경우 :

exec("ffmpeg  -i src.mp4 -ar 22050 -ab 32 -f flv -s 320x240 video.flv", $o, $v);
var_dump($o);
var_dump($v);

출력은 다음과 같습니다

배열 (0) {} int (1)

그리고 파일이 생성되지 않습니다 .

이것에 접근하는 방법에 대한 생각이 있습니까?

나는 exec('whoami')아무 문제없이 할 수 있습니다.

ffmpeg 전체 경로도 사용했습니다. /usr/local/bin/ffmpeg



답변

명령 끝에 “2> & 1″을 추가하면 작동합니다.

exec("ffmpeg  -i src.mp4 -ar 22050 -ab 32 -f flv -s 320x240 video.flv 2>&1", $o, $v);

답변

문제는 shell_exec 대신 exec 를 사용한다는 것입니다
. 요점은 exec의 환경이 ffmpeg 실행 파일에 대해 알지 못하지만 shell_exec 는 env 를 사용하기 때문에 exec 를 사용한다는 것 입니다. bash / shell의

이 솔루션은 ffmpeg 실행 파일의 전체 경로를 사용합니다 (예 : / usr / bin / ffmpeg