2013-10-23 2 views
0

저는 문제를 해결할 수 없습니다!PHP와 FFmpeg : 터미널에서 작동하지만 shell_exec에서 ffmpeg 오류가 발생했습니다.

ffmpeg 도구를 사용하여 비디오를 변환하려고합니다. 서버 터미널 (ssh 루트)에 명령을 붙여 넣으면 제대로 작동합니다. 그러나 shell_exec을 사용하여 PHP 스크립트를 실행하려고하면 "엔코더를 여는 중 오류가 발생했습니다 ..."오류가 반환됩니다. 여기

은 내가 사용하는 명령입니다

ffmpeg -y -i VIDEOIN.mov -preset medium -strict -2 -c:v libx264 -b:v 1000k -pass 1 -f mp4 VIDEOOUT.mp4 </dev/null 1>logfile.txt 2>&1 & 

그리고 내 PHP 스크립트를

ffmpeg version 1.0.8 Copyright (c) 2000-2013 the FFmpeg developers 
built on Sep 12 2013 11:57:09 with gcc 4.7 (Debian 4.7.2-5) 
configuration: --prefix=/usr --extra-cflags='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security ' --extra-ldflags='-Wl,-z,relro' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-libvpx --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-librtmp --enable-avfilter --enable-libfreetype --enable-libvo-aacenc --disable-decoder=amrnb --enable-libvo-amrwbenc --enable-libaacplus --libdir=/usr/lib/x86_64-linux-gnu --disable-vda --enable-libbluray --enable-libcdio --enable-gnutls --enable-frei0r --enable-openssl --enable-libass --enable-libopus --enable-fontconfig --enable-libfdk-aac --enable-libdc1394 --disable-altivec --dis libavutil  51. 73.101/51. 73.101 
    libavcodec  54. 59.100/54. 59.100 
    libavformat 54. 29.104/54. 29.104 
    libavdevice 54. 2.101/54. 2.101 
    libavfilter  3. 17.100/3. 17.100 
    libswscale  2. 1.101/2. 1.101 
    libswresample 0. 15.100/0. 15.100 
    libpostproc 52. 0.100/52. 0.100 
Input #0, matroska,webm, from 'videos/18352678af96ecb5/origin.webm': 
    Metadata: 
    creation_time : 2010-05-20 08:21:12 
    Duration: 00:00:32.48, start: 0.000000, bitrate: 533 kb/s 
    Stream #0:0(eng): Video: vp8, yuv420p, 640x360, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn, 1k tbc (default) 
    Stream #0:1(eng): Audio: vorbis, 44100 Hz, mono, s16 (default) 
[libx264 @ 0x19c05a0] using SAR=1/1 
[libx264 @ 0x19c05a0] using cpu capabilities: MMX2 SSE2Fast SSEMisalign LZCNT 
[libx264 @ 0x19c05a0] ratecontrol_init: can't open stats file 
Output #0, mp4, to 'videos/18352678af96ecb5/video.mp4': 
    Stream #0:0(eng): Video: h264, yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=-1--1, pass 1,  90k tbn, 25 tbc (default) 
    Stream #0:1(eng): Audio: none, 44100 Hz, mono, s16, 128 kb/s (default) 
Stream mapping: 
    Stream #0:0 -> #0:0 (vp8 -> libx264) 
    Stream #0:1 -> #0:1 (vorbis -> libfaac) 
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as  bit_rate, rate, width or height 

편집 : 여기

$dir = 'videos/'.$uuid; $out = $dir.'video.mp4'; $log = $dir.'transcoding_log.txt'; $preset = 'medium'; $bitrate = 1000; $cmd = "ffmpeg -y -i ".$in." -preset ".$preset." -strict -2 -c:v libx264 -b:v ".$bitrate."k -pass 1 -f mp4 ".$out." </dev/null 1>".$log." 2>&1 &"; @file_put_contents($dir.'cmd.log', $cmd); // to debug shell_exec($cmd); 

는 PHP 스크립트에서 생성 된 로그 파일입니다 1 :

ffmpeg를 최신 버전으로 컴파일했지만 문제가 여전히 발생합니다.

답변

1

Synology 서버에서 동일한 pb를 가지고 있습니다. /usr/syno/etc/codec/activation.conf에 대한 읽기 권한은 PHP에서 ffmpeg를 호출 할 때 부여되지 않습니다.

Jan 25 19:00:11 MySpher-Serv synocodectool: G1HttpSend.cpp:198 SaveResponseToFile failed 
Jan 25 19:00:11 MySpher-Serv synocodectool: G1Licence.cpp:40 Failed to read file [/usr/syno/etc/codec/activation.conf] 
Jan 25 19:00:11 MySpher-Serv synocodectool: G1Licence.cpp:66 read json file [/usr/syno/etc/codec/activation.conf] error 
Jan 25 19:00:11 MySpher-Serv synocodectool: SYNOCodecPatentG1.cpp:223 ValidateG1Licence failed 

는 간단한 chmod 777 /usr/syno/etc/codec/activation.conf은 (및 하위 디렉토리에) 문제를 해결했다 :

응답

메시지가 로그 파일/로그 /는/var했다.