MP4 Video Thumbnail create using php GD
Solution 1
No you can't do this using GD.
Take a look into the Documentation
http://php.net/manual/de/book.image.php
You have only the following imagecreatefrom*
functions:
imagecreatefromgd2
imagecreatefromgd2part
imagecreatefromgd
imagecreatefromgif
imagecreatefromjpeg
imagecreatefrompng
imagecreatefromstring
imagecreatefromwbmp
imagecreatefromwebp
imagecreatefromxbm
imagecreatefromxpm
There Is no video format. So no, it is not possible.
Take a look at FFMpeg
and consider this library:
FFMpeg: https://www.ffmpeg.org/
PHP Library: https://github.com/PHP-FFMpeg/PHP-FFMpeg/
Sure it is not installed in most of shared environments, but if you take a look into the contract of this, you will see, that video hosting is disallowed.
Sure there are other Possibility, but i can't imagine a PHP only way.
Solution 2
Use this simple code:
$video_path = 'D:\xampp\htdocs/test.mp4';
$video_image_dir = 'D:\xampp\htdocs/';
$video_name = 'teat.mp4';
$time_in_seconds = round(1 / 2);
exec("ffmpeg -vframes 1 -ss " . $time_in_seconds . " -i " . $video_path . " " . $video_image_dir . $video_name . ".jpg -y 2> " . $video_image_dir . $video_name . ".txt");
Solution 3
yes it is possible using ffmpeg.
- install ffmpeg in your server.
- check below example code.
extension_loaded('ffmpeg') or die('Error in loading ffmpeg');
// $vid = realpath('./video/Wildlife.wmv');
$video_url = 'http://download.wavetlan.com/SVV/Media/HTTP/H264/Talkinghead_Media/H264_test1_Talkinghead_mp4_480x360.mp4';
$image_filename = 'images/' . time() . ".jpg";
$movie = new ffmpeg_movie($video_url, false);
$frameCount = $movie->getFrameCount();
$capPos = ceil($frameCount / 4);
$frameObject = $movie->getFrame($capPos);
if ($frameObject) {
$frameObject->resize(500, 250, 0, 0, 0, 0);
imagejpeg($frameObject->toGDImage());
} else {
echo 'error';
}
aydcery
Updated on June 04, 2022Comments
-
aydcery almost 2 years
I am using GD image library to upload videos but I can not create any thumbnail, is there any way to create mp4 video file thumbnail using php gb image library?
this is my code; is it possible to entegrate ffmpeg ?
<?php if(isset($_POST)) { ############ Edit settings ############## $ThumbSquareSize = 400; //Thumbnail will be 200x200 $ThumbPrefix = "thumb_"; //Normal thumb Prefix $DestinationDirectory = 'uploads/'; //specify upload directory ends with / (slash) $Quality = 90; //jpeg quality ########################################## //check if this is an ajax request if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])){ die(); } // check $_FILES['ImageFile'] not empty if(!isset($_FILES['ImageFile']) || !is_uploaded_file($_FILES['ImageFile']['tmp_name'])) { die('Something wrong with uploaded file, something missing!'); // output error when above checks fail. } // Random number will be added after image name $RandomNumber = rand(0, 9999999999); $ImageName = str_replace(' ','-',strtolower($_FILES['ImageFile']['name'])); //get image name $ImageSize = $_FILES['ImageFile']['size']; // get original image size $TempSrc = $_FILES['ImageFile']['tmp_name']; // Temp name of image file stored in PHP tmp folder $ImageType = $_FILES['ImageFile']['type']; //get file type, returns "image/png", image/jpeg, text/plain etc. //Let's check allowed $ImageType, we use PHP SWITCH statement here switch(strtolower($ImageType)) { case 'video/mp4': break; default: die('Unsupported File!'); //output error and exit } //PHP getimagesize() function returns height/width from image file stored in PHP tmp folder. //Get first two values from image, width and height. //list assign svalues to $CurWidth,$CurHeight list($CurWidth,$CurHeight)=getimagesize($TempSrc); //Get file extension from Image name, this will be added after random name $ImageExt = substr($ImageName, strrpos($ImageName, '.')); $ImageExt = str_replace('.','',$ImageExt); //remove extension from filename $ImageName = preg_replace("/\\.[^.\\s]{3,4}$/", "", $ImageName); //Construct a new name with random number and extension. $NewImageName = $ImageName.'-'.$RandomNumber.'.'.$ImageExt; $pageurl = 'http://'.@$_SERVER['HTTP_HOST'].strtr(dirname($_SERVER['SCRIPT_NAME']), '\\', '/').''; //set the Destination Image $thumb_DestRandImageName = $DestinationDirectory.$ThumbPrefix.$NewImageName; //Thumbnail name with destination directory $DestRandImageName = $DestinationDirectory.$NewImageName; // Image with destination directory //Resize image to Specified Size by calling resizeImage function. if(move_uploaded_file($_FILES['ImageFile']['tmp_name'], $DestinationDirectory.$NewImageName )) { //Create a square Thumbnail right after, this time we are using cropImage() function if(!resizeImage($CurWidth,$CurHeight,$ThumbSquareSize,$thumb_DestRandImageName,$Quality,$ImageType)) { echo 'Error Creating thumbnail'; } /* We have succesfully resized and created thumbnail image We can now output image to user's browser or store information in the database */ $variable = <<<XYZ <div class="kingimgupload"> <iframe src="$pageurl/uploads/$NewImageName" alt="Resized Image"></iframe> <img src="$pageurl/uploads/$ThumbPrefix$NewImageName" alt="Resized Image"> </div> XYZ; echo $variable; /* // Insert info into database table! mysql_query("INSERT INTO myImageTable (ImageName, ThumbName, ImgPath) VALUES ($DestRandImageName, $thumb_DestRandImageName, 'uploads/')"); */ }else{ die('Resize Error'); //output error } } // This function will proportionally resize image function resizeImage($CurWidth,$CurHeight,$MaxSize,$DestFolder,$SrcImage,$Quality,$ImageType) { //Check Image size is not 0 if($CurWidth <= 0 || $CurHeight <= 0) { return false; } //Construct a proportional size of new image $ImageScale = min($MaxSize/$CurWidth, $MaxSize/$CurWidth); $NewWidth = ceil($ImageScale*$CurWidth); $NewHeight = ceil($ImageScale*$CurHeight); $NewCanves = imagecreatetruecolor($NewWidth, $NewHeight); // Resize Image if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight)) { switch(strtolower($ImageType)) { case 'video/mp4': imagepng($NewCanves,$DestFolder); break; default: return false; } //Destroy image, frees memory if(is_resource($NewCanves)) {imagedestroy($NewCanves);} return true; } }
-
Hartmut Pfarr almost 9 yearsusing ffmpeg is clever :-)