Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lakshmaji/thumbnail
Thumbnail for a given video using FFMpeg
https://github.com/lakshmaji/thumbnail
centos composer ffmpeg generating-thumbnails laravel laravel-framework multimedia php thumbnail ubuntu1404 ubuntu1604 video watermark
Last synced: 4 days ago
JSON representation
Thumbnail for a given video using FFMpeg
- Host: GitHub
- URL: https://github.com/lakshmaji/thumbnail
- Owner: lakshmaji
- License: mit
- Created: 2016-05-12T12:46:48.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2022-11-24T11:16:24.000Z (about 2 years ago)
- Last Synced: 2025-01-20T09:04:33.963Z (4 days ago)
- Topics: centos, composer, ffmpeg, generating-thumbnails, laravel, laravel-framework, multimedia, php, thumbnail, ubuntu1404, ubuntu1604, video, watermark
- Language: PHP
- Homepage: http://lakshmaji.github.io/Thumbnail
- Size: 87.9 KB
- Stars: 110
- Watchers: 7
- Forks: 25
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Thumbnail
[![Latest Stable Version](https://poser.pugx.org/lakshmajim/thumbnail/v/stable)](https://packagist.org/packages/lakshmajim/thumbnail)
[![Total Downloads](https://poser.pugx.org/lakshmajim/thumbnail/downloads)](https://packagist.org/packages/lakshmajim/thumbnail)
[![Latest Unstable Version](https://poser.pugx.org/lakshmajim/thumbnail/v/unstable)](https://packagist.org/packages/lakshmajim/thumbnail)
[![License](https://poser.pugx.org/lakshmajim/thumbnail/license)](https://packagist.org/packages/lakshmajim/thumbnail)
[![Monthly Downloads](https://poser.pugx.org/lakshmajim/thumbnail/d/monthly)](https://packagist.org/packages/lakshmajim/thumbnail)
[![Daily Downloads](https://poser.pugx.org/lakshmajim/thumbnail/d/daily)](https://packagist.org/packages/lakshmajim/thumbnail)
[![composer.lock](https://poser.pugx.org/lakshmajim/thumbnail/composerlock)](https://packagist.org/packages/lakshmajim/thumbnail)[Wiki on web](http://lakshmaji.github.io/Thumbnail/)
>### INDEX
|Index|Description|
|---|---|
|[What it is](https://github.com/lakshmaji/Thumbnail#what-it-is) |- Introduction|
|[Installing FFMpeg](https://github.com/lakshmaji/Thumbnail#installing-dependency-software) |- Installing dependency software|
|[Installation](https://github.com/lakshmaji/Thumbnail#installation) |- Installing Thumbnail package, Lararavel Integration|
|[Docs](https://github.com/lakshmaji/Thumbnail#method)|- Methods and Description|
|[Generating Thumbnail](https://github.com/lakshmaji/Thumbnail#genearting-thumbnail) |- Generating thumbnail image with this package|
|[Miscellaneous](https://github.com/lakshmaji/Thumbnail#miscellaneous) |- Miscellaneous content regarding method calls|
|[License](https://github.com/lakshmaji/Thumbnail#license) |- License Information|>### What it is
- Generates Thumbnail (image) for a given video
- This uses **FFMpeg**.
- Converts video to WebM format.>### Version
1.4.5
>### Compatibility
**Laravel version** | **Thumbnail version**
-------- | ---
5.6 | 1.4.5
5.5 | 1.4.5
5.4 | 1.4.5
5.2 | 1.4.5 or 1.4.2 or 1.3.0
5.1 | 1.4.5 or 1.4.2 or 1.3.0
5.0 | 1.4.5 or 1.4.2 or 1.3.0**Note:** For **1.4.3** and other **earlier** version documentation refer [here](https://github.com/lakshmaji/Thumbnail/blob/4ec692054a6541bb46eae6802a2b09138ce156b8/README.md)
---
>### Installing dependency softwareThis package relays on [FFMpeg](https://en.wikipedia.org/wiki/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
```bash
sudo apt-get update
sudo apt-get install ffmpeg
```#### Installing FFMpeg on Ubuntu 14.04 LTS
- Add the mc3man ppa
```bash
sudo add-apt-repository ppa:mc3man/trusty-media
```
- Run following command to Update the package list.```bash
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```terminal
sudo apt-get install ffmpeg
```#### Installing FFMpeg on CentOS
- Enable EPEL repository
- for centos 6
```bash
rpm -Uvh http://mirrors.kernel.org/fedora-epel/6/i386/epel-release-6-8.noarch.rpm
```
- for centos 5
```bash
rpm -Uvh http://mirrors.kernel.org/fedora-epel/5/i386/epel-release-5-4.noarch.rpm
```
- for centos 7
```bash
yum install epel-release
```- Check whether EPEL respository is eabled by the following command
```bas
yum repolist
```- Import the official GPG key of Nux Dextop repository:
```bash
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
```bash
rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
```
- centos 7
```bash
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:
```bash
yum repolist
```
- Run following command to install FFMpeg
```bash
yum install ffmpeg
```
#### Installing FFMpeg on Windows
Refer to the following links
[WikiHow](http://www.wikihow.com/Install-FFmpeg-on-Windows)[AdapticeSolutions](http://adaptivesamples.com/how-to-install-ffmpeg-on-windows/)
---
>### Installation- This package is available on packagist
```bash
composer require lakshmaji/thumbnail
```
- Add the Service Provider to **providers** array
```php
Lakshmaji\Thumbnail\ThumbnailServiceProvider::class,
```
- Add the Facade to **aliases** array
```php
'Thumbnail' => Lakshmaji\Thumbnail\Facade\Thumbnail::class,
```
- Try updating the application with composer (dependencies but not mandatory :wink: )
```bash
composer update
```---
---
>### Configurations- Publish the configuration file , this will publish thumbnail.php file to your application **config** directory.
```bash
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
```bash
#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
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```php
$thumbnail_status = Thumbnail::getThumbnail(,,);
``````php
$thumbnail_status = Thumbnail::getThumbnail(,,,);```
| PARAMETER | DESCRIPTION |FIELD |
|:-------------- |:----------------------------------------|:---|
|VIDEO_SOURCE_DIRECTORY | Video resource source path i.e, the name of video along with location where video is present|mandatory|
| THUMBNAIL_STORAGE_DIRECTORY| The destination path to save the generated thumbnail image|mandatory|
| THUMBNAIL_NAME | The name of Image for output|mandatory|
| TIME_TO_TAKE_SCREENSHOT | Time to take screenshot of the video | optional|
thumbnail image| optional|**Note** : Some of the method parameters are deprecated from version 1.4.4. For earlier versions of this package (<=1.4.3) refer [here](https://github.com/lakshmaji/Thumbnail/blob/4ec692054a6541bb46eae6802a2b09138ce156b8/README.md). 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
```php
Thumbnail::getThumbnail($video_path,$thumbnail_path,$thumbnail_image,$time_to_image);
```
- Your config file
``` php
'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)
```php
Thumbnail::getThumbnail($video_path,$thumbnail_path,$thumbnail_image);
```- To convert video to WebM format
```php
$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](https://opensource.org/licenses/MIT)