当前位置: 首页 > 面试题库 >

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

邵繁
2023-03-14
问题内容

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

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

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

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

$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输出的一行(如果有帮助的话)

时间= 00:19:25.16比特率= 823.0kbits / s帧= 27963 fps = 7 q = 0.0大小= 117085kB时间=
00:19:25.33比特率= 823.1kbits / s帧= 27967 fps = 7 q = 0.0大小= 117085kB时间=
00:19:25.49比特率= 823.0kbits / s帧= 27971 fps = 7 q = 0.0大小= 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秒



 类似资料:
  • 问题内容: 我希望在我的网站上有一个百分比圆圈指示器 在这种情况下,显示为75%。应该怎么做?我在图像文件中有一个黄色圆圈,但是如果更容易使用CSS来完成所有操作,那么我可以。 问题答案: 考虑到进度条的形状(结束/开始是四舍五入的),我建议使用SVG。 演示:径向进度栏 径向进度栏 在以下示例中,使用stroke-dasarray属性为进度设置动画效果,并使用jQuery将%数字递增: 不幸的是

  • 问题内容: 如何在显示百分比的进度条中间放置标签?问题是python不支持标签背景的透明性,所以我不知道该如何解决。 问题答案: 使用可以做到这一点。这个想法是修改样式的布局(对垂直进度条做同样的事情),在样式条中添加一个标签: 通常的布局: 带有附加标签: 然后,可以使用来更改标签的文本。 这是代码:

  • 问题内容: 我有一个网站,该网站的表单使用PHP发送表单数据。有没有一种方法可以在页面上创建一个进度条,使它看起来像正在运行,所以人们单击按钮并发送PHP信息后,不必单击按钮多次。 谢谢。 问题答案: 进度栏:简单文本版本: 进度栏:基于PHP(语法):

  • 问题内容: 我想为服务器端任务创建进度条(用php编写) 出于学习目的,示例和任务将非常简单。我将在客户端页面上有一个文本字段,读取a ,将其与ajax一起传递给php脚本,并使其计算所有数字的总和(简单的任务是花费大量时间,只是为了模拟一些服务器端工作) 在.html文件中,我将创建一个计时器,该计时器每秒钟会调用一次函数,以获取for循环所需的索引并更新进度条。 我的问题是: 是否可能在同一个

  • 如何对字符串进行百分比编码,如RFC 3986中所述?也就是说,我不想(依我看,很奇怪)对www url表单进行编码,因为这是不同的。 如果重要的话,我正在编码的数据不一定是一个完整的URL。

  • 问题内容: 如何使用进度条显示页面的加载百分比?…(类似于它们在Flash中的显示方式) 谢谢 问题答案: 不可能(在IE8和FF3和Opera上,没有插件或扩展名)。如果要实际加载百分比,请包括HTML + Javascript +样式表+图片。您只能检测到页面中加载了多少文件(此技术只能检测到图像和javascript)。