Makes video thumbnails, allows resolution switching, and embeds responsive self-hosted videos and galleries.
Still 100% free, but some advanced features will be converted to premium add-ons in the future. More info in the support forum.
This plugin adds several fields to any video uploaded to the WordPress Media Library. Just choose a few options, make thumbnails, click "Insert into Post" and you'll get a shortcode in the post editor that will embed a flexible, responsive HTML5 video player with Flash fallback for unsupported browsers.
You have the option to use a few different video players:
No matter which player you use, the video will responsively resize to fit the container it's in. If you provide multiple H.264 resolutions, the plugin can automatically select the one closest to the size of the player or a resolution of your choice, and provide a button for users to select the resolution manually. If you have Google Analytics set up on your site, the plugin will automatically send Google Analytics Events when users start, reach 25%, 50%, 75%, and complete watching your videos.
You can also use the plugin to create a popup video gallery. The shortcode uses options similar to the WordPress image gallery shortcode. In its simplest form use the code
[KGVID gallery="true"] to create a gallery of all videos attached to the post. Thumbnail size and video popup size can be set on the plugin settings page or in the shortcode. To make a custom gallery that includes videos that aren't attached to the current post you'll need to determine the video's ID, which is shown under the Video Stats section when viewing the attachment. Switch the "insert" option from "Single Video" to "Video Gallery" and you'll get a number of additional options (all of which are optional). Add a comma-separated list of video IDs in the "Include" field to create a gallery manually. Note: the "Create Gallery" section of the Add Media window is a built-in WordPress function and is only for making image galleries.
If your video can be played natively in your browser, or if you have FFMPEG or LIBAV installed on your server, you can generate thumbnails from your video. Using either the "Generate" or "Randomize" buttons will create an array to choose from. The "Generate" button will always generate thumbnails from the same frames of your video, evenly spaced. If you don't like them, you can randomize the results with the "Randomize" button. If you want to see the first frame of the video, check the "Force 1st Frame Thumbnail" button. You can generate as many or as few as you need (up to 99 at a time). After creating an array of thumbnails you can save them all using the "Save all thumbnails" button.
If you know which frame you want to use for your thumbnail, click "Choose from video..." to select it from the video. This will only work for videos that can be played natively in your browser. If you want really fine control you can enter timecode in the "Thumbnail timecode" field. Use
mm:ss format. Use decimals to approximate frames. For example,
23.5 will generate a thumbnail halfway between the 23rd and 24th seconds in the video.
02:23.25 would be one quarter of the way between the 143rd and 144th seconds.
After you select a thumbnail it will be registered in the WordPress Media Library and added to the video's attachments. Unused thumbnails will be deleted.
In the plugin settings you can set the default maximum video width and height based on the dimensions of your particular template and those values will be filled in when you open the window. If you generate thumbnails, the video display dimensions will be adjusted automatically to match the size and aspect ratio of the video file. You can make further adjustments if you want. There are options to always fill the width of the template or to always set videos to the maximum width setting regardless of their resolution.
If enabled in the plugin settings, Facebook, Twitter, and Schema.org video search engine metadata will be generated for your videos. If your site supports https, your videos can play directly in the Facebook timeline or on Twitter. Twitter requires whitelisting for each domain that provides player cards so you will be required to request whitelisting using the Twitter Card Validator tool. Once you've installed the plugin and enabled the Twitter Cards setting, go to the Twitter Card Validator, enter a secure URL from your site that has a video embedded using this plugin, click "Preview card" and you'll probably see a warning that your site isn't whitelisted. Request whitelisting and Twitter should approve you fairly quickly. Enabling the Facebook or Twitter metadata options will override Jetpack's corresponding metadata whenever a video is embedded on the page. However, your theme or SEO plugins might generate their own metadata that could conflict with this plugin's.
You can add subtitle and caption tracks by choosing properly formatted WebVTT files from the media library or entering a URL directly. Enter the two-letter language code and the label text that will be shown to users. Enabling the "default" option will turn the text track on when the page loads. The WordPress default player does not differentiate between captions and subtitles, but Video.js will show a different icon depending on the selection.
I highly recommend using Handbrake to make a file with H.264 video and AAC audio in an MP4 container before uploading. If you're encoding with Handbrake make sure that "Web Optimized" is checked. Using Apple's Compressor, the "Streaming" setting should be "Fast Start" (not Fast Start - Compressed Header).
The plugin can use FFMPEG or LIBAV to encode videos and make thumbnails if you have one of them installed on your server. You can choose to generate thumbnails and additional video formats automatically whenever a new video is uploaded to the media library, and there are buttons to generate thumbnails and additional video formats for every video already in the media library. If you want most videos to be re-encoded and replaced with a particular format but sometimes want to keep the original video, you can add the suffix '-noreplace' (awesomevid-noreplace.mp4) to your filename and the uploaded video will not be replaced. Other automatic formats will still encode.
By default the plugin looks for FFMPEG in
/usr/local/bin but if the application is installed in a different place on your server, you can point it to the correct place in the plugin settings. Users running WordPress on Windows servers should try using Linux-style paths (with forward slashes instead of backslashes and a forward slash
/ instead of
C:\). Multisite Super Admins must set the FFMPEG path in the Network settings page which will enable FFMPEG throughout the network.
If you have the proper libraries installed on your server, you can choose to replace your uploaded video with your preferred format, and generate as many as seven additional formats depending on your original source. 1080p, 720p, and 360p H.264, same resolution WEBM (VP9 or VP8) and OGV, and a custom format. Different browsers have different playback capabilities. Most desktop browsers can play H.264, and all modern mobile devices can play at least 360p H.264. If you create multiple H.264 resolutions, the highest resolution supported by the device will be served up automatically. The plugin will not upconvert your video, so if you upload a 720p video, it will not waste your time creating a 1080p version. There was a time when it seemed like a good idea to provide OGV or WEBM for some desktop browsers, but Firefox supports native H.264 playback in most operating systems now. I no longer recommend encoding OGV or WEBM unless you're making an open source principled stand against H.264. However, your needs may vary. VP9 WEBM is a next-generation codec not supported by many browsers, but it can make videos much smaller while still retaining quality.
The files will encode in the background and will take some time to complete, depending on your server setup and the length and size of your video. VP9 encoding will take much longer than any other format. The plugin adds a Video Encode Queue menu to the Tools menu. You will see encoding progress, the option to cancel an encoding job, and you should get an error message if something goes wrong. Users on Windows servers may get inconsistent results with the encoding queue.
Encoded H.264 files can be fixed for streaming using "movflags faststart" introduced in recent versions of FFMPEG/LIBAV, or qt-faststart or MP4Box if you have one of them installed on your server and select it in the plugin settings. Without one of these options enabled, FFMPEG/LIBAV will place moov atoms at the end of H.264 encoded files, which in some cases forces the entire file to download before playback can start.
If you want to make OGV, WEBM, or H.264 files available and can't use the FFMPEG encode button, you can upload your own files to the same directory as the original and the plugin will automatically find them. For example, if your main file is awesomevid.mp4, the plugin will look for awesomevid-1080.mp4, awesomevid-720.mp4, awesomevid-360.mp4, awesomevid.webm, awesomevid-vp9.webm, awesomevid.ogv, and awesomevid-custom.mp4 as well. If your videos don't conform to that naming structure, you can manually assign them from the media library. No matter what format your original video is, you can use it in the shortcode and the plugin will attempt to find all compatible formats related to it. For example, you might have an AVI called awesomevid.avi which is not compatible with any browser, but if you have other formats encoded already,
[KGVID]http://yoursite.com/awesomevid.avi[/KGVID] will ignore the incompatible AVI file, but find those other formats and embed them.
If you want to make it easier for users to save your videos to their computers, you can choose to include a link by checking the "Generate Download Link Below Video" button.
Sometimes for various reasons you might need to embed video files that are not saved in the WordPress Media Library. Maybe your file is too large to upload through the media upload form (if it is, I suggest the excellent "Add From Server" plugin), or maybe it's hosted on another server. Either way, you can use the tab "Embed Video From URL" in the Add Media window. Just enter the Video URL manually, and all other steps are the same as the Media Library options. The plugin will look for alternate encoded files in the same directory as the original, but this takes a long time when the video is on another server so it will only check for them once.
To embed videos on other sites you can use code like this.
<iframe src='http://www.kylegilman.net/?attachment_id=2897&kgvid_video_embed[enable]=true' frameborder='0' scrolling='no' width='640' height='360'></iframe>
If you enable oEmbed provider data in the plugin settings, the URL of a post with a video shortcode in it or the URL of the video's attachment page will be converted to an embedded video on sites that allow oEmbed discovery. For example, http://www.kylegilman.net/2011/01/18/video-embed-thumbnail-generator-wordpress-plugin/ is the URL for this plugin on my website, but it has the oEmbed header for the video embedded in it so the URL will be converted to an embedded video on sites with oEmbed discovery enabled. WordPress limits oEmbed providers to an internal whitelist for security reasons. This plugin has an option to enable oEmbed discovery for users with the unfiltered_html capability.
The JW Player 6 plugin has been removed from the WordPress plugin repository and JW Player 7 uses a very different system for embedding videos. JW Player 7 support is not available in this plugin yet. The Strobe Media Playback option hasn't been updated since 2011 and is not recommended, but I'm keeping it around for longtime users of this plugin who don't want to change. Most features of the plugin will work when using Strobe Media Playback, but new features will not be tested with it. Selecting Strobe Media Playback will default to a Flash video player if you're using a Flash-compatible file (flv, f4v, mp4, mov, or m4v). Otherwise it will use the Video.js player as a fallback.
I'm not really a software developer. I'm just a film editor with some time on his hands who wanted to post video for clients and wasn't happy with the current state of any available software. But I want to really make this thing work, so please help me out by posting your feedback on Github.
id="xxx"video attachment ID (instead of using a URL).
videos="x"number of attached videos to display if no URL or ID is given.
orderby="menu_order/title/post_date/rand/ID"criteria for sorting attached videos if no URL or ID is given.
poster="http://www.example.com/image.jpg"sets the thumbnail.
endofvideooverlay="http://www.example.com/end_image.jpgsets the image shown when the video ends.
width="xxx"preferred maximum width in pixels.
height="xxx"preferred maximum height in pixels.
fullwidth="true/false"set video to always expand to 100% of its container.
inline="true/false"allow other content on the same line as the video
volume="0.x"pre-sets the volume for unusually loud videos. Value between 0 and 1.
mute="true/false"sets the mute button on or off.
controlbar="docked/floating/none"sets the controlbar position. Video.js only responds to the "none" option.
pauseothervideos="true/false"video will pause other videos on the page when it starts playing.
preload="metadata/auto/none"indicate how much of the video should be loaded when the page loads.
start="mm:ss"video will start playing at this timecode.
"false"to disable. If this is set, it will override the
embedcode="html code"changes text displayed in the embed code overlay in order to provide a custom method for embedding a video or
view_count="true/false"turns the view count on or off.
caption="Caption"text that is displayed below the video (not subtitles or closed captioning)
description="Description"Used for metadata only.
downloadlink="true/false"generates a link below the video to make it easier for users to save the video file to their computers.
right_click="true/false"allow or disable right-clicking on the video player.
resize="true/false"allow or disable responsive resizing.
auto_res="automatic/highest/lowest"specify the video resolution when the page loads.
pixel_ratio="true/false"account for high-density (retina) displays when choosing automatic video resolution.
schema="true/false"allow or disable Schema.org search engine metadata.
track_src="http://www.example.com/subtitles.vtt_.txt"URL of the WebVTT file.
track_srclang=xxthe track's two-character language code (en, fr, es, etc)
track_label="Track Label"text that will be shown to the user when selecting the track.
track_default="true/false"track is enabled by default.
skin="example-css-class"Completely change the look of the video player. Video.js provides a custom skin designer here.
nativecontrolsfortouch="true/falsedisable Video.js styling and show the built-in video controls on mobile devices. This will disable the resolution selection button.
autohide="true/false"specify whether to autohide the control bar after a few seconds.
playbutton="true/false"turns the big play button overlay in the middle of the video on or off.
streamtype="live/recorded/DVR"I honestly don't know what this is for.
scalemode="letterbox/none/stretch/zoom"If the video display size isn't the same as the video file, this determines how the video will be scaled.
backgroundcolor="#rrggbb"set the background color to whatever hex code you want.
configuration="http://www.example.com/config.xml"Lets you specify all these flashvars in an XML file.
skin="http://www.example.com/skin.xml"Completely change the look of the video player. Instructions here.
gallery="true"turns on the gallery
gallery_thumb="xxx"width in pixels to display gallery thumbnails
gallery_exclude="15,4322"comma separated video attachment IDs. Excludes the videos from the gallery.
gallery_include="65,32,1533"comma separated video attachment IDs. Includes only these videos in the gallery. Please note that include and exclude cannot be used together.
gallery_orderby="menu_order/title/post_date/rand/ID"criteria for sorting the gallery.
gallery_id="241"post ID to display a gallery made up of videos associated with a different post.
gallery_end="close/next"either close the pop-up or start playing the next video when the current video finishes playing.
"false"to disable pagination. Number of video thumbnails to show on each gallery page.
gallery_title="true/false"display the title overlay on gallery thumbnails.
kgvid_video_embed query string any of the following options will modify playback: auto_res, autoplay, default_res, fullwidth, height, mute, nativecontrolsfortouch, pixel_ratio, resize, set_volume, start, width
https://www.kylegilman.net/portfolio-item/bronx-warrants-pilot/?kgvid_video_embedstart=29&kgvid_video_embedautoplay=true autoplays the embedded video and starts 29 seconds in.
Requires: 4.4 or higher
Compatible up to: 4.7.1
Last Updated: 2 weeks ago
Active Installs: 30,000+
5 of 12 support threads in the last two months have been marked resolved.
Got something to say? Need help?