php exec ffmpeg 如何获取错误

Posted

技术标签:

【中文标题】php exec ffmpeg 如何获取错误【英文标题】:php exec ffmpeg how to get errors 【发布时间】:2011-03-17 09:38:08 【问题描述】:

当我跑步时

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

$error 返回空值 但是当我使用 cron 作业运行这个命令时 这一个向我发送一封通知电子邮件,其中包含诸如

之类的信息

FFmpeg 版本 0.5.2,版权所有 (c) 2000-2009 Fabrice Bellard 等人。 配置: --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 libav 格式 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 日 23:44:18,gcc: 4.1.2 20080704 (Red Hat 4.1.2-48)

我需要能够在 php 中获取这些错误,这样我才能知道拇指是否已创建

谢谢。

【问题讨论】:

如何在ffmpeg中进行错误处理? 【参考方案1】:

2>&1重定向输出

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

【讨论】:

我知道这是一个老问题,但我总是发现在运行某些命令时获取 FFMPEG 报告也很有用。因此我使用这样的东西:$cmd = 'ffmpeg -i ' . $task . $codec . $path . ' -report -hide_banner -loglevel error 2>&1'; $r = exec($cmd, $errors); where -report 在根目录中生成一个广泛的报告。对于更大的项目,我总是会加入一个日志系统,例如:$log = file_put_contents($logFile, $cmd . PHP_EOL , FILE_APPEND | LOCK_EX);,只是为了将所有内容集中在一个地方并得到很好的评论。【参考方案2】:

建立在 Mauro 的回答之上。一种检测错误的干净方法是添加以下选项-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;

【讨论】:

【参考方案3】:

这个答案是在提问近 6 年后才出现的,但较新的版本有一个选项 -hide_banner

来自手册页

-hide_banner

禁止打印横幅。

所有 FFmpeg 工具通常都会显示版权声明、构建选项和库版本。此选项可用于禁止打印此信息。

您还可以使用选项-loglevel 来定义要显示的消息类型(错误、警告、信息、调试)。

【讨论】:

以上是关于php exec ffmpeg 如何获取错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中运行 ffmpeg 命令

php获取视频长度,php.ini配置

php如何获取mp4视频的封面图片

如何检索 PHP exec() 错误响应?

php-fpm linux环境使用exec函数调用ffmpeg,报错ffmpeg: command not found的解决方法

php ffmpeg