Я хочу иметь индикатор выполнения FFmpeg encoding.This - это код, который я использую для получения процентного значения процесса кодирования.FFMPEG (2.5.7) Progress Bar от PHP
<?php
$content = @file_get_contents("with-logo/output.txt");
//echo $content;
if($content) {
preg_match("/Duration: (.*?), start:/", $content, $matches);
$rawDuration = $matches[1];
$ar = array_reverse(explode(":", $rawDuration));
$duration = floatval($ar[0]);
//echo $duration;
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 для лучшего понимания.
Stream mapping:
Stream #0:0 -> #0:0 (mpeg2video (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (pcm_s24le (native) -> aac (native))
Press [q] to stop, [?] for help
frame= 11 fps=0.0 q=0.0 size= 0kB time=00:00:00.41 bitrate= 0.9kbits/s
frame= 22 fps= 21 q=0.0 size= 0kB time=00:00:00.85 bitrate= 0.4kbits/s
frame= 33 fps= 21 q=0.0 size= 0kB time=00:00:01.30 bitrate= 0.3kbits/s
frame= 43 fps= 20 q=0.0 size= 0kB time=00:00:01.69 bitrate= 0.2kbits/s
и этот код не возвращает значение для Duration
и в результате этого я получаю предупреждение PHP и код не вычисляя Текущий процент.
здесь предупреждение PHP, которую я getting-
PHP Warning: Division by zero in /var/www/html/mm/progressbar.php
я думаю, мы можем вычислить процент от time
, но я понятия не имею, как я могу заставить его работать?
или любая помощь для решения проблемы с длительностью.
благодарит за помощь!
Hi @Robbbie! Второй вариант, который вы предложили, я скоро попробую, но теперь для получения значения Duration, я запустил команду вручную в оболочке, которую вы предложили «ffmpeg /tmp/out.mp4 2> & 1 | grep «Продолжительность». и я не получил никакой обратной связи, он просто застрял без ответа. – kunal
В ваших инструкциях отсутствует -i? – Robbie
oh man! я сожалею, я просто пропустил это., ты качаешь спасибо @ Robbie – kunal