Video Thumb Extractor is a module to extract an image from a video frame from a specific second resizing/cropping it to a given size.
The smallest generated image is 16x16 pixels.
This module is not distributed with the Nginx source. See the installation instructions.
Available on github at nginx-video-thumbextractor-module
This module is considered production ready.
This module depends from some libraries (headers and shared objects) which has to be installed before it:
- avformat >= 53.4.0 (tested versions: 53.4.0, 53.5.0) – commonly distributed with FFmpeg
- avcodec >= 53.7.0 (tested versions: 53.7.0, 53.8.0) – commonly distributed with FFmpeg
- avutil >= 51.9.1 (tested versions: 51.9.1, 51.30.0) – commonly distributed with FFmpeg
- swscale >= 2.0.0 (tested versions: 2.0.0) – commonly distributed with FFmpeg
- jpeg – libjpeg
- MagickWand – commonly distributed with ImageMagick
To install FFmpeg from source with the specified versions follow the steps bellow:
git clone git://git.videolan.org/ffmpeg cd ffmpeg git checkout n0.8.7 -b tag_n0.8.7 ./configure --prefix=/usr --disable-ffserver --disable-ffplay --enable-shared make clean && make make install
By default ImageMagick uses OpenMP to process images in threads.
I recommend to configure/compile ImageMagick using the option —disable-openmp since that is not a good idea use threads inside workers.
This module uses the libraries avcodec and avformat to read the video files. Any supported video format for these libraries will work.
Tested formats was mp4, mov and flv.
Install the above requirements and follow the steps bellow.
# clone the project git clone http://github.com/wandenberg/nginx-video-thumbextractor-module.git NGINX_VIDEO_THUMBEXTRACTOR_MODULE_PATH=$PWD/nginx-video-thumbextractor-module # get desired nginx version (tested with 1.0.x series) wget http://nginx.org/download/nginx-1.0.10.tar.gz # unpack, configure and build tar xzvf nginx-1.0.10.tar.gz cd nginx-1.0.10 # configure nginx specifying the path where are MagickWand headers ./configure --add-module=../nginx-video-thumbextractor-module --with-cc-opt='-I /usr/include/ImageMagick' make # install and finish sudo make install # check sudo /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.0.10 # test configuration sudo /usr/local/nginx/sbin/nginx -c $NGINX_VIDEO_THUMBEXTRACTOR_MODULE_PATH/nginx.conf -t the configuration file $NGINX_VIDEO_THUMBEXTRACTOR_MODULE_PATH/nginx.conf syntax is ok configuration file $NGINX_VIDEO_THUMBEXTRACTOR_MODULE_PATH/nginx.conf test is successful # run sudo /usr/local/nginx/sbin/nginx -c $NGINX_VIDEO_THUMBEXTRACTOR_MODULE_PATH/nginx.conf
location ~ /thumbs(.*) { video_thumbextractor; video_thumbextractor_video_filename $1; video_thumbextractor_video_second $arg_second; video_thumbextractor_image_width $arg_width; video_thumbextractor_image_height $arg_height; }
Assuming that you have a file called video.mp4 on your root folder use a browser to test the following urls:
# get an image from second 10 with the original size http://localhost/thumbs/video.mp4?second=10 # get an image from second 20 with a 50px of height and proportional width keeping video scale http://localhost/thumbs/video.mp4?second=10&height=50 # get an image from second 30 with a 50px of height and 100px of width, the image will be cropped to keep video scale http://localhost/thumbs/video.mp4?second=20&height=50&width=100
syntax: video_thumbextractor
context: location
release version: 0.1.0
Set Video Thumb Extractor as the request handler for the location.
syntax: video_thumbextractor_video_filename filename
default: none
context: http
release version: 0.1.0
The video filename relative to root folder.
This directive is required.
Return a 404 if the video is not found.
syntax: video_thumbextractor_video_second second
default: none
context: http
release version: 0.1.0
The time in seconds where the image should be extracted. The nearest key frame will be used to get the image.
This directive is required.
Return a 400 if the value is not specified.
Return a 404 if the second is not found (the video is shorter than the time specified).
syntax: video_thumbextractor_image_width width
default: 0
context: http
release version: 0.1.0
The width used to generate the image.
This directive is optional.
If only the width is specified the video size will be used as image size.
syntax: video_thumbextractor_image_height height
default: 0
context: http
release version: 0.1.0
The height used to generate the image.
This directive is optional.
If only the height is specified the width will be determined using video scale to keep the aspect.
If both, width and height, are specified the image will suffers a resize and an eventual crop to keep the aspect.
- Initial release