public function PHPVideoToolkit::extractFrame in Video 7
Same name and namespace in other branches
- 7.2 libraries/phpvideotoolkit/phpvideotoolkit.php5.php \PHPVideoToolkit::extractFrame()
* Extracts exactly one frame * * @access public * @uses $toolkit->extractFrames *
Parameters
string $frame_timecode A timecode (hh:mm:ss.fn) where fn is the frame number of that second: * @param integer|boolean $frames_per_second The frame rate of the movie. If left as the default, false. We will use PHPVideoToolkit::getFileInfo() to get * the actual frame rate. It is recommended that it is left as false because an incorrect frame rate may produce unexpected results. * @param integer $timecode_format The format of the $extract_begin_timecode and $extract_end_timecode timecodes are being given in. * default '%hh:%mm:%ss' * - %hh (hours) representative of hours * - %mm (minutes) representative of minutes * - %ss (seconds) representative of seconds * - %fn (frame number) representative of frames (of the current second, not total frames) * - %ms (milliseconds) representative of milliseconds (of the current second, not total milliseconds) (rounded to 3 decimal places) * - %ft (frames total) representative of total frames (ie frame number) * - %st (seconds total) representative of total seconds (rounded). * - %sf (seconds floored) representative of total seconds (floored). * - %mt (milliseconds total) representative of total milliseconds. (rounded to 3 decimal places) * Thus you could use an alternative, '%hh:%mm:%ss:%ms', or '%hh:%mm:%ss' dependent on your usage. * @param boolean $check_frame_exists Makes an explicit check to see if the frame exists, default = true. * Thanks to Istvan Szakacs for suggesting this check. Note, to improve performance disable this check.
File
- libraries/
phpvideotoolkit/ phpvideotoolkit.php5.php, line 1981
Class
Code
public function extractFrame($frame_timecode, $frames_per_second = false, $frame_timecode_format = '%hh:%mm:%ss.%fn', $check_frame_exists = true) {
// get the file info, will exit if no input has been set
if ($check_frame_exists || $frames_per_second === false) {
$info = $this
->getFileInfo();
if ($info === false || isset($info['video']) === false) {
// the input has not returned any video data so the frame rate can not be guessed
return $this
->_raiseError('extractFrame_video_info_404');
}
}
// are we autoguessing the frame rate?
if ($frames_per_second === false) {
if (isset($info['video']['frame_rate']) === false) {
// the input has not returned any video data so the frame rate can not be guessed
return $this
->_raiseError('extractFrame_video_frame_rate_404');
}
$frames_per_second = $info['video']['frame_rate'];
}
// check if frame exists
if ($check_frame_exists) {
if ($info['video']['frame_count'] < $this
->formatTimecode($frame_timecode, $frame_timecode_format, '%ft', $frames_per_second)) {
// the input has not returned any video data so the frame rate can not be guessed
return $this
->_raiseError('extractFrame_video_frame_count');
}
}
// format the frame details if the timecode format is not already ok.
/*
if($frame_timecode_format !== '%hh:%mm:%ss.%ms')
$frame_timecode = $this->formatTimecode($frame_timecode, $frame_timecode_format, '%hh:%mm:%ss.%ms', $frames_per_second);
}
*/
$this->_single_frame_extraction = 1;
// we will limit the number of frames produced so the desired frame is the last image
// this way we limit the cpu usage of ffmpeg
// Thanks to Istvan Szakacs for pointing out that ffmpeg can export frames using the -ss hh:mm:ss[.xxx]
// it has saved a lot of cpu intensive processes.
$this
->extractFrames($frame_timecode, $frame_timecode, $frames_per_second, 1, '%hh:%mm:%ss.%ms', false);
// register the post tidy process
// $this->registerPostProcess('_extractFrameTidy', $this);
}