2010-07-17 55 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; 
}