2010-07-17 79 views
1

當我運行PHP EXEC的ffmpeg如何得到錯誤

exec("ffmpeg -i $flv -y -f mjpeg -ss 00:00:05 -s 120x90 -vframes 1 -an thumb.jpg",$error); 

$錯誤返回的空值 但是當我用cron作業 運行該命令這一次發送通知郵件給我包含像

信息

FFmpeg版本0.5.2,Copyright(c)2000-2009 Fabrice Bellard,et al。 配置:--prefix =/usr --libdir =/usr/lib64 --shlibdir =/usr/lib64 --mandir =/usr/share/man --incdir =/usr/include --disable -avisynth - extra-cflags = -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE = 2 -fexceptions -fstack-protector -param = ssp-buffer-size = 4 -m64 -mtune = generic -fPIC -enable-avfilter- -enable-avfilter-lavf --enable-libdirac --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared --enable-swscale --enable-vdpau --enable-version3 --enable-x11grab libavutil 49.15。 0/49.15。 0 libavcodec 52.20。 1/52.20。 1 libavformat 52.31。 0/52.31。 0 libavdevice 52. 1.0/52. 1.0 libavfilter 0.4.0/0.4.0 libswscale 0. 7.1 /0.7.1 libpostproc 51. 2.0/51。 2. 0 建於2010年6月13日二十三時44分18秒,GCC 4.1.2 20080704(紅帽4.1.2-48)

我需要能夠獲得在PHP這樣我就可以這些錯誤知道是否創建了拇指

謝謝。

+0

如何在ffmpeg中進行錯誤處理? – Hitesh 2014-11-28 09:47:33

回答

4

重定向輸出與2>&1

exec("ffmpeg -i $flv -y -f mjpeg -ss 00:00:05 -s 120x90 -vframes 1 -an thumb.jpg 2>&1",$error);

+0

我知道這是一個老問題,但我總是發現在運行某些命令時也可以獲得FFMPEG報告。因此,我使用這樣的東西:'$ cmd ='ffmpeg -i'。 $任務。 $編解碼器。 $路徑。 '-report -hide_banner -loglevel error 2> &1'; $ r = exec($ cmd,$ errors);'其中-report在根目錄中生成大量報告。對於更大的項目,我總是使用如下的日誌系統:'$ log = file_put_contents($ logFile,$ cmd,PHP_EOL,FILE_APPEND | LOCK_EX);'將所有內容放在一個地方並且很好地評論。 – thvs86 2017-12-04 11:17:33

1

這個答案來自問題近6年以後,但新的版本有一個選項-hide_banner

從手冊頁

-hide_banner

禁止打印標題。

所有FFmpeg工具通常會顯示版權聲明,構建選項和庫版本。該選項可用於抑制打印此信息。你

也可以使用該選項-loglevel來定義你想要什麼樣的信息(錯誤,警告,信息,調試)來顯示。

0

建立在毛羅的答案之上。一個乾淨的方式來檢測錯誤將增加以下選項-hide_banner-loglevel error

exec("ffmpeg -i $flv -y -f mjpeg -ss 00:00:05 -s 120x90 -vframes 1 -an thumb.jpg -hide_banner -loglevel error 2>&1", $errors); 

exec()將始終在這種情況下$errors分配串到第二參數的陣列,對應於不同的錯誤,這樣就可以使用循環簡單地打印或處理每個錯誤的每個元素:

foreach($errors as $next) { 
    //handle error 
    echo $next; 
}