Need to pull thumbnails, preview frames, or scene-specific stills from a video? Whether you’re building a media gallery, generating product snapshots, or just improving UX, converting video to images is a common requirement. But doing it manually is time-consuming. Let’s explore how to automate the process and extract high-quality still images programmatically and efficiently.
Hey everyone,
I’m working on a content site where users upload short videos. I’d like to generate still images from each video for use as preview thumbnails or static placeholders.
So here’s my question: How can I convert a video into still images? Specifically, I’m looking for:
- A way to grab a single frame (e.g., at 2 seconds in)
- Bonus if I can extract multiple frames or use AI to pick a good one
- Ideally, something fast, dynamic, and automatable (not just FFmpeg scripting)
I’m already using Cloudinary for image delivery. Can I do this with their platform?
Yes, and you don’t need to write custom FFmpeg scripts or run a batch job to do it.
With Cloudinary, you can dynamically extract still images from any video file using URL-based transformations. No extra setup, no processing delays, just clean, CDN-delivered images, right when you need them.
Let’s walk through it.
It typically refers to:
- Extracting a single frame as a thumbnail or poster
- Generating a series of frames for galleries or previews
- Capturing keyframes for visual summaries
- Using AI to pick meaningful frames (with face detection)
Cloudinary lets you extract a still frame at a specific timestamp using the so (start offset) transformation.
HTML
<img src="https://res.cloudinary.com/demo/video/upload/so_2/sample.jpg" alt="Video Thumbnail" />
Code language: HTML, XML (xml)
so_2
→ Start offset at 2 seconds- The
.jpg
extension tells Cloudinary to render it as an image - Cloudinary automatically picks a high-quality still from that moment
HTML
<img src="https://res.cloudinary.com/demo/video/upload/so_2,w_600,h_400,c_fill/sample.jpg" />
Code language: HTML, XML (xml)
w_600
,h_400
,c_fill
→ Resize and crop the image- Use
g_auto
org_face
to focus on key regions
Need a series of thumbnails? Use the Cloudinary API to request multiple frames from different timestamps.
Example using the Upload API:
Shell
POST /video/upload
{
"public_id": "product_demo",
"eager": [
{ "format": "jpg", "transformation": [ { "start_offset": "3" } ] },
{ "format": "jpg", "transformation": [ { "start_offset": "5" } ] },
{ "format": "jpg", "transformation": [ { "start_offset": "10" } ] }
]
}
Code language: JavaScript (javascript)
Want your stills to center on a face or main subject? Just add g_face
or g_auto
:
HTML
<img src="https://res.cloudinary.com/demo/video/upload/so_2,c_crop,w_300,h_300,g_face/sample.jpg" />
Code language: HTML, XML (xml)
- Cloudinary will scan the frame and crop around the detected face
- Great for profile videos, product closeups, or testimonials
Use Case | How Cloudinary Helps |
Product previews | Extract key frame from demo videos |
Hero banners | Capture high-res still for header images |
Thumbnail grids | Generate stills in consistent size |
Social cards | Overlay text on extracted frame |
Visual search | Tag extracted stills with AI |
Task | Cloudinary Solution |
Extract one frame | Add so_2 to the video URL and use .jpg extension |
Resize/crop thumbnail | Use w_ , h_ , c_ , g_ parameters |
Get multiple frames | Use eager transformations via Upload API |
Auto-detect subject | Use g_face or g_auto in crop |
Optimize delivery | Delivered via global CDN as optimized image |
Cloudinary makes it easy to extract, transform, and deliver still images from video dynamically, without manual editing or heavy scripts.
Generate and customize video thumbnails with just a few clicks. Sign up with Cloudinary to easily enhance the visuals of your videos.