如何获得视频的持续时间 - laravel

时间:2017-07-06 17:24:01

标签: laravel laravel-5 ffmpeg

我希望在上传视频时获取视频的持续时间。 为此,我上传了我的视频:

$video = Carbon::now()->timestamp . '_' .
            $request->file('video')->getClientOriginalName();


        $request->file('video')->move(
            $this->getCorrectPathOnServerAndLocal('/assets/videos/videos'), $video
        );

我的电影上传得很好。 现在我想得到这个视频的持续时间。 我正在使用PHP-FFMpeg

composer require php-ffmpeg/php-ffmpeg
$ffprobe = FFProbe::create(); //error
        dd("test");
        $duration = $ffprobe
            ->format($this->getCorrectPathOnServerAndLocal('/assets/videos/videos').$video) // extracts file informations
            ->get('duration');

但是我收到了这个错误:

  (2/2) ExecutableNotFoundException

Unable to load FFProbe
in FFProbeDriver.php (line 50)
at FFProbeDriver::create(array(), null)in FFProbe.php (line 207)

3 个答案:

答案 0 :(得分:1)

首先由composer require james-heinrich/getid3安装getID3 然后

$getID3 = new \getID3;
$file = $getID3->analyze($video_path);
$duration = date('H:i:s.v', $file['playtime_seconds']);

答案 1 :(得分:0)

我个人创建了一个视频CMS,并找到了使用ID3的最简单方法,如下所示:

public function getDuration($full_video_path)
{
    $getID3 = new \getID3;
    $file = $getID3->analyze($full_video_path);
    $playtime_seconds = $file['playtime_seconds'];
    $duration = date('H:i:s.v', $playtime_seconds);

    return $duration;
}

在我使用ffmpeg之前:

// Get the video duration
$parameters = "2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//";
$cmd_duration_ffmpeg = "$ffmpeg_path -i $full_video_path $parameters";
$duration = shell_exec($cmd_duration_ffmpeg);

这两个选项都可以完美运行,选择最适合您的选项。

答案 2 :(得分:0)

使用FFMPEG PHP库,并使用FFprobe这样获得视频持续时间(以秒为单位):

    $ffprobe = FFProbe::create();
    $duration = $ffprobe->format($request->file('video'))->get('duration');
    $duration = explode(".", $duration)[0];