Images and the Dynamic Ingest API

This topic explains how to capture or ingest images for a video.

Introduction

You can ingest two categories of images:

  • Primary/default poster and thumbnail images, which are defined in the request body as poster and thumbnail objects (field and syntax details are below)
  • Multilingual variant images, which are defined in an images array of objects (field and syntax details are below)

The multilingual variant images can be of six types:

poster
The poster image is displayed in the Brightcove Player before the user plays the video. It is typically a frame captured from the video, but does not have to be.
thumbnail
The thumbnail image is displayed in playlists, end screens, and so forth. It is typically a frame captured from the video, but does not have to be.
portrait
An image used typically as a poster in portrait mode on phones and other devices. Required for Brightcove Beacon. Details of the specification are in the table below.
square
An image used typically as a channel logo or in grid displays. Required for Brightcove Beacon. Details of the specification are in the table below.
wide
An image used typically as a poster in landscape mode on phones and other devices. Required for Brightcove Beacon. Details of the specification are in the table below.
ultra-wide
An image used typically as a poster on ultra-wide displays such as TVs. Required for Brightcove Beacon. Details of the specification are in the table below.

Specifications

The tables below provide specifications for images.

Primary Image Details
Type Format Aspect Ratio (W/H) Minimum Width (pixels)
Poster png or jpg 16:9 or 4:3 640
Thumbnail png or jpg 16:9 or 4:3 160
Multilingual Variant Image Details
Type Format Aspect Ratio (W/H) Minimum Width (pixels)
poster jpg or png match video none
thumbnail jpg or png match video none
portrait jpg or png 0.6667 (2x3) 500
square jpg or png 1.0 (1x1) 500
wide jpg or png 1.7778 (16x9) 2000
ultra-wide jpg or png 2.3333 21x9 2000

There are two different ways to add primary poster and thumbnail images to your videos using the Dynamic Ingest API:

  • Capture images at the mid-point of the video during transcoding (currently this applies to poster and thumbnail images. Other types must be ingested). Capturing images for the primary poster and thumbnail can be used along with ingested images for multilingual variants.
  • Ingest your own images, either at the same time you ingest the video, or separately. Note that if you ingest images after ingesting the video, you must wait for the video processing to complete before ingesting the images.

Setup

The setup for Dynamic Ingest requests is the same, whether you are ingesting a video, images, a WebVTT file, or all of these:

Request URL
          https://ingest.api.brightcove.com/v1/accounts/{{account_id}}/videos/{{video_id}}/ingest-requests
        
Authentication
Authentication requires an access token passed as a Bearer token in an Authorization header:
          Authorization: Bearer {access_token}
        

Note on S3

If your images will be pulled from a protected S3 bucket, you will need to set a bucket policy to allow Video Cloud to access the files. See Using Dynamic Ingest with S3 for details.

Multilingual variants

You can provide different versions of images to be used for different languages. This is handled by Brightcove Beacon for Brightcove Beacon apps. General implementation in the Brightcove Player currently requires custom development.

The language for an image is specified in the language property detailed in the next section.

Ingest images

Here are the details of adding custom images for your video.

Correct way to send images using Images API

The following instruction is the correct way to ingest poster/thumbnail images using images block via Ingest API:

imagesblock are intended to store Beacon images where customers are able to provide variants and language for each image. The correct way to ingest primary images is using poster and thumbnail objects into main level. See the follow example:


        {
          "master": {
            "url": "{SOURCE_URL}"
          },
          "poster": {
            "url": "https://some.site.com/images/celtic-lullaby-large.png",
            "width": 1400,
            "height": 1400
          },
          "thumbnail": {
            "url": "https://some.site.com/images/celtic-lullaby-large.png",
            "width": 160,
            "height": 90
          }
        }
        
      

Image fields in the request body

As noted above, primary poster and thumbnail images are specified as top-level objects in the request body. Multilingual variant images in the ingest request body are specified as an array of objects. The object properties are detailed in the following tables.

Primary Poster and Thumbnail Images
Property Description Type Required Example
url Public URL where the image can be retrieved String https://some.site.com/images/celtic-lullaby-large.png
width Width of the image in pixels Number 1920
Height Height of the image in pixels Number 1080
Multilingual Image Object Properties
Property Description Type Required Example
url A url that Video Cloud can retrieve the image from string https://mysite.com/videos/video123/images/poster.png
language Language code for the image from the subtags in https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry (default can be set for the account by contacting Brightcove Support); if not included, the default language for the account will be used. string
variant The type for this image: poster | thumbnail | portrait | square | wide | ultra-wide string wide
height number 2160
width number 3840

Sample request body

The sample request body below includes the image fields only. Other ingest fields can be included as well.

{
  "poster": {
    "url": "https://some.site.com/images/celtic-lullaby-large.png",
    "width": 1400,
    "height": 1400
  },
  "thumbnail": {
    "url": "https://some.site.com/images/celtic-lullaby-large.png",
    "width": 160,
    "height": 90
  },
  "images": [
    {
      "url": "https://apis.support.brightcove.com/assets/images/dynamic-ingest/test-images/poster.jpg",
      "variant": "poster",
      "height": 1080,
      "width": 1920
    },
    {
      "url": "https://apis.support.brightcove.com/assets/images/dynamic-ingest/test-images/thumbnail.jpg",
      "variant": "thumbnail",
      "height": 108,
      "width": 292
    },
    {
      "url": "https://apis.support.brightcove.com/assets/images/dynamic-ingest/test-images/square.jpg",
      "language": "de",
      "variant": "square",
      "height": 570,
      "width": 570
    },
    {
      "url": "https://apis.support.brightcove.com/assets/images/dynamic-ingest/test-images/wide.jpg",
      "language": "fr",
      "variant": "wide",
      "height": 1440,
      "width": 2560
    },
    {
      "url": "https://apis.support.brightcove.com/assets/images/dynamic-ingest/test-images/portrait.jpg",
      "language": "es",
      "variant": "portrait",
      "height": 1200,
      "width": 800
    },
    {
      "url": "https://apis.support.brightcove.com/assets/images/dynamic-ingest/test-images/ultra-wide.jpg",
      "language": "hi",
      "variant": "ultra-wide",
      "height": 1646,
      "width": 3840
    }
  ]
}
Sample response

Below is a response to a CMS API Get Video Images request. See Retrieving image data below.

{
  "thumbnail.en": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/5b593403-01a7-4a18-978e-cad13647cf99/292x108/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/5b593403-01a7-4a18-978e-cad13647cf99/292x108/match/image.jpg",
        "height": 108,
        "width": 292
      }
    ]
  },
  "ultra-wide.en": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/48900952-8e0e-4fc6-bd4f-116809195ab7/2000x857/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/48900952-8e0e-4fc6-bd4f-116809195ab7/2000x857/match/image.jpg",
        "height": 857,
        "width": 2000
      }
    ]
  },
  "wide.en": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/111fafb1-d754-49a9-9fc7-04a5637bb3d0/2000x1125/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/111fafb1-d754-49a9-9fc7-04a5637bb3d0/2000x1125/match/image.jpg",
        "height": 1125,
        "width": 2000
      }
    ]
  },
  "portrait.en": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/d6c605ed-11db-45a1-a7a9-beeb7b4ead1d/500x750/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/d6c605ed-11db-45a1-a7a9-beeb7b4ead1d/500x750/match/image.jpg",
        "height": 750,
        "width": 500
      }
    ]
  },
  "poster.en": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/35d3f294-b62e-46e5-874e-c0c85846d80a/1920x1080/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/35d3f294-b62e-46e5-874e-c0c85846d80a/1920x1080/match/image.jpg",
        "height": 1080,
        "width": 1920
      }
    ]
  },
  "square.en": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/1f719d8b-ebe9-4f6a-b5f1-8906b220554f/500x500/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/1f719d8b-ebe9-4f6a-b5f1-8906b220554f/500x500/match/image.jpg",
        "height": 500,
        "width": 500
      }
    ]
  },
  "poster": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/6c9b5fc6-3368-47c5-98a5-a5878224fe5b/1400x1400/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/6c9b5fc6-3368-47c5-98a5-a5878224fe5b/1400x1400/match/image.jpg",
        "height": 1400,
        "width": 1400
      }
    ]
  },
  "thumbnail": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/b56eee50-f593-4d0d-be15-42d5c5c147af/160x90/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/b56eee50-f593-4d0d-be15-42d5c5c147af/160x90/match/image.jpg",
        "height": 90,
        "width": 160
      }
    ]
  },
  "ultra-wide.hi": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/48b1cfee-8579-4d48-9824-93ea2e1cce22/3840x1646/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/48b1cfee-8579-4d48-9824-93ea2e1cce22/3840x1646/match/image.jpg",
        "height": 1646,
        "width": 3840
      }
    ]
  },
  "wide.fr": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/45bf1048-d3fa-4ad3-89f1-1df362b60264/2560x1440/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/45bf1048-d3fa-4ad3-89f1-1df362b60264/2560x1440/match/image.jpg",
        "height": 1440,
        "width": 2560
      }
    ]
  },
  "portrait.es": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/89581e27-38b7-4b1b-85c6-fc624331a72b/800x1200/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/89581e27-38b7-4b1b-85c6-fc624331a72b/800x1200/match/image.jpg",
        "height": 1200,
        "width": 800
      }
    ]
  },
  "square.de": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/12819ec8-4da6-42ae-a67f-aed0424b8d51/570x570/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/3676484086001/4fb9012e-7b20-4744-9fff-512634d7b2a5/12819ec8-4da6-42ae-a67f-aed0424b8d51/570x570/match/image.jpg",
        "height": 570,
        "width": 570
      }
    ]
  }
}

Automatic resizing

When you add custom poster and/or thumbnail images via Studio or the Dynamic Ingest API, by default Video Cloud will resize these to match the image sizes defined in the default Ingest Profile for the account.

Note that resizing and padding are the only modifications Video Cloud or Brightcove Beacon. Images are never cropped.

Capture images

During transcoding, Video Cloud can capture a snapshot from the video at the midpoint and save this as poster and thumbnail images.

For custom ingest profiles, image capture requires that two special renditions be added to the ingest profile that you are using. See Images in ingest profiles below.

You should also set the capture-images flag in your request data to true if you want the poster and thumbnail to be captured from the video during transcoding, but this is the default value if the selected profile includes image renditions. (If there are no image renditions in the profile, the default for capture-images is false.)

Sample request data:

      {
  "master": {
    "url": "https://some.site.com/videos/mp4/Bird_Titmouse.mp4"
  },
  "profile": "multi-platform-standard-static",
  "capture-images": true
}
    

Images in ingest profiles

For poster and thumbnail images only, you must include image renditions in the ingest profile. This is for auto-capture, whether you use it when you ingest the video or decide to later when transcoding it. Image renditions are included in all standard ingest profiles, so this section applies only to custom ingest profiles.

Here are details of how image renditions are specified in ingest profiles.

Property Value
media_type "image"
label "poster" or "thumbnail" (you need a rendition for each)
format "png" or "jpg"
width number (pixels)
height number (pixels)

Here is sample data for the renditions:

{
  "images": [
    {
      "label": "square",
      "height": 500,
      "width": 500
    },
    {
      "label": "ultra-wide",
      "height": 1714,
      "width": 4000
    },
    {
      "label": "wide",
      "height": 2250,
      "width": 4000
    },
    {
      "label": "portrait",
      "height": 3000,
      "width": 2000
    },
    {
      "label": "thumbnail",
      "height": 90,
      "width": 160
    },
    {
      "label": "poster",
      "height": 1080,
      "width": 1920
    }
  ]
}

Retrieving image data

You can retrieve image data using the CMS API.

The CMS API will return the image data in a GET request to https://cms.api.brightcove.com/v1/accounts/{{account_id}}/videos/{{video_id}} or, if you only want the image data, to https://cms.api.brightcove.com/v1/accounts/{{account_id}}/videos/{{video_id}}/images

In either case, the image data in the response will look like this:

{
  "thumbnail": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/jit/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/main/160x90/20s629ms/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/jit/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/main/160x90/20s629ms/match/image.jpg",
        "height": 90,
        "width": 160
      }
    ]
  },
  "poster": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/jit/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/main/1280x720/20s629ms/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/jit/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/main/1280x720/20s629ms/match/image.jpg",
        "height": 720,
        "width": 1280
      }
    ]
  },
  "portrait.es": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/bac8717a-43db-4fa8-a6f0-189c80ee4c4e/800x1200/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/bac8717a-43db-4fa8-a6f0-189c80ee4c4e/800x1200/match/image.jpg",
        "height": 1200,
        "width": 800
      }
    ]
  },
  "thumbnail.en": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/0ce2da4d-ca36-469b-9024-0273d79feeeb/292x108/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/0ce2da4d-ca36-469b-9024-0273d79feeeb/292x108/match/image.jpg",
        "height": 108,
        "width": 292
      }
    ]
  },
  "poster.en": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/a7cb150d-c84a-48e0-9469-5b4ce80fba53/1920x1080/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/a7cb150d-c84a-48e0-9469-5b4ce80fba53/1920x1080/match/image.jpg",
        "height": 1080,
        "width": 1920
      }
    ]
  },
  "square.de": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/22209955-e136-4f17-914c-e19ec4c58886/570x570/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/22209955-e136-4f17-914c-e19ec4c58886/570x570/match/image.jpg",
        "height": 570,
        "width": 570
      }
    ]
  },
  "ultra-wide.hi": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/72fd489f-d978-44ba-8d04-1e33c7c36cef/3840x1646/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/72fd489f-d978-44ba-8d04-1e33c7c36cef/3840x1646/match/image.jpg",
        "height": 1646,
        "width": 3840
      }
    ]
  },
  "wide.fr": {
    "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/4405a5d5-8b9e-4c2b-be71-cf4e2c153e87/2560x1440/match/image.jpg",
    "sources": [
      {
        "src": "https://cf-images.us-east-1.prod.boltdns.net/v1/static/57838016001/ee705e97-3fb5-409c-99d8-703e9f57bd0a/4405a5d5-8b9e-4c2b-be71-cf4e2c153e87/2560x1440/match/image.jpg",
        "height": 1440,
        "width": 2560
      }
    ]
  }
}

Limitations

  • The ingestion system does not allow concurrent jobs on the same video.
  • Currently, image data for the wide, square, portrait, and ultra-wide variants is returned only by the CMS API, not by Playback API video requests.