Contents
On this page

Uploading and encoding - Plugixa Video

Uploading and encoding PRO lets you upload video files straight from the video form. When your server has FFmpeg, the plugin converts each upload into adaptive HLS in the background, so viewers get the best quality for their connection. Without FFmpeg, a file browsers can play is published as uploaded.

Uploading and encoding is part of Pro. The free plugin plays videos you link instead: a YouTube or Vimeo link, a link to an MP4 or HLS file, or an MP4 picked from the WordPress media library. See Video sources.

Uploads are part of the Uploads and transcoding app, on by default in Pro. See App manager.

Upload a file in the video form

  1. Open Videos and click New video, or open an existing video.
  2. Under Video, choose Upload a file.
  3. Drop the file on the box, or click Choose a file.

On a new video, the file becomes a draft at once, named after the file unless you typed a title. The upload starts straight away and shows its progress with a Cancel button.

Limit Value
File types MP4, M4V, MOV, MKV, WEBM and AVI
Largest file 4096 MB by default. Change it with Largest upload in Settings -> Uploads and transcoding.

Files are sent in chunks of up to 8 MB, so the PHP upload limit of your host does not cap the size of a video. A chunk that fails on a network blip is sent again. An upload that was abandoned is cleared by a daily job after a day.

When the upload finishes, the server reads the file’s size, resolution and length, sets Duration (seconds), and makes a poster from a frame 10% into the video if the video has no poster yet.

The Video file panel of a converted video, with the uploaded file’s name, resolution, length and size, the Qualities to generate boxes for 720p, 480p and 360p with their estimated sizes, and three renditions marked Ready

Publish automatically when the video is ready

While the video is a draft, the panel offers Publish automatically when the video is ready. Tick it and leave the page if you like: the video goes live by itself as soon as it can play. If the first quality is still converting, it waits for that quality rather than send the first viewers through the original file.

The label follows the Status you picked: with Unlisted or Private chosen, it reads Make it unlisted automatically when the video is ready or Make it private automatically when the video is ready. If someone changes the status by hand in the meantime, that choice stands. For a creator whose videos need review, the video goes to Pending review instead. See Creators and moderation.

Upload several videos

The Upload several videos screen with three files in the list, one Uploaded with a link to its video, one Uploading with a progress bar and one Waiting with its title field

  1. Open Videos and click Upload several videos.
  2. Tick Publish automatically when the video is ready if each video should go live by itself.
  3. Drop the files on the box, or click Choose files.

Each file becomes a draft named after the file, and the files upload one at a time, because many hosts limit how many PHP requests can run at once. While a file is Waiting, you can change its title. When it is Uploaded, its title links to the video. A file that Failed has Try again.

Keep the browser tab open until every file has uploaded. You can use other admin screens meanwhile. Clear uploaded files from this list tidies the list.

With FFmpeg: adaptive HLS

When FFmpeg is available, conversion starts by itself after each upload, unless you untick Convert videos automatically after upload in Settings -> Uploads and transcoding. Every quality the file allows is queued.

Quality Video bitrate
720p 2800 kbps
480p 1400 kbps
360p 800 kbps

Each quality is encoded as H.264 with AAC stereo audio at 128 kbps, in 6-second segments. A quality higher than the uploaded file is not offered, because it would only be upscaled. A file a few lines short of a quality, such as 1072 lines, still gets that quality.

When browsers can play the uploaded file, the video plays from it until the first quality is ready, then switches to HLS by itself. The player picks the quality for each viewer’s connection, and viewers can also choose one.

Higher quality PRO

Every Pro licence converts to 360p, 480p and 720p, and adds 1080p to Qualities to generate. 1440p and 2160p (4K) need the Pro licence for unlimited sites. A quality above your plan shows greyed out, with “Generated and served up to” under the boxes. After a downgrade or an expired licence, qualities already converted above the new limit are kept but no longer served. See Free vs Pro.

The Video file panel

Part What it does
File line The file name, resolution, length and size, with Replace file
Qualities to generate Tick the qualities you want. Each shows its estimated size.
Transcode with Shown when more than one conversion service is available
Generate Queues the ticked qualities. Estimate shows the total size and time.
Quality rows Each quality with its state: Queued, Encoding…, Ready or Failed
Poster frame at (s) Type a second and click Capture poster to make that frame the poster

A quality that Failed, or that is taking too long, has Try again. The bin icon deletes a quality that is not encoding. Replace file uploads a new file for the same video.

How conversion runs

Conversion never runs during a page view. Each quality is one job in a background queue, and a job may run for up to 6 hours. The queue runs when your site gets traffic, or from a server cron job running WP-Cron. A quality waiting more than 15 minutes, or encoding more than 7 hours, counts as stuck.

Without FFmpeg

Your server cannot convert videos when FFmpeg is not installed, or when the host has disabled PHP’s proc_open(). That is fine:

  • A file browsers can play, such as an MP4 with H.264 video, is ready to publish as soon as it is uploaded. The panel says: “This video is ready to publish and will play as uploaded.” Viewers get one quality, and long or busy videos may load slowly.
  • A file browsers cannot play, such as an MKV or AVI file, cannot be published. Export it as an MP4 (H.264) and upload it again, or use a YouTube, Vimeo or MP4 link.
  • Your browser takes the poster frame instead of the server, when it can play the file.

The original file is streamed through PHP, so each viewer holds a PHP worker while watching. This is why a converted quality always takes over when there is one.

Finding FFmpeg

The plugin uses, in this order:

  1. The PLUGIXA_VIDEO_FFMPEG constant, if you define it in wp-config.php.
  2. FFmpeg location in Settings -> Uploads and transcoding. Only an existing file named ffmpeg (or ffmpeg.exe) is accepted.
  3. ffmpeg on the server’s PATH.

FFprobe is looked for in the same folder, with the same naming. The Server check in the same settings tab shows whether PHP can start programs, FFmpeg, FFprobe, free disk space, the upload chunk size and the background queue. Click Check again after a change. See Settings.

Conversion warnings

When conversion has a problem, a warning appears on the WordPress Dashboard, the Plugins screen and the plugin’s own screens, for users who may change settings:

Warning What to do
Videos are waiting to be converted, but this server can no longer convert them Fix FFmpeg, or choose another conversion service
A video conversion is stuck Ask your host to run WP-Cron from a server cron job, then press Try again on the video
A video conversion failed this week Press Try again. If it fails again, export the file as an MP4 and upload it again.
Only a little disk space is left for videos Shown under 1 GB. Free up space or ask your host for more.

Each warning has Hide for a week. A server without FFmpeg gets no warning by itself: only conversions waiting for it do.

Where the files are stored

Uploads live in wp-content/uploads/plugixa-video/. Each video gets its own folder named after its id and a random string, so a video’s files cannot be guessed from its id:

wp-content/uploads/plugixa-video/
  708-k3j9x2.../
    source.mp4        the uploaded file
    master.m3u8       the list of qualities
    720p/index.m3u8   one playlist per quality
    720p/seg_0000.ts  the 6-second segments

The plugin writes an .htaccess file into this folder that blocks directory listings and direct access to playlists, original files and unfinished uploads. Playlists are served only through a signed link, see Access control. Segments are plain files your web server sends directly.

A video’s folder is deleted when the video is deleted for good, not when it goes to the trash.

nginx

nginx ignores .htaccess files. Add this rule to your site’s server block, so playlists, original uploads and partial uploads cannot be opened directly:

location ~* /uploads/plugixa-video/.*(\.m3u8|\.part|/source\.[^/]*)$ { deny all; }

Bunny Stream

You can also hand conversion and delivery to Bunny Stream instead of your server. See Bunny Stream.

Quick Links

Share