progress.txt"; $proc = popen($sC-6ren">
gpt4 book ai didi

php - php中的ffmpeg进度百分比

转载 作者:行者123 更新时间:2023-12-04 22:59:35 25 4
gpt4 key购买 nike

ffmpeg.php

$sCmd = "ffmpeg -i ".$image." -i ".$music." video.avi 1> progress.txt";
$proc = popen($sCmd." 2>&1", "r");

进度.php
$content = @file_get_contents('progress.txt');
if($content){
preg_match("/Duration: (.*?), start:/", $content, $matches);
$rawDuration = $matches[1];
$ar = array_reverse(explode(":", $rawDuration));
$duration = floatval($ar[0]);
if (!empty($ar[1])) $duration += intval($ar[1]) * 60;
if (!empty($ar[2])) $duration += intval($ar[2]) * 60 * 60;
preg_match_all("/time=(.*?) bitrate/", $content, $matches);
$rawTime = array_pop($matches);
if (is_array($rawTime)){$rawTime = array_pop($rawTime);}
$ar = array_reverse(explode(":", $rawTime));
$time = floatval($ar[0]);
if (!empty($ar[1])) $time += intval($ar[1]) * 60;
if (!empty($ar[2])) $time += intval($ar[2]) * 60 * 60;
$progress = round(($time/$duration) * 100);
echo $progress;
}

progress.php 最终输出始终为 100,因此使用 jquery 可以轻松隐藏进度并显示下载按钮。

但是 更改后 ffmpeg.php 使用此命令:
$sCmd = "ffmpeg -loop 1 -r 1 -i ".$image." -i ".$music." -c:a copy -shortest video.avi 1> progress.txt";
$proc = popen($sCmd." 2>&1", "r");

progress.php 输出是 100(千)以上的不同数字,jquery 无法确定 ffmpeg 进程是否完成。

ffmpeg完成工作后如何获得100?我认为我需要对progress.php 进行一些更改,因为progress.txt 中的最终结果比以前更长。

最佳答案

我建议使用 symfony 进程组件 https://symfony.com/doc/current/components/process.html .

您有多种选择:

进程未完成时刷新进度

这允许您启动异步进程并检查它是否已完成。

$process = new Process('ffmpeg -i ".$image." -i ".$music." video.avi 1> progress.txt');
$process->run(function ($type, $data) {
echo $data;
fflush();
});

更复杂的方法是获取进程 ID 并检查该进程是否仍然存在后续请求。

返回带有进程 ID 的响应,并使用进度 更新 REDIS/cache/database

更复杂的方法是获取进程 ID 并检查该进程是否仍然存在后续请求。
// Setup process and an std output that updates redis
$process=new Process(...);
//Start process
$process->start(function ($type, $data) use ($redisService, $process){
$pid=$process->getPid();
$redisService->received($pid, $type, $data);
});
$pid=$process->getPid();
return JsonResponse(["pid"=>$pid, "running"=>$process->isRunning()]);

关于php - php中的ffmpeg进度百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49682325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com