ffmpeg는 PHP exec가 아닌 터미널에서 작동합니다


2

터미널에서 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


exec ()는 outputstderr가 아닌 in stdout 만 캡처합니다 .
Der Hochstapler

FFmpeg는 매우 이상한 출력을 생성합니다. 모든 AFAIK를 가져 오려면 stdout과 stderr을 모두 리디렉션해야합니다.
slhck

원하는 flv 파일을 만들지 못하므로 뭔가 def입니다. 작동 안함. 이 시점에서
확실히

답변:


1

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

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

0

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

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


아니요, 사용자도 시도했다고 말했습니다 /usr/local/bin/ffmpeg.
slhck

1
우리는 반년 전에 같은 문제가 있었으며 위에서 설명한 해결책은 문제를 해결했습니다. "/ usr / local / bin / ffmpeg"는 어쩌면
-bin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.