Как получить оценку времени в FFmpeg с помощью php?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как получить оценку времени в FFmpeg с помощью php?

Сообщение Anonymous »

Я использую FFmpeg в своем проекте для наложения видео с помощью php.

Меня включили в очередь на выполнение команды. Поэтому иногда в очереди много запросов, и их выполнение занимает много времени.

Вот почему мне приходится показывать индикатор выполнения для идентификации пользователя, сколько времени потребуется для создания видео. Для этого сценария мне нужно оценить время.

Может быть, можно вычислить его по другим параметрам, которые отображаются в выходных данных, например, fps, битрейт или скорость.

Есть идеи?

Код: Выделить всё

 //DownloadJob.php;

public function __construct($video,$transparent_img,$output_file)
{
$this->video=$video;
$this->transparent_img = $transparent_img;
$this->output_file = $output_file;
$create_at = date('Y-m-d H:i:s');
$this->status =0;
$this->download_id = base64_encode($video);

DB::beginTransaction();
DB::insert('INSERT INTO jobs_download(download_id,image,video,status,output_video,create_time)
VALUES(?,?,?,?,?,?)',[$this->download_id,$this->video,$this->transparent_img,$this->status,$this->output_file,$create_at]);
DB::commit();
}

public function handle()
{
$video=$this->video;
$transparent_img=$this->transparent_img;
$output_file=$this->output_file;
$ready=1;
$failed=2;

$input_video = $video;
$transparent_img = $transparent_img;

try{
$ffmpeg = "C:\\ffmpeg\\bin\\ffmpeg";
$cmd = $ffmpeg . " -i " . $input_video . " -i " . $transparent_img . " -filter_complex 'overlay' " . $output_file;
//Log::info($cmd);
exec($cmd, $output);

if(file_exists($output_file)){

DB::beginTransaction();
DB::update('UPDATE jobs_download SET status=? WHERE download_id =?',[$ready,$this->download_id]);
$this->status = 1;
DB::commit();

if(file_exists($input_video)){
unlink($input_video);
}

if(file_exists($transparent_img)){
unlink($transparent_img);
}

}else{
Log::error('DownloadJob.php failed()',['download_id'=>$this->download_id]);
DB::beginTransaction();
DB::update('UPDATE jobs_download SET status=? WHERE download_id =? ',[$failed,$this->download_id]);
$this->status = 3;
DB::commit();
}
}catch (\Exception $e){
Log::error('DownloadJob.php failed()',['download_id'=>$this->download_id]);
DB::beginTransaction();
DB::update('UPDATE jobs_download SET status=? WHERE download_id =? ',[$failed,$this->download_id]);
$this->status = 3;
DB::commit();
}
}

public function failed()
{
$failed = 2;
Log::error('DownloadJob.php failed()',['download_id'=>$this->download_id]);
DB::beginTransaction();
DB::update('UPDATE jobs_download SET status=? WHERE download_id =? ',[$failed,$this->download_id]);
$this->status = 3;
DB::commit();
}

public function getResponse()
{
return ['download_id' => $this->download_id,'eta_time_sec' => $eta_time_sec];
}
//FFmpegController.php

Код: Выделить всё

public function generateVideo(Request $request_body)
{
//Overlay file
$transparent_img=Input::file('transparent_img');
//Main file
$video=Input::file('video');
$output_file = $video_name;
//Send in queue for ffmpeg overlay
$job = new DownloadJob($video_name,$image,$output_file);
$data = $this->dispatch($job);

$dl_url = $job->getResponse();//Get response download_id and estimate time in second
print_r($dl_url);


Вывод

Я хочу, чтобы этот ответ был включен в результат вывода.

Код: Выделить всё

   [
'download_id':'NWM1ODAwNDU3NzkxOV92aWRlb19maWxlXzE1NDkyNzExMDkubXA0',
'eta_time_sec':5
]
Как я могу получить оценку времени в секундах из fps, битрейта или скорости, но я понятия не имею..

Подробнее здесь: https://stackoverflow.com/questions/545 ... -using-php
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»