gpt4 book ai didi

php - php中的FFMPEG进度条

转载 作者:行者123 更新时间:2023-12-04 23:00:16 25 4
gpt4 key购买 nike

我正在使用 ffmpeg 转换视频文件大文件需要很长时间才能获得编码。我想显示一个剩余百分比/时间的进度条

我看到并尝试了这个example但由于某种原因,进度条没有显示。

html表单

<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file"><span></span></label>
<input type="file" name="file" id="file" />
<br/>
Please enter video title:
<br/>
<input type"text" name="videoTitle" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>

<div id="myDiv" name="myDiv" title="test">
<h5>Encoding percentage</h5>
<script src="https://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>
<script>
$(document).ready(function(){
setInterval(function(){
$("#screen").load('progress.php')
}, 10000);
});
</script>
</div>

upload.php ffmpeg 脚本
shell_exec("C:\\ffmpeg\\bin\\ffmpeg.exe -y -i ".$target_file." -c:v libx264 -s:v 854x480 -c:a copy \"{$newFileName}\" > logfile.txt 2>&1"); // script to encode video

进度.php

$content = @file_get_contents('blocks.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 . "%";

}

?>

最佳答案

FFMpeg 的最新版本中, 要创建日志文件,您必须使用选项 -vstats_file
因此,您必须将编码视频脚本更改为:

shell_exec("C:\\ffmpeg\\bin\\ffmpeg.exe -y -i ".$target_file." -c:v libx264 -s:v 854x480 -c:a copy \"{$newFileName}\" -vstats_file PATH_TO_YOUR\logfile.txt"); // script to encode video

关于php - php中的FFMPEG进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34867202/

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