Introduction
You can ingest two categories of images:
- Primary/default poster and thumbnail images, which are defined in the request body as
poster
andthumbnail
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.
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 |
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
andthumbnail
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 anAuthorization
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:
images
block 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.
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 |
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.