Recommended Free Tools
For an Android or iOS Flutter app, the video_thumbnail package (documented version 0.5.6) can extract a frame as image bytes or save it to a file. Use thumbnailData when you want to display a preview directly, or thumbnailFile when you need a persistent image path. The right package and input method depend on whether your video is a local file, remote URL, bundled asset, or a source on another platform.
Generate a thumbnail from a local video file
Add video_thumbnail to your Flutter project, then pass a local video path to its extraction method. The example below creates JPEG bytes and displays them with Image.memory.
-
Add the dependency to
pubspec.yaml:dependencies: flutter: sdk: flutter video_thumbnail: ^0.5.6 -
Fetch packages:
flutter pub get -
Call the package from an async method. This example assumes
videoFileis aFileyou already obtained, such as from a file picker:import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:video_thumbnail/video_thumbnail.dart'; class VideoPreview extends StatefulWidget { const VideoPreview({super.key, required this.videoPath}); final String videoPath; @override State<VideoPreview> createState() => _VideoPreviewState(); } class _VideoPreviewState extends State<VideoPreview> { Uint8List? thumbnail; bool loading = true; String? error; @override void initState() { super.initState(); _makeThumbnail(); } Future<void> _makeThumbnail() async { try { final bytes = await VideoThumbnail.thumbnailData( video: widget.videoPath, imageFormat: ImageFormat.JPEG, maxWidth: 320, quality: 80, ); if (!mounted) return; setState(() { thumbnail = bytes; loading = false; if (bytes == null || bytes.isEmpty) { error = 'No thumbnail was returned for this video.'; } }); } catch (e) { if (!mounted) return; setState(() { error = 'Could not create thumbnail: $e'; loading = false; }); } } @override Widget build(BuildContext context) { if (loading) return const Center(child: CircularProgressIndicator()); if (error != null) return Text(error!); return Image.memory(thumbnail!, fit: BoxFit.cover); } }
The nullable result is handled explicitly: a failed or unsupported extraction should not be passed to Image.memory as though it were valid bytes. The package API and behavior can vary by version, so check the API used by the version pinned in your lockfile.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →#1 Best Overall
- 【Video Camera as Webcam】: The video camera is useful to take the beautiful photos and share it in your Youtube. It can be used as webcam when the camera connect the computer. Please operate the camera button to choose the “PC CAM” mode.When the “AMCAP ” window is opened,from which shooting object through the camera will be showed on this window. You can have a video call with your families or friends. Please download the software “AMCAP ” before use the webcam function.
- 【Multifunction Camcorder】: 1080P(15fps) Video Resolution, 24M(6000x4500) Image Resolution, image format (JPEG), video format(AVI), 16X digital zoom, camcorder with fill light, 3.0 inch LCD and supports 270°rotation, Anti-shake, Face Capture, Beauty Function, Self-timer and Webcam function, Pause function, USB 2.0, TV Output, Setting Date and Time.
- 【Pause Function】: This video camera supports Pause function,so you can pause the recording when you need,then continue recording again without starting a new one, which makes it easier for you to edit and upload the videos. This video camera included a USB cable,you can connect it directly to the computer to upload videos. This video camera included a AV cable,you can connect it directly to the TV to playback the videos.
- 【Recording While Charging】: The camcorder come with two NP-FV5 batteries. It allows you to keep recording around 60 to 90 minutes when it's fully charged. For the first time use need to charge more than 8 hours. The camcorder support the recording while charging,good to record long videos anytime.
- 【Small and Compact Camcorder】: The camcorder supports SD/SDHC card up to 128GB (not included), just remember to format the SD card before use the camcorder first time. The camcorder support the tripod(not included) connection and the hole is standard size.
Save the thumbnail as an image file
Use thumbnailFile when you need a path for a gallery, upload, cache, or later processing. Supply a destination path; the package example uses path_provider to find a temporary directory.
import 'package:path_provider/path_provider.dart';
import 'package:video_thumbnail/video_thumbnail.dart';
Future<String?> createThumbnailFile(String videoPath) async {
final directory = await getTemporaryDirectory();
final outputPath = '${directory.path}/video-thumb.jpg';
return VideoThumbnail.thumbnailFile(
video: videoPath,
thumbnailPath: outputPath,
imageFormat: ImageFormat.JPEG,
maxWidth: 320,
quality: 80,
);
}
Add path_provider to the project if you use this example. A temporary-directory file is not permanent storage: copy it to an app-managed location if it must survive cleanup of temporary files. Choose unique filenames or remove an earlier file before reusing a fixed path when processing multiple videos.
Choose timestamp, dimensions, format, and quality
The package exposes options that affect which frame is captured and the output image. Exact defaults are package-version-specific; set the values your app relies on rather than assuming a default.
- Timestamp: Set the extraction time in milliseconds with the package’s
timeMsoption. For example, a frame around 2.5 seconds into a clip is 2500 ms. A video shorter than the requested timestamp may not yield the intended frame, so validate or choose a safe point for your media. - Dimensions: Set
maxWidthormaxHeightto limit output size. To preserve the source aspect ratio, begin with one maximum dimension and verify the result on target devices. The package warns that on Android, setting both dimensions scales to both specified values, which may not preserve the original ratio. - Format: The package lists JPEG, PNG, and WebP output through
ImageFormat. Pick a format supported by the image pipeline that consumes the thumbnail. Its package documentation flags a possible iOS performance issue generating WebP with libwebp; profile on actual target devices if WebP is essential. - Quality: Set the quality option to trade image detail against file size for supported formats. Verify how the chosen format interprets quality rather than treating one numeric value as identical across formats.
Generate a thumbnail from a video URL
The package documents URL input on Android and iOS. Pass the remote address as the video value. Encode URLs correctly, particularly when the address contains query parameters or reserved characters. Optional request headers are available for endpoints that require authentication or other request metadata.
Rank #2
- 4K & 64MP Video Camera Camcorder: Capture life in breathtaking detail with 4K Ultra HD recording and vibrant 64MP photos, powered by an advanced high-sensitivity CMOS sensor. Equipped for exploring the beautiful world, this video camera is your perfect companion! Ideal for video recording, travel vlogs, family activities, interviews, studying, and cherishing precious moments
- 18X Digital Zoom & Infrared Night Vision: This 4K camcorder powerful 18x digital zoom brings distant action right to you. Capture clear details of people and landscapes. With the push of “OK” button, activate the IR cut filter. This night vision camcorder delivers high-contrast black & white video in total darkness, providing a clearer image than standard low-light color mode
- 3.0 Inches Touchscreen with 270° Rotation: This camcorder features a brilliant 3-inch touchscreen that puts complete control in your hands. The screen rotates a full 270 degrees, making it a game-changer for vloggers. Easily frame yourself for solo shots, capture high-angle overhead videos, or get creative low-angle perspectives
- Webcam & Remote Control: Instantly transform your camcorder into webcam with a single USB cable. No complex drivers needed. Just connect and ready to go. Elevate your live streams and professional presentations with stunning 4K clarity. This video camera comes with a handy wireless remote to start/stop recording, and take photos without ever touching the device—ideal for solo creators, vloggers, and group shots
- Multifunctional Camcorder: This 4K camcorder is loaded with pro features. Like face detection, video pause, slow motion, continuous shooting, time-lapse, self-timer, recording while charging, date stamp. Resulting in consistently smooth, sharp, and stunning footage in every scene. The two high-capacity batteries and 32GB micro SD card ensure that you won't miss a single beautiful moment in life
final bytes = await VideoThumbnail.thumbnailData(
video: encodedVideoUrl,
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
},
imageFormat: ImageFormat.JPEG,
maxWidth: 320,
quality: 80,
);
Do not put a long-lived secret in a client app unless that exposure is acceptable for your security model. For URLs that expire, require cookies, or need signed access, ensure the URL or headers remain valid for the complete retrieval and extraction operation.
Use a video bundled as a Flutter asset
A Flutter asset key such as assets/clip.mp4 is not the same as a filesystem path. The package’s documented asset example stages the bundled bytes as a temporary file, then passes that file path to thumbnailFile.
import 'dart:io';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
import 'package:video_thumbnail/video_thumbnail.dart';
Future<String?> thumbnailFromAsset() async {
final data = await rootBundle.load('assets/clip.mp4');
final directory = await getTemporaryDirectory();
final videoPath = '${directory.path}/clip.mp4';
final videoFile = File(videoPath);
await videoFile.writeAsBytes(data.buffer.asUint8List(), flush: true);
return VideoThumbnail.thumbnailFile(
video: videoFile.path,
thumbnailPath: '${directory.path}/clip-thumb.jpg',
imageFormat: ImageFormat.JPEG,
maxWidth: 320,
quality: 80,
);
}
Declare the asset under flutter.assets in pubspec.yaml. If the asset is large or this work happens repeatedly, avoid rewriting it on every screen build: stage it once or cache the resulting thumbnail, and clean up temporary files when appropriate.
Select a package based on the platforms you ship
video_thumbnail 0.5.6 documents Android and iOS support. If you need desktop or Web targets, flutter_video_thumbnail_plus 1.0.7 documents a broader platform and input-method matrix. Those are package-publisher declarations, not a guarantee that every SDK, operating system, codec, or dependency-manager combination will work unchanged.
Free tools Windows power users keep installed
One-click scans. No signup required.
Rank #3
- Latest 8K Video Camera with Remote Control : This Video camera features 8K video resolution at 15FPS, with additional options for 6K at 30FPS, 5K at 30FPS, 4K at 30FPS, 1080P at 60FPS/30FPS, 720P at 60FPS/30FPS. With an impressive 88MP image resolution and 18X digital zoom, this camcorder delivers exceptional visuals. The included remote control allows for effortless self-recording and photography from any angle, making it an ideal 8K vlogging camera for bloggers and content creators.
- Experience Smooth and Stable Footage with Our 8K Camcorder : Featuring advanced 6-Axis anti-shake technology for high-precision stabilization. The 3-inch, 270-degree rotatable touch screen allows for effortless self-recording and framing, making it perfect for vlogging and self-blogging. Additionally, the digital video camera's intuitive interface and user-friendly navigation ensure easy operation, so you can focus on capturing stunning 8K video and photos.
- Infrared Night Vision Video Camera with WiFi : Stay connected and share your moments instantly with our 8K Camera's built-in Wi-Fi and companion app "iSmart DV2". Download the app on your Android/iOS device to easily transfer photos/videos, and share them directly to social media platforms like Facebook and YouTube. Additionally, this camera features infrared night vision, allowing you to capture footage in low-light environments, producing clear black and white images even in complete darkness.
- Dual-Functionality and Enhanced Audio : This 8K video camera for YouTube doubles as a high-quality webcam, simply connect via USB and switch to "Webcam" mode for seamless video calling, live streaming, vlogging, and online teaching. The included external X-Y stereo microphone reduces ambient noise and captures clear, stable audio, ensuring professional-grade sound quality for your recordings.
- Versatile camcorders video camera 8k for Every Adventure: This multifunctional camera features a range of creative modes, including continuous shooting, time-lapse, slow motion, and recording while charging. Perfect for capturing life's adventures, whether you're traveling, camping, hiking, or enjoying your favorite sports. Plus, our dedicated team is available to provide technical support, troubleshooting, and answers to any questions you may have after your purchase.
| Package (documented version) | Documented targets and input methods | Notable implementation detail |
|---|---|---|
| video_thumbnail 0.5.6 | Android and iOS; local file paths and video URLs | Provides byte and file methods, with format, size, timestamp, and quality options. Its package page marks the uploader unverified and notes a possible iOS WebP performance issue. |
| flutter_video_thumbnail_plus 1.0.7 | Documents file/data methods on Android, iOS, macOS, and Windows, plus a separate byte-array method on Web | The publisher says iOS/macOS can use Swift Package Manager or CocoaPods, and Windows WebP output falls back to PNG. Verify the behavior in your build and on representative media. |
Compare the precise input you have (path, URL, or bytes), whether the API returns bytes or a file, required formats and controls, platform coverage, dependency integration, and maintenance evidence. Flutter plugins bridge Dart APIs to platform functionality; adding native plugin code may require a full app restart rather than hot reload. See Flutter’s package and plugin guide and plugin development guidance. Check each package’s current changelog and run it against the Flutter, Dart, operating-system, and dependency-manager versions you actually ship.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Troubleshoot thumbnail generation
- The result is null, empty, or cannot be decoded: Confirm the source path exists and is readable, the URL is encoded correctly, and the video is accessible. Try a different timestamp and a common output format such as JPEG, then test with a known-good short clip.
- A remote video cannot be opened: Check that the endpoint is reachable from the device, the URL has not expired, and any required headers are passed. A URL that works in a desktop browser may depend on browser cookies or redirects that the app request does not have.
- The thumbnail is stretched or has an unexpected size: On Android, avoid specifying both maximum dimensions when preserving aspect ratio matters. Start with one maximum dimension and inspect the output on each target platform.
- WebP generation is slow on iOS: The package page notes a possible iOS WebP performance issue. Test on representative iPhones and use JPEG or PNG if WebP does not meet your latency needs.
- The asset path fails: Confirm the asset is listed in
pubspec.yaml, load it withrootBundle, and write its bytes to a temporary file before passing the path to the package. - Native build or plugin changes do not appear: Run a full restart after adding or changing the plugin and review the package’s platform setup instructions. Flutter notes that native plugin code may require a full restart.
- UI frames drop during processing: Flutter’s plugin guidance recommends a helper isolate for longer-running native functions. That is general guidance, not a measured finding about either thumbnail package; profile your own app before deciding whether additional work is needed.
Or skip the browser setup
For a website screenshot rather than a video frame, ScreenshotNeo is a website screenshot API and MCP server. It does not extract a frame from a video file. One GET request returns a screenshot or PDF; see the API documentation.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
ScreenshotNeo accepts cookie banners and removes known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing, and responses identify the page verdict and billing status in headers. Its MCP server gives AI agents tools for screenshots, page information, and PDF capture. The Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.
Sign up free for 1,000 screenshots a month, with no card required.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitchesQuick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

