2011-02-25 3 views
4

비디오를 숨기기 위해 FFMpeg를 사용 중이며 은 명령 줄에서 올바르게 작동합니다. 나는 다음과 같은 명령을 사용하고 있습니다 : 나는 PHP 간부를 (사용하여 명령을 실행할 때), 그러나FFMpeg는 명령 행에서 작동하지만 PHP에서는 exec()를 사용하지 않습니다.

ffmpeg -i input.mpg -vcodec libx264 -b 819200 -s 100x100 -g 15 -bf 3 -b_strategy 1 -coder 1 -qmin 10 -qmax 51 -sc_threshold 40 -flags +loop -cmp +chroma -me_range 16 -me_method hex -subq 5 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -directpred 1 -flags2 +fastpskip -dts_delta_threshold 1 -acodec libfaac -ab 48000 output.m4v 

출력 비디오가 제대로 인코딩되지 않고 왜곡되고를 잘립니다. PHP에서 다음을 사용하고 있습니다 :

$output = exec($cmd . ' 2>&1', $output, $return); 

$ 출력은 '0'성공 코드를 반환합니다.

아무도 제안 사항이 있습니까?

감사합니다.

답변

7

이것은 일반적이지 않습니다. 두 개 이상의 ffmpeg 바이너리가 설치되어있을 수 있으며 PHP/Apache 사용자가 호출하는 것과 ffmpeg 바이너리가 명령 줄에서 사용자로 호출하는 바이너리가 같지 않을 수 있습니다.

exec() 내부에서 ffmpeg 바이너리 (/ usr/bin/ffmpeg 또는 기타)의 전체 경로를 지정하십시오.

+0

당신은 전설입니다! Upvote. 정말 고맙습니다! 나는 알고있는 한 두 가지 버전이 없지만 절대 경로를 지정하면 바로 정렬됩니다. 다시 감사합니다. – Kit

+0

문제 없습니다. 다행 이군요. – glomad

+0

방금 ​​ffmpeg를 설치했는데 아마 아파치를 다시 시작하면 의심이 될 것입니다. 그러나 이것은 똑같은 일을했습니다! (포스터 프레임 만 잡아서 실행 시간이 문제가되지 않았습니다). – Ecropolis

1

일부 명령 줄 옵션이 손실되거나 변경되는 것처럼 들립니다. 나는이 부분의 프로세스로이 분할하려고 할 것입니다 : 모든 적절한 명령 인수가 그

  1. 는 (PHP에서)이이 즉석에서 쉘 스크립트를 작성

  2. 쉘 스크립트를 실행 (그것을 실행하기) (PHP에서)
+0

이렇게하기 전에 exec()를 passthru()로 바꾸어도 문제가 해결되지 않았는지 확인하십시오. 이것이 효과가 있다면 더 빠르고 쉽게 해결 될 것입니다. – Teddy

+0

답장을 보내 주셔서 감사합니다. 쉘 스크립트를 작성하는 방법에 대해 자세히 설명해 주시겠습니까? 나는 이것에 너무 익숙하지 않다. 크리스 – Kit

0

아마 시도 할 것이다 :

1) 변화 '2> & 1' '2> '

에 또한, 트랜스 코딩 시간이 걸릴 수 있습니다. 트랜스 코드가 완료 될 때까지 기다리는 것이 확실합니까?

관련 문제