php-ffmpeg get video duration
10,734
Solution 1
$ffprobe
->streams($this->videoFile)
->videos()
->first()
->get('duration');
RETURNS the duration. So I have to store that command into a variable. The correct way to get the duration is:
$duration = $ffprobe
->streams($this->videoFile)
->videos()
->first()
->get('duration');
Solution 2
in the README.md is write this code:
$ffprobe = FFMpeg\FFProbe::create();
$duration = $ffprobe
->format('/path/to/video/mp4') // extracts file informations
->get('duration'); // returns the duration property
and work fine.
Solution 3
$file='msd.mp4';
$time = exec("$ffmpeg -i ".$file." 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//");
echo getSecondsFromHMS($time);
function getSecondsFromHMS($time) {
$timeArr = array_reverse(explode(":", $time));
$seconds = 0;
echo '<pre>';print_r($timeArr);echo '</pre>';
foreach ($timeArr as $key => $value) {
if ($key > 2)
break;
$seconds += pow(60, $key) * $value;
}
return (int)$seconds;
}
It is the return duration in seconds.
Author by
swg1cor14
Updated on June 07, 2022Comments
-
swg1cor14 about 2 years
When I try to get the duration of a video using the php-ffmpeg wrapper and ffprobe, I get a huge object instead of just the duration.
$ffprobe = FFMpeg\FFProbe::create(); $ffprobe->format($this->videoFile) ->get('duration');
$this->videoFile is /home/admin/........./5422346433.mp4
So it points to right file and the duration is listed in the giant object down in
[[-show_format-/home/admin/web/admin.simplewebevents.com/public_html/cron/649652027.mp4][1]] => Array ( [0] => FFMpeg\FFProbe\DataMapping\Format Object ( [properties:FFMpeg\FFProbe\DataMapping\AbstractData:private] => Array ( [filename] => /home/admin/web/admin.simplewebevents.com/public_html/cron/649652027.mp4 [nb_streams] => 2 [nb_programs] => 0 [format_name] => mov,mp4,m4a,3gp,3g2,mj2 [format_long_name] => QuickTime / MOV [start_time] => 0.000000 [duration] => 5736.833333 [size] => 668381267 [bit_rate] => 932056 [probe_score] => 100 [tags] => Array ( [major_brand] => mp42 [minor_version] => 0 [compatible_brands] => mp42mp41isomavc1 [creation_time] => 2016-12-04 18:25:58 ) ) ) [1] => ) )
But apparently ->get('duration') doesnt return the duration.
I've also tried with
$ffprobe ->streams($this->videoFile) // extracts streams informations ->videos() // filters video streams ->first() // returns the first video stream ->get('duration');