lakshmaji/thumbnail

Thumbnails for videos

1.4.51 2017-10-19 03:36 UTC

This package is auto-updated.

Last update: 2024-12-08 18:50:21 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License Monthly Downloads Daily Downloads composer.lock

Wiki on web

INDEX

What it is

  • Generates Thumbnail (image) for a given video
  • This uses FFMpeg.
  • Converts video to WebM format.

Version

1.4.5

Compatibility

Note: For 1.4.3 and other earlier version documentation refer here

Installing dependency software

This package relays on FFMpeg, A complete, cross-platform solution to record, convert and stream audio and video i.e, Multimedia .

Installing FFMpeg on 16.04 (Xenial Xerus) LTS

  • Run following command to install FFMpeg

    sudo apt-get update
    sudo apt-get install ffmpeg

Installing FFMpeg on Ubuntu 14.04 LTS

  • Add the mc3man ppa

    sudo add-apt-repository ppa:mc3man/trusty-media
  • Run following command to Update the package list.

    sudo apt-get update
    sudo apt-get update sudo apt-get dist-upgrade
  • Now FFmpeg is available to be installed with apt , Run this command

    sudo apt-get install ffmpeg
    

Installing FFMpeg on CentOS

  • Enable EPEL repository

    • for centos 6

         rpm -Uvh http://mirrors.kernel.org/fedora-epel/6/i386/epel-release-6-8.noarch.rpm
    • for centos 5

         rpm -Uvh http://mirrors.kernel.org/fedora-epel/5/i386/epel-release-5-4.noarch.rpm
    • for centos 7

         yum install epel-release
  • Check whether EPEL respository is eabled by the following command

       yum repolist
  • Import the official GPG key of Nux Dextop repository:

       rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
Nux Dextop is a third-party RPM repository which contains many popular desktop and multimedia related packages (e.g., Ardour, Shutter, etc) for CentOS, RHEL and ScientificLinux. Currently, Nux Dextop repository is available for CentOS/RHEL 6 and 7.
  • Install Nux Dextop with yum command as follows.

    • centos 6

      rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
    • centos 7

      rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
  • Now verify that Nux Dextop repository is successfully installed:

       yum repolist
  • Run following command to install FFMpeg

       yum install ffmpeg

Installing FFMpeg on Windows

Refer to the following links

WikiHow

AdapticeSolutions

Installation

  • This package is available on packagist
    composer require lakshmaji/thumbnail
  • Add the Service Provider to providers array
Lakshmaji\Thumbnail\ThumbnailServiceProvider::class,
  • Add the Facade to aliases array
'Thumbnail' => Lakshmaji\Thumbnail\Facade\Thumbnail::class,
  • Try updating the application with composer (dependencies but not mandatory 😉 )
  composer update

Configurations

  • Publish the configuration file , this will publish thumbnail.php file to your application config directory.
    php artisan vendor:publish
  • Configure the required FFMpeg configurations.
  • FFMpeg will autodetect ffmpeg and ffprobe binaries. If you want to give binary paths explicitly, you can configure them in .env file.
  • You can specify the output image dimensions in .env file. (dimensions array parameters)
  • Add watermark or playback button url to watermark arry aviable in thumbnail.php
  • Or you can configure them from laravel .env file, the sample watermark resource configurations in .env file
#Thumbnail image dimensions
THUMBNAIL_IMAGE_WIDTH  = 320
THUMBNAIL_IMAGE_HEIGHT = 240

#Watermark image
WATERMARK_IMAGE = true
WATERMARK_PATH  = /var/www/html/thumb/storage/watermark/p.png

#Custom FFMPEG binaries path
FFMPEG_BINARIES = true
FFMPEG_PATH     = /opt/local/ffmpeg/bin/ffmpeg
FFPROBE_PATH    = /opt/local/ffmpeg/bin/ffprobe
FFMPEG_TIMEOUT  = 3600
FFMPEG_THREADS  = 12

This ensures that all the generated thumbnails with watermarks are having fixed dimensions

Generating Thumbnail

The following example illustrates the usage of Thumbnail package

<?php 

namespace Trending\Http\Controllers\File;

use Carbon;
use Thumbnail;
use Illuminate\Http\Request;
use Trending\Http\Controllers\Controller;


/**
 * -----------------------------------------------------------------------------
 *   ThumbnailTest - a class illustarting the usage og Thumbnail package 
 * -----------------------------------------------------------------------------
 * This class having the functionality to upload a video file 
 * and generate corresponding thumbnail
 *
 * @since    1.0.0
 * @version  1.0.0
 * @author   lakshmaji 
 */
class ThumbnailTest extends AnotherClass
{
  public function testThumbnail()
  {
    // get file from input data
    $file             = $this->request->file('file');

    // get file type
    $extension_type   = $file->getClientMimeType();
    
    // set storage path to store the file (actual video)
    $destination_path = storage_path().'/uploads';

    // get file extension
    $extension        = $file->getClientOriginalExtension();


    $timestamp        = str_replace([' ', ':'], '-', Carbon::now()->toDateTimeString());
    $file_name        = $timestamp;
    
    $upload_status    = $file->move($destination_path, $file_name);         

    if($upload_status)
    {
      // file type is video
      // set storage path to store the file (image generated for a given video)
      $thumbnail_path   = storage_path().'/images';

      $video_path       = $destination_path.'/'.$file_name;

      // set thumbnail image name
      $thumbnail_image  = $fb_user_id.".".$timestamp.".jpg";
      
      // set the thumbnail image "palyback" video button
      $water_mark       = storage_path().'/watermark/p.png';

      // get video length and process it
      // assign the value to time_to_image (which will get screenshot of video at that specified seconds)
      $time_to_image    = floor(($data['video_length'])/2);


      $thumbnail_status = Thumbnail::getThumbnail($video_path,$thumbnail_path,$thumbnail_image,$time_to_image);
      if($thumbnail_status)
      {
        echo "Thumbnail generated";
      }
      else
      {
        echo "thumbnail generation has failed";
      }
    }
  }
}
// end of class ThumbnailTest
// end of file ThumbnailTest.php  

METHOD

$thumbnail_status = Thumbnail::getThumbnail(<VIDEO_SOURCE_DIRECTORY>,<THUMBNAIL_STORAGE_DIRECTORY>,<THUMBNAIL_NAME>);
$thumbnail_status = Thumbnail::getThumbnail(<VIDEO_SOURCE_DIRECTORY>,<THUMBNAIL_STORAGE_DIRECTORY>,<THUMBNAIL_NAME>,<TIME_TO_TAKE_SCREENSHOT>);

Note : Some of the method parameters are deprecated from version 1.4.4. For earlier versions of this package (<=1.4.3) refer here. The watermark and output image (thumbnail image) dimensions can be configured from app/config.php file.

MISCELLANEOUS

  • To generate the thumbnail image ( screen shot of video) with playback button
    • Your controller class
    Thumbnail::getThumbnail($video_path,$thumbnail_path,$thumbnail_image,$time_to_image);
    • Your config file
    'watermark' => [
            'image' => [
                'enabled' => env('WATERMARK_IMAGE', true),
                'path'    => env('WATERMARK_PATH', 'http://voluntarydba.com/pics/YouTube%20Play%20Button%20Overlay.png'),
            ],
            'video' => [
                'enabled' => env('WATERMARK_VIDEO', false),
                'path'    => env('WATERMARK_PATH', ''),
            ],
    ],
  • To generate the thumbnail image ( screen shot of video)
  Thumbnail::getThumbnail($video_path,$thumbnail_path,$thumbnail_image);
  • To convert video to WebM format
            $video_path = $destination_path.'/'.$file_name; // source video path
                        $clipped_video  = $destination_path.'/'.'clipped_'.$file_name; // converted video file
 
Thumbnail::clipWebM($video_path,$clipped_video);

LICENSE

MIT