Home » Android » android – Get thumbnail image of video from video url

android – Get thumbnail image of video from video url

Posted by: admin June 15, 2020 Leave a comment


Is it possible to get the thumbnail image from a video Url? I need to thumbnails of videos in a list view.

How to&Answers:

Yes its possible to get the thumbnail of a video using ThumbnailUtils.

FileOutputStream out;
File land=new File(Environment.getExternalStorageDirectory().getAbsoluteFile()
                +"/portland.jpg");// image file use to create image u can give any path.
Bitmap bitmap=ThumbnailUtils.createVideoThumbnail(filePath, MediaStore.Video.Thumbnails.FULL_SCREEN_KIND);//filePath is your video file path.
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        byte[] byteArray = stream.toByteArray();

        out=new  FileOutputStream(land.getPath());


If you are specifically asking about youtube videos then there are automatically 4 generated images by Youtube.


Standard Image sizes

Player Background Thumbnail (480×360 pixels)

Start Thumbnail (120×90 pixels)

Middle Thumbnail (120×90 pixels)

End Thumbnail (120×90 pixels)

High Quality Thumbnail (480×360 pixels)

Medium Quality Thumbnail (320×180 pixels)

Normal Quality Thumbnail (120×90 pixels)

Standard Definition Thumbnail (640×480 pixels)

Maximum Resolution Thumbnail (1920×1080 pixels)


Try ThumbnailUtils, to get video bitmap from file path



It is possible to get thumbnail image of video from video url.

If your video type is Vimeo follow below steps:

1)Suppose your Video Url is:

2)Get Video Id From Url : eg. 17314292

3)Call WS with Video id and XMl format

You will get “thumbnail_small”,”thumbnail_medium”,”thumbnail_large” in xml format for video thumb from video id

If your video type is YouTube follow below steps:

1)Video Url :

2)Get Video Id From Url : eg. Nl2iMF0yKW8

3)Replace video id in this url

NOTE:Just replace your id here.


It is working in my case

Uri videoUri = data.getData();
                String selectedPathVideo="";
                selectedPathVideo = ImageFilePath.getPath(getApplicationContext(), videoUri);
                Log.i("Image File Path", ""+selectedPathVideo);

                try {
                    Bitmap thumb = ThumbnailUtils.createVideoThumbnail(selectedPathVideo, MediaStore.Video.Thumbnails.MICRO_KIND);


                } catch (Exception e) {

The Support File

public class ImageFilePath {
     * Method for return file path of Gallery image
     * @param context
     * @param uri
     * @return path of the selected image file from gallery
    public static String getPath(final Context context, final Uri uri)

        //check here to KITKAT or new version
        final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;

        // DocumentProvider
        if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {

            // ExternalStorageProvider
            if (isExternalStorageDocument(uri)) {
                final String docId = DocumentsContract.getDocumentId(uri);
                final String[] split = docId.split(":");
                final String type = split[0];

                if ("primary".equalsIgnoreCase(type)) {
                    return Environment.getExternalStorageDirectory() + "/" + split[1];
            // DownloadsProvider
            else if (isDownloadsDocument(uri)) {

                final String id = DocumentsContract.getDocumentId(uri);
                final Uri contentUri = ContentUris.withAppendedId(
                        Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));

                return getDataColumn(context, contentUri, null, null);
            // MediaProvider
            else if (isMediaDocument(uri)) {
                final String docId = DocumentsContract.getDocumentId(uri);
                final String[] split = docId.split(":");
                final String type = split[0];

                Uri contentUri = null;
                if ("image".equals(type)) {
                    contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                } else if ("video".equals(type)) {
                    contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                } else if ("audio".equals(type)) {
                    contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

                final String selection = "_id=?";
                final String[] selectionArgs = new String[] {

                return getDataColumn(context, contentUri, selection, selectionArgs);
        // MediaStore (and general)
        else if ("content".equalsIgnoreCase(uri.getScheme())) {

            // Return the remote address
            if (isGooglePhotosUri(uri))
                return uri.getLastPathSegment();

            return getDataColumn(context, uri, null, null);
        // File
        else if ("file".equalsIgnoreCase(uri.getScheme())) {
            return uri.getPath();

        return null;

     * Get the value of the data column for this Uri. This is useful for
     * MediaStore Uris, and other file-based ContentProviders.
     * @param context The context.
     * @param uri The Uri to query.
     * @param selection (Optional) Filter used in the query.
     * @param selectionArgs (Optional) Selection arguments used in the query.
     * @return The value of the _data column, which is typically a file path.
    public static String getDataColumn(Context context, Uri uri, String selection,
                                       String[] selectionArgs) {

        Cursor cursor = null;
        final String column = "_data";
        final String[] projection = {

        try {
            cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
            if (cursor != null && cursor.moveToFirst()) {
                final int index = cursor.getColumnIndexOrThrow(column);
                return cursor.getString(index);
        } finally {
            if (cursor != null)
        return null;

     * @param uri The Uri to check.
     * @return Whether the Uri authority is ExternalStorageProvider.
    public static boolean isExternalStorageDocument(Uri uri) {
        return "com.android.externalstorage.documents".equals(uri.getAuthority());

     * @param uri The Uri to check.
     * @return Whether the Uri authority is DownloadsProvider.
    public static boolean isDownloadsDocument(Uri uri) {
        return "com.android.providers.downloads.documents".equals(uri.getAuthority());

     * @param uri The Uri to check.
     * @return Whether the Uri authority is MediaProvider.
    public static boolean isMediaDocument(Uri uri) {
        return "com.android.providers.media.documents".equals(uri.getAuthority());

     * @param uri The Uri to check.
     * @return Whether the Uri authority is Google Photos.
    public static boolean isGooglePhotosUri(Uri uri) {
        return "com.google.android.apps.photos.content".equals(uri.getAuthority());


To get thumbnail from the URL, i only got one solution till now,
You have to use This library

It Supports file, http, https, mms, mmsh and rtmp protocols


It Supports aac, acc+, avi, flac, mp2, mp3, mp4, ogg, 3gp and more! formats (audio and video):


It’s very important to identify the components of a problem. I’d actually say you have two separate problems:

  1. Downloading a file from an URL.

  2. Creating a thumbnail image from an incomplete video file.

Look into those two separately, you’ll find plenty of information.


It is possible to get a thumbnail from a video file or url using FFMPEG.

FFMPEG must be built using the NDK (or you can find some Android built FFMPEG binaries). Here is a GitHub project to build FFMPEG:


You can then include the FFMPEG binaries with your app and execute FFMPEG from code in your app to generate an image from the video (local or URL) using a command like:

ffmpeg -i videosite.com/video.flv -ss 00:00:15.000 -vframes 1 thumbnail_out.png

One thing to consider is at what seek time (option -ss) you grab the thumbnail for it to be a meaningful image that represents the video.