我已经在服务器上用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秒