Процент транскодирования никогда не выходит за пределы 65% php-ffmpeg

редактировать

После некоторых тестов может показаться, что эта ошибка связана с обрезанным видео. Если я возьму 100% видео, то транскодированный процент увеличится до 100%. Если я возьму только 30% видео, то транскодированный процент возрастет до 64-65%.

Вступление

Я использую https://github.com/PHP-FFMpeg/PHP-FFMpeg для моего проекта symfony3. Устанавливается через композитор.

Когда видео закончено транскодированием (когда процент транскодирования достигает 100%), я хотел бы начать другой тип операции с видео, которое я только что создал.

Проблемы

Однако может показаться, что я никогда не получаю 100%, когда снимаю видео. Кажется, каждый раз останавливается на 65%.

    $format->on('progress', function ($video, $format, $percentage) use ($videoExportPath, $temporary_video_path) {
        //This part never goes past 65%...
        dump("$percentage % transcoded");
        if($percentage == 100) {
            //never enters this part..
            dump("$percentage % transcoded");
            $video = $this->ffmpeg->open($videoExportPath);
            $filterConcat = new ConcatVideoFilter();
            $filterConcat->addFile($temporaryVideoPath);
            dump("second video...");
            $video
                ->addFilter($filterConcat)
                ->save($this->createNewMP4Format(), $videoExportPath);
        }
    });

Я посмотрел на lib, чтобы увидеть, что вызывает это, но, к сожалению, я не могу найти никаких указаний. Формат X264 распространяется на класс DefaultVideo, где создаются обработчики прогресса. Вот точная функция, которая делает это.

public function createProgressListener(MediaTypeInterface $media, FFProbe $ffprobe, $pass, $total)
{
    $format = $this;
    $listeners = array(new VideoProgressListener($ffprobe, $media->getPathfile(), $pass, $total));

    foreach ($listeners as $listener) {
        $listener->on('progress', function () use ($format, $media) {
           $format->emit('progress', array_merge(array($media, $format), func_get_args()));
        });
    }

    return $listeners;
}

Вопросы

И да, первое видео, которое я хочу создать, действительно корректно обрезается. Связано ли отсечение видео (уменьшение длины видео) с процентом транскодирования, чтобы он никогда не достигал 100%?

Есть ли более элегантный способ узнать, когда видео завершено транскодированием?


https://github.com/PHP-FFMpeg/PHP-FFMpeg/issues/201

1 ответ

Решение

После некоторых тестов может показаться, что эта ошибка связана с обрезанным видео. Если я возьму 100% видео, то транскодированный процент увеличится до 100%. Если я возьму только 30% видео, то транскодированный процент возрастет до 64-65%.

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

//Where $max is length of the clipped video
//Where $duration is the length of the original video
$temp = ($max*100/$duration);
$percentLimit = (95-ceil($temp));

На данный момент это, кажется, работает довольно хорошо.

    if($percentage == $percentLimit) {
        dump("$percentage % transcoded");
        $ffmpegservice->concatWithOutro($videoExportPath, $videoExportPathFinal, $temporaryVideoPath);

    }

Это не идеально, но это работает.

Другие вопросы по тегам