对于想了解在python中从视频源创建视频缩略图的读者,本文将是一篇不可错过的文章,我们将详细介绍在python中从视频源创建视频缩略图怎么做,并且为您提供关于android–从视频网址获取视频的缩略
对于想了解在python中从视频源创建视频缩略图的读者,本文将是一篇不可错过的文章,我们将详细介绍在python中从视频源创建视频缩略图怎么做,并且为您提供关于android – 从视频网址获取视频的缩略图、android – 如何从资产文件夹中的mp4文件创建视频缩略图、android-image – 从路径创建视频缩略图、Android-setImageBitmap(bmp)在创建视频缩略图后返回null的有价值信息。
本文目录一览:- 在python中从视频源创建视频缩略图(在python中从视频源创建视频缩略图怎么做)
- android – 从视频网址获取视频的缩略图
- android – 如何从资产文件夹中的mp4文件创建视频缩略图
- android-image – 从路径创建视频缩略图
- Android-setImageBitmap(bmp)在创建视频缩略图后返回null
在python中从视频源创建视频缩略图(在python中从视频源创建视频缩略图怎么做)
我有一个视频文件的网址,我想为每个视频源网址生成缩略图。我正在使用Django。
我的应用程序这样做:
1. Crawl the some webpage
2. Extract all the video link from it.
3. If there are thumbnails,get those thumbnails.
4. if not thumbnails:
#here I need to generate video thumbnails from the
#links I extracted in 2nd step.
有什么方法可以执行此操作而无需下载完整的视频并生成缩略图。
如果我下载每个视频,则将浪费大量带宽并需要大量时间。
谢谢
android – 从视频网址获取视频的缩略图
解决方法
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()); out.write(byteArray); out.close();
android – 如何从资产文件夹中的mp4文件创建视频缩略图
我在从资产文件夹中的mp4文件创建缩略图时遇到问题.尝试输入不同的资产路径但没有效果.我该如何解决?
那是我的适配器代码:
VideoEntry video = videos.get(position);
holder.txtTitle.setText(video.getTitle());
holder.imgIcon.setimageBitmap(ThumbnailUtils.createVideoThumbnail("file:///android_asset/videos/Core/Superman.mp4", Thumbnails.MICRO_KIND));
怎么了?
解:
AssetManager am = getAssets();
InputStream ims = am.open("images/" + category + "/" + item.replace(" ", "_").replace(".mp4", ".png").toLowerCase());
Drawable d = Drawable.createFromStream(ims, null);
holder.imgIcon.setimageDrawable(d);
解决方法:
ThumbnailUtils.createVideoThumbnail()只查询MediaStore中的现有缩略图,或强制MediaStore创建它(如果它不存在).这意味着您无法为MediaStore不可用的视频文件创建缩略图,因为它是应用程序的资产,而不是SD卡上的实际文件.您可以将文件解压缩到SD卡,或者只是在另一个应用程序中提供自己创建的缩略图.希望这可以帮助.
android-image – 从路径创建视频缩略图
唯一可行的方法是使用视频的ID.我的问题是我需要使用视频路径,但我找不到办法做到这一点. (没有方法适用于所有Android版本.)
我需要一个适用于大于2.0的所有版本的解决方案就足够了.
你可以帮帮我吗?先感谢您!
解决方法
Android-setImageBitmap(bmp)在创建视频缩略图后返回null
如何解决Android-setImageBitmap(bmp)在创建视频缩略图后返回null?
我使用ThumbnailUtils.createVideoThumbnail()
函数已经有好几年了,但是突然之间我不明白为什么它停止工作了。我有这样的视频路径(用VideoCompressor库压缩后得到):
/storage/emulated/0/com.xscoder.appname/media/videos/VIDEO_20200918_145357.mp4
这是我的videoToSendURL
变量。
因此,我使用以下代码显示视频的缩略图:
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(videoToSendURL,MediaStore.Images.Thumbnails.MINI_KIND);
if (thumb != null) {
Log.i(TAG,"Thumb: " + thumb.getByteCount());
myImageView.setimageBitmap(thumb);
} else { Log.i("Something went wrong."); }
Logcat打印出:
THUMB: 294912
但是该应用程序崩溃了,我得到了以下致命异常:
Attempt to invoke virtual method ''void android.widget.ImageView.setimageBitmap(android.graphics.Bitmap)'' on a null object reference
我假设我的thumb
位图不为空,因为Logcat返回了它的byteCount数据,并且我知道myImg
不为空,我已经在onCreate()中声明了它。
-更新-
我真正需要做的是创建一个视频缩略图以将其上传到服务器,所以这是我使用的代码:
外部VideCompressor类,代码位于公共类XServerSDK扩展了Application {}
public static class VideoCompressor extends AsyncTask<String,String,String> {
@SuppressLint("StaticFieldLeak")
Context ctx;
VideoCompressor(Context context){ ctx = context; }
@Override protected void onPreExecute() {
super.onPreExecute();
showHUD(ctx);
Toast.makeText(ctx,"Compressing Video...",Toast.LENGTH_LONG).show();
}
@Override
protected String doInBackground(String... paths) {
String filePath = null;
try { filePath = KplCompressor.with(ctx).compressVideo(paths[0],paths[1]);
} catch (URISyntaxException e) { e.printstacktrace();
Log.i(TAG,"ERROR ON VIDEO COMPRESSOR: " + e.getMessage());
}
return filePath;
}
@Override
protected void onPostExecute(String compressedFilePath) {
super.onPostExecute(compressedFilePath);
File imageFile = new File(compressedFilePath);
float length = imageFile.length() / 1024f; // Size in KB
String videoSize;
if(length >= 1024) { videoSize = length / 1024f + " MB";
} else { videoSize = length + " KB"; }
videoToSendURL = compressedFilePath;
Log.i(TAG,"COMpressed VIDEO -> URL: " + videoToSendURL + " -> SIZE: " + videoSize);
// HERE I CALL MY FUNCTION THAT''S IN MY Messages ACTIVITY
new Messages().uploadFiles();
}
}
在消息活动中:
void uploadFiles() {
// Video
XsuploadFile(videoToSendURL,"video.mp4",(Activity)ctx,new XServerSDK.XSFileHandler() {
@Override public void done(final String vidURL,String e) {
if (vidURL != null) {
Log.i(TAG,"VIDEO URL: " + vidURL);
// Create VideoThumbnail
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(videoToSendURL,MediaStore.Images.Thumbnails.MINI_KIND);
if (thumb != null) {
Log.i(TAG,"videoToSendURL: " + videoToSendURL);
Log.i(TAG,"THUMB: " + thumb.getByteCount());
// VideoThumb
String imgPath = getFilePathFromURI(getimageUri(thumb,ctx),ctx);
Log.i(TAG,"imgPath: " + imgPath);
XsuploadFile(imgPath,"image.jpg",(Activity) ctx,new XServerSDK.XSFileHandler() { @Override public void done(final String thumbURL,String e) {
if (thumbURL != null) {
Log.i(TAG,"VIDEO THUMB URL: " + thumbURL);
if (vidURL.contains("upload_max_filesize")) {
hideHUD();
simpleAlert("The uploaded file exceeds the upload_max_filesize directive and cannot be uploaded.",ctx);
} else {
fileType = "video";
sendMessage(thumbURL,vidURL,"","");
}
// error
} else { hideHUD(); simpleAlert(e,ctx);
}}});// ./ XsuploadFile
} else { hideHUD(); simpleAlert("Something went wrong,try again.",ctx); }
// error
} else { hideHUD(); simpleAlert(e,ctx); }
}});// ./ XsuploadFile
}
这是我从Uri获取真实路径的代码:
//-----------------------------------------------
// MARK - GET URI OF A STORED IMAGE
//-----------------------------------------------
public static Uri getimageUri(Bitmap bm,Context ctx) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG,100,bytes);
String path = MediaStore.Images.Media.insertimage(ctx.getContentResolver(),bm,"image",null);
return Uri.parse(path);
}
//-----------------------------------------------
// MARK - GET REAL PATH FROM URI
//-----------------------------------------------
public static String getFilePathFromURI(Uri uri,Context ctx) {
@SuppressLint("Recycle")
Cursor cursor = ctx.getContentResolver().query(uri,null,null);
assert cursor != null;
cursor.movetoFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
最后,致命异常:
java.lang.NullPointerException: Attempt to invoke virtual method ''android.content.ContentResolver android.content.Context.getContentResolver()'' on a null object reference
at android.content.Contextwrapper.getContentResolver(Contextwrapper.java:103)
at com.xscoder.hi.XServerSDK.getimageUri(XServerSDK.java:1253)
at com.xscoder.hi.Messages$16.done(Messages.java:1403)
因此,在这种情况下,代码在到达以下位置时会崩溃:
String imgPath = getFilePathFromURI(getimageUri(thumb,ctx);
以前从未发生过,也许是因为我正在从uploadFiles()
类中调用VideoCompressor
函数吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
我们今天的关于在python中从视频源创建视频缩略图和在python中从视频源创建视频缩略图怎么做的分享就到这里,谢谢您的阅读,如果想了解更多关于android – 从视频网址获取视频的缩略图、android – 如何从资产文件夹中的mp4文件创建视频缩略图、android-image – 从路径创建视频缩略图、Android-setImageBitmap(bmp)在创建视频缩略图后返回null的相关信息,可以在本站进行搜索。
本文标签: