我有一个执行 ffmpeg 的 php 脚本,然后它开始工作。我可以执行该脚本 4 次并生成 4 个进程。我想实时获得进展。如何获取并识别每个输出对应哪个进程?
$h = fopen('php://stdin', 'r'); $str = fgets($h);
我知道该行将获得标准输入中的任何输出,但如何分离它?如何连续轮询输出?流程启动后,如何持续访问该输出?我知道你需要 ajax,但是什么 php 方法将允许你访问该信息并将其与其他进程分开。
有些人建议将输出定向到文本文件并获取内容,但这是唯一的方法吗?为什么要为每个进程创建更多文本文件?另一个建议使用 2>&1 | 重定向输出命令后的 php script.php
。由于文件执行一次,因此仅在进程开始时获取输出。
我已经在这个问题上苦苦挣扎了一段时间,并且已经越来越接近了,所以任何专家的帮助将不胜感激。
查看编辑
$process = exec("/usr/local/bin/ffmpeg -i /home/g/Desktop/cave.wmv -deinterlace -acodec libfaac -ab 96k -ar 44100 -vcodec libx264 -s 480x320 -f flv /home/g/Desktop/file.flv")
最佳答案
这有点复杂。据我所知 exec 会阻塞 PHP 线程直到它完成。我认为 ffmpeg 可以将其进度写入文件。您需要解析该文件才能获取进度。您需要使用 Ajax 来调用它。
您需要弄清楚如何让 ffmpeg 报告其进度,其余的很简单:P
关于php - 实时获取多个 exec() 进程的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6481210/