首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过PHP proc_open调用FFmpeg总是导致输出被发送到标准错误而不是标准错误

通过PHP的proc_open函数调用FFmpeg时,如果输出被发送到标准错误而不是标准输出,可能是由于FFmpeg的输出流被错误地重定向到了标准错误流。为了解决这个问题,可以在调用proc_open函数时,通过设置参数来正确地重定向FFmpeg的输出流。

以下是一个示例代码,展示了如何正确地调用FFmpeg并将输出发送到标准输出:

代码语言:txt
复制
$descriptors = [
    0 => ['pipe', 'r'], // 标准输入
    1 => ['pipe', 'w'], // 标准输出
    2 => ['pipe', 'w'], // 标准错误
];

$process = proc_open('ffmpeg -i input.mp4 output.mp4', $descriptors, $pipes);

if (is_resource($process)) {
    // 读取标准输出
    $output = stream_get_contents($pipes[1]);
    fclose($pipes[1]);

    // 读取标准错误
    $error = stream_get_contents($pipes[2]);
    fclose($pipes[2]);

    // 等待进程结束
    $status = proc_close($process);

    if ($status === 0) {
        // 执行成功
        echo "FFmpeg执行成功!";
        echo "输出:".$output;
    } else {
        // 执行失败
        echo "FFmpeg执行失败!";
        echo "错误信息:".$error;
    }
}

在上述代码中,我们通过设置proc_open函数的参数来创建了一个子进程,并将FFmpeg的输出流重定向到标准输出流。然后,我们可以通过stream_get_contents函数读取标准输出和标准错误的内容,并根据进程的返回值判断FFmpeg的执行结果。

请注意,上述代码仅为示例,实际使用时需要根据具体情况进行适当的修改和错误处理。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云对象存储(COS)、腾讯云音视频处理(MPS)。

  • 腾讯云云服务器(CVM):提供弹性计算能力,可用于部署和运行各种应用程序和服务。详情请参考:腾讯云云服务器
  • 腾讯云对象存储(COS):提供安全、稳定、低成本的云端存储服务,适用于存储和管理各种类型的数据。详情请参考:腾讯云对象存储
  • 腾讯云音视频处理(MPS):提供丰富的音视频处理功能,包括转码、截图、水印、音视频合成等,可满足多种音视频处理需求。详情请参考:腾讯云音视频处理
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

优雅的玩PHP多进程

proc_open (PHP 4 >= 4.3.0, PHP 5, PHP 7) proc_open — 执行一个命令,并且打开用来输入/输出的文件指针。...数组的键表示描述符,数组元素值表示 PHP 如何将这些描述符传送至子进程。 0 表示标准输入(stdin),1 表示标准输出(stdout),2 表示标准错误(stderr)。..."w"), // 标准输出,子进程向此管道中写入数据 2 => array("file", "/tmp/error-output.txt", "a") // 标准错误,写入到一个文件 ); $...// 1 => 可以从子进程标准输出读取的句柄 // 错误输出将被追加到文件 /tmp/error-output.txt fwrite($pipes[0], '<?...标准输入,标准输出和标注错误会按照预期工作。 Note: 如果你只需要单向的进程管道, 使用 popen() 函数会更加简单。 <?

54920

PHP实现执行外部程序的方法详解

分享给大家供大家参考,具体如下: 在一些特殊情况下,会使用PHP调用外部程序执行,比如:调用shell命令、shell脚本、可执行程序等等,今天在源码中了解了一下PHP执行外部程序的方法,借此机会顺便整理一下...② 如果想通过exec调用外部程序后马上继续执行后续代码,仅仅在命令里加"&"是不够的,此时exec依然会等待命令执行完毕;需要再将标准输出做重定向才可以,例如:exec("ls -al >/dev/null...php $output = shell_exec('whoami'); echo "$output"; // hedong exit; 注意: 当进程执行过程中发生错误,或者进程不产生输出的情况下,都会返回...用途:当所执行的 Unix 命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数来替代 exec() 或 system() 函数 例子: <?...② proc_open打开的程序作为php的子进程,php退出后该子进程也会退出。

97330
  • PHP守护进程的两种常见实现方式详解

    : 1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程) 2、session首进程退出时,该信号被发送到该session中的前台进程组中的每一个进程 3...、若父进程退出导致进程组成为孤儿进程组,且该进程组中有进程处于停止状态(收到SIGSTOP或SIGTSTP信号),该信号会被发送到该进程组中的每一个进程。...:00:00 grep 3612 [root@localhost php]# 其中 >logs.txt 重定向标准输出,2>error.txt 重定向标准错误输出。...; } el/【参考文章的时候,并不建议直接复制,应该尽量地读懂】/seif ($pid > 0) { // 再一次退出父进程,子进程成为最终的守护进程 exit(0); } // 由于守护进程用不到标准输入输出...,关闭标准输入,输出错误输出描述符 fclose(STDIN); fclose(STDOUT); fclose(STDERR); /* 处理业务代码 */ while(TRUE) { file_put_contents

    45410

    PHP进程通信之管道与消息队列(二十三节)

    // 下面的case里,众所周知 // 0表示标准输入 // 1表示标准输出 // 2表示标准错误 // 任何一个进程打开后,默认都会打开0 1 2三个文件描述符 // 这里通过a_pipe_desc...( $a_pipes ); // 通过proc_get_status可以获取「PHP程序」 // 打开的子进程「bash」的相关信息 $a_process_info = proc_get_status...错误将会被记录到 fwrite($a_pipes[0], 'ls -l'); fclose($a_pipes[0]); echo stream_get_contents($a_pipes[1]);...在PHP中,是通过msg_*系列函数完成消息队列操作的。...上述Pyton与PHP这个案例里,ftok这里可能大家会有些疑惑,为什么PHP第二个参数是字母a,Python里是数字97,实际上我这里得说一下,咱们来把老祖宗的标准先拿出来,在XSI标准里,粗暴点儿说就是你在

    1.4K31

    Linux >devnull 2>&1 命令使用说明

    近期在开发项目中遇到了PHP使用shell_exec执行Shell命令的问题,具体说是Shell使用FFmpeg软件进行录制直播流,但是PHP等待命令执行时间是有限的,并且会出现等待时间过长导致该执行接口出现未响应问题...语句后面加上>/dev/null 2>&1 这段特殊的命令,简单来说就是将执行的Shell操作放到后台进行运行,将快捷反应执行的操作,解决执行Shell语句等待问题,接下来就是对这段命令的解析: 命令的结果可以通过...1>/dev/null“; 2 表示stderr标准错误; & 表示等同于的意思,2>&1,表示2的输出重定向等同于1。...针对下面数字的代表含义的解释: 0:表示键盘输入(stdin) 1:表示标准输出(stdout),系统默认是1 2:表示错误输出(stderr) > /dev/null 2>&1 语句含义: > /dev...2>&1 :接着,标准错误输出重定向(等同于)标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

    2.3K10

    lnmp - tp6.0的安装和简单使用

    虚拟机安装去centos官网下载安装包,https://www.centos.org/download/ 选择 ARM64 (aarch64)这个版本不会影响lnmp的安装,安装之前我一直想的会不会因为版本太高导致不好用...、proc_open、passthru,php配置文件的路径可能不一样,可以使用命令 php -i | grep php.ini去搜索。...proc_get_status() 函数用于获取通过 proc_open() 函数打开的进程的信息。...这个函数返回一个关联数组,其中包含了关于该进程的各种状态信息,如进程ID、是否还在运行、输入/输出流的状态等。这些信息对于监控和管理通过PHP执行的进程非常有用。...#thinkphp6.0 启动命令php think run -p 80tp6.0+ 多应用模式设计初衷,在开发的过程中有很多痛点,比如数据模型的不规范调用,返回数据格式的不统一,所以设计初衷使用4层设计

    11987

    RCE命令执行代码执行

    危险等级:高 error_log() 功能描述:将错误信息发送到指定位置(文件)。...这也就是说如果程序在运行过程中调用了某个标准的动态链接库的函数,那么我们就有机会通过LD_PRELOAD来设置它优先加载我们自己编写的程序,实现劫持。...结合mail 函数进行实战测试 那么我们来看一下sendmail函数都调用了哪些库函数,使用readelf -Ws /usr/sbin/sendmail命令来查看,我们发现sendmail函数在运行过程动态调用了很多标准库函数...通过php的putenv来设置LD_PRELOAD,让我们的程序优先被调用。 在webshell上用mail函数发送一封邮件来触发。...(1) 首先查看phpinfo ,如果是php 7 ,直接先上面工具一把梭 (2) 如果不是php7 ,那么再看disable_function 有没有遗漏的函数,毕竟是黑名单,所以很有可能没写全,可以对照这个列表来比较

    2K10

    十个 PHP 开发者最容易犯的错误

    1,2,3 1,2,3 1,2,2 你没有看错,最后一行的最后一个值是 2 ,不是 3 ,为什么?...这意味着这个数组的一份拷贝将会被返回,因此被调函数与调用者所访问的数组并不是同样的数组实例。 所以上面对 getValues() 的调用将会返回 $values 数组的一份拷贝,不是对它的引用。...常见错误 #6: 忽略 Unicode/UTF-8 的问题 从某种意义上说,这实际上是PHP本身的一个问题,不是你在调试 PHP 时遇到的问题,但是它从未得到妥善的解决。...常见错误 #7: 认为 $_POST 总是包含你 POST 的数据 不管它的名称, $_POST 数组不是总是包含你 POST 的数据,他也有可能会是空的。..."\n"; } 常见 错误 #9: 忽视代码规范 尽管忽视代码标准并不直接导致需要去调试 PHP 代码,但这可能是所有需要谈论的事情里最重要的一项。 在一个项目中忽视代码规范能够导致大量的问题。

    2.6K50

    十个 PHP 开发者最容易犯的错误

    1,2,3 1,2,3 1,2,2 你没有看错,最后一行的最后一个值是 2 ,不是 3 ,为什么?...这意味着这个数组的一份拷贝将会被返回,因此被调函数与调用者所访问的数组并不是同样的数组实例。 所以上面对 getValues() 的调用将会返回 $values 数组的一份拷贝,不是对它的引用。...常见错误 #6: 忽略 Unicode/UTF-8 的问题 从某种意义上说,这实际上是PHP本身的一个问题,不是你在调试 PHP 时遇到的问题,但是它从未得到妥善的解决。...常见错误 #7: 认为 $_POST 总是包含你 POST 的数据 不管它的名称, $_POST 数组不是总是包含你 POST 的数据,他也有可能会是空的。..."\n"; } 常见 错误 #9: 忽视代码规范 尽管忽视代码标准并不直接导致需要去调试 PHP 代码,但这可能是所有需要谈论的事情里最重要的一项。 在一个项目中忽视代码规范能够导致大量的问题。

    3K90

    易犯错误 | 十个 PHP 开发者最容易犯的错误

    1,2,3 1,2,2 你没有看错,最后一行的最后一个值是 2 ,不是 3 ,为什么?...这意味着这个数组的一份拷贝将会被返回,因此被调函数与调用者所访问的数组并不是同样的数组实例。 所以上面对 getValues() 的调用将会返回 $values 数组的一份拷贝,不是对它的引用。...常见错误 #6: 忽略 Unicode/UTF-8 的问题 从某种意义上说,这实际上是PHP本身的一个问题,不是你在调试 PHP 时遇到的问题,但是它从未得到妥善的解决。...常见错误 #7: 认为 _POST 总是包含你 POST 的数据不管它的名称,_POST 数组不是总是包含你 POST 的数据,他也有可能会是空的。为了理解这一点,让我们来看一下下面这个例子。..."\n"; } 常见 错误 #9: 忽视代码规范 尽管忽视代码标准并不直接导致需要去调试 PHP 代码,但这可能是所有需要谈论的事情里最重要的一项。

    4.5K20

    SkeyeExPlayer(Windows)开发之ffmpeg log输出报错

    SkeyeExPlayer主要基于ffmpeg进行开发,在SkeyeExPlayer开发过程中,曾遇到一个相对比较棘手的问题,该问题一般在播放不是标准的流或者网络情况较差,容易出现丢帧的情况特别容易出现...后面补上),不过在播放没有音频的rtsp流的时候比较容易出现,报错定位output.c源文件中,应该是字符串格式化输出的时候出错,经过排查,定位到ffmpeg的日志输出,为了便于查看错误,我在avformat_open_input...()打开流函数前加了日志输出打印函数调用: av_log_set_level(AV_LOG_WARNING); av_log_set_callback(callback);在callback...回调函数中输出的日志打印,从而能看到FFMPEG的内部报错信息,屏蔽这两句,虽然在丢帧的情况下视频卡帧了,但是上文提到的报错的问题却不再出现了,所以,我们猜测在ffpeg内部应该存在一个地方的日志打印出现错误的地方...,当然也有可能是我的调用方法不合理导致的(谁知道呢),总之,问题是暂时得到了解决,后续找到真正报错的问题在补上。

    28650

    一、从C语言到C++(一)

    这样可以使头文件更加简洁,并且可以在多个源文件中包含同一个头文件不会导致多重定义错误。...,特别是在大型项目中,因此通常建议在函数或类的局部作用域中使用它,不是在全局作用域中。...结构体和类的定义: 在头文件中使用命名空间时,可以定义结构体和类,因为这些不是具体的实例,不会导致链接错误。...刷新缓冲区:调用 std::endl 后,输出缓冲区会被立即刷新,确保到目前为止所有的输出被发送到它们的目标位置(如控制台、文件等)。...\n"; // 输出缓冲区不会被立即刷新 使用std::cout进行输出 std::cout是一个输出流对象,它允许你将数据发送到标准输出设备(通常是终端或控制台)。

    9710

    【Java 基础篇】Java 标准输出流详解:输出你的程序之美

    然后,我们使用 System.setOut 方法将标准输出重定向到这个文件输出流。接下来的 System.out.println 将数据写入文件不是控制台。...重定向到字符串 有时候,你可能希望将标准输出的内容捕获到一个字符串中,不是输出到控制台或文件。你可以使用 ByteArrayOutputStream 来实现这一点。...(customOut); System.out.println("这将被发送到自定义输出流。")...System.out.println("这是一行文本" + System.lineSeparator() + "这是另一行文本"); 考虑输出的重定向: 在某些情况下,你可能希望将输出重定向到文件不是标准输出...这可以通过修改 System.out 来实现,但要小心确保在不需要时将其还原回标准输出。 注意性能问题: 过多的输出可能会导致性能问题,特别是在大规模数据生成时。

    68620

    珂兰寺小课堂|PHP代码审计(一)

    CONTENT_LENGTH 如果服务器与CGI程序信息的传递方式是POST,这个环境变量即使从标准输入STDIN中可以读到的有效数据的字节数。这个环境变量在读取所输入的数据时必须使用。...,文件处理范围,数据过滤,文件处理范围,函数调用等) 以及方便审计过程中调试和信息的输出(display_errors,error_reporting控制错误信息显示) 1、两个主要的PHP配置文件 php.ini...隐患:从PHP5.2开始allow_url_include就默认为Off,allow_url_fopen一直是On的。在文件包含漏洞中,会产生远程文件包含的动作,增加攻击面。...函数类似, passthru() 函数 也是用来执行外部命令的 proc_open() 执行一个命令,并且打开用来输入/输出的文件指针 pcntl_exec() 在当前进程空间执行指定程序,可指定参数...shell_exec() 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回 mail() 发送邮件 imap_open() 打开 IMAP 流,参数 username 为用户帐号。

    1.4K20

    总结PHP中初始化空数组的最佳方法

    PHP支持三种类型的数组: 索引数组:具有数字索引的数组。 关联数组:具有命名键的数组。 多维数组:它包含特定数组中的一个或多个数组。 注意:为什么声明一个空数组然后将项目推送到该数组总是好的做法?...借助于此,它可以防止由于阵列故障导致的不同错误。它有助于获取使用bug的信息,不是使用数组。它在调试过程中节省了时间。大多数情况下,在创建时可能没有任何东西可以添加到数组中。...换句话说,新数组的初始化速度更快,使用语法var first = []不是使用语法var first = new Array()。事实是构造函数是函数Array()和,[]是数组文字语法的一部分。...两者都经过优化,不受任何调用函数开销的影响。 空数组的基本示例: <?...输出: Array ( [0] = php [1] = 中文 [2] = 网站 )

    3.7K20

    哥斯拉流量分析

    (); // 调用重新定义系统函数的函数 $_SES=&getSession(); // 获取会话变量 @session_start(); // 启动会话,@ 符号用于抑制可能出现的错误信息...php function test(){ return "ok"; } 接着往下跟返回的信息通过gziencode做了压缩 <?...==false)) { }else{ // 如果没有可用的函数执行命令,则返回错误消息 return "none of proc_open/passthru/shell_exec...总结 哥斯拉无论是流量还是shell的实现方式都非常不同于冰蝎与蚁剑,他不仅功能强大,而且在evalXOR解码器下还兼容一句话shell,成也兼容,败也兼容,哥斯拉在使用evalXOR解码器时会将他的标准木马编码后一起发送到服务端...代码来执行,哥斯拉使用了session来存储payload,将常用的功能实现存储到了session中,调用仅需发送特制的数据包即可,对于插件的实现也是如此,只不过插件代码仅在需要时发送,也就是说我们可以通过解码发送返回包来确认哥斯拉使用了哪些插件

    39010

    十大Docker记录问题

    容器将日志写入控制台(stdout / stderr),Docker Logging Drivers将日志转发到目的地,不是将日志写入文件。...一旦使用其他日志记录驱动程序,例如Syslog,Gelf或Splunk,Docker日志API调用开始失败,“docker logs”命令显示报告限制的错误不是在控制台上显示日志。...Docker Syslog驱动程序在目标关闭时丢失日志 与上面的问题2类似,导致日志丢失的原因是Docker日志记录驱动程序在无法将日志传送到远程目标时缓冲日志的能力。...在容器世界中情况并不好,事情变得更加复杂,因为来自容器中运行的所有应用程序的日志都会被发送到同一输出 - 标准输出。难怪看到问题#22920以“已关闭”结束。不在乎。“这么多人都很失望。...一些问题报告了使用GELF驱动程序解析DNS /缓存的问题,因此当您的Graylog服务器IP更改时,您的日志可能会被发送到“Nirvana” - 这可能会使用容器部署快速发生。 10.

    2.7K40
    领券