gpt4 book ai didi

php - ffmpeg 进度条 - PHP 中的编码百分比

转载 作者:IT王子 更新时间:2023-10-28 23:51:29 24 4
gpt4 key购买 nike

我在服务器上用 PHP 和 bash 编写了整个系统,以在我的 VPS 上转换和流式传输 HTML5 视频。转换由ffmpeg在后台完成,内容输出到block.txt

已查看以下帖子:

Can ffmpeg show a progress bar?

ffmpeg video encoding progress bar

除其他外,我找不到一个有效的例子。

我需要以百分比的形式获取当前编码的进度。

我在上面链接的第一篇文章给出了:

$log = @file_get_contents('block.txt');

preg_match("/Duration:([^,]+)/", $log, $matches);
list($hours,$minutes,$seconds,$mili) = split(":",$matches[1]);
$seconds = (($hours * 3600) + ($minutes * 60) + $seconds);
$seconds = round($seconds);

$page = join("",file("$txt"));
$kw = explode("time=", $page);
$last = array_pop($kw);
$values = explode(' ', $last);
$curTime = round($values[0]);
$percent_extracted = round((($curTime * 100)/($seconds)));

echo $percent_extracted;

$percent_extracted 变量回显为零,数学不是我的强项,我真的不知道如何进步。

这是来自 block.txt 的 ffmpeg 输出的一行(如果有帮助的话)

time=00:19:25.16 bitrate= 823.0kbits/s frame=27963 fps= 7 q=0.0 size= 117085kB time=00:19:25.33 bitrate= 823.1kbits/s frame=27967 fps= 7 q=0.0 size= 117085kB time=00:19:25.49 bitrate= 823.0kbits/s frame=27971 fps= 7 q=0.0 size= 117126kB

请帮我输出这个百分比,完成后我可以创建自己的进度条。谢谢。

最佳答案

好的,我找到了我需要的东西 - 希望这也能帮助其他人!

首先,您希望将 ffmpeg 数据输出到服务器上的文本文件中。

ffmpeg -i path/to/input.mov -vcodec videocodec -acodec audiocodec path/to/output.flv 1> block.txt 2>&1

所以,ffmpeg 的输出是 block.txt。现在在 PHP 中,让我们这样做!

$content = @file_get_contents('../block.txt');

if($content){
//get duration of source
preg_match("/Duration: (.*?), start:/", $content, $matches);

$rawDuration = $matches[1];

//rawDuration is in 00:00:00.00 format. This converts it to seconds.
$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;

//get the time in the file that is already encoded
preg_match_all("/time=(.*?) bitrate/", $content, $matches);

$rawTime = array_pop($matches);

//this is needed if there is more than one match
if (is_array($rawTime)){$rawTime = array_pop($rawTime);}

//rawTime is in 00:00:00.00 format. This converts it to seconds.
$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;

//calculate the progress
$progress = round(($time/$duration) * 100);

echo "Duration: " . $duration . "<br>";
echo "Current Time: " . $time . "<br>";
echo "Progress: " . $progress . "%";

}

这会输出剩余时间的百分比。

你可以把它作为唯一的一段文本回显到一个页面,并且从另一个页面你可以使用 jQuery 执行一个 AJAX 请求来获取这段文本并将它输出到一个 div 中,例如,更新您的页面每 10 秒。 :)

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

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