英文:
How to extract a bitmap from a video?
问题
我正在使用Android Studio开发Java应用程序。我想要一段代码,可以从视频中获取Bitmap图像。我使用绝对路径获取视频。视频的帧率为每秒8帧。
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(absolutePath);
Bitmap bitmap = retriever.getFrameAtTime(); // 这将从视频中获取一个Bitmap图像
我只想从视频中获取Bitmap图像。非常感谢您的帮助。
英文:
I am working on a Java Application on Android Studio. I wanted any code where we can get Bitmap from video. I take video using absolute path. The input from video is 8 FPS.
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(absolutePath);
Just wanted to take Bitmap from video. Any help would be appreciated.
答案1
得分: 1
我尝试了下面的代码,它有效:
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
// 要获取帧的视频的路径
retriever.setDataSource(absolutePath);
} catch (Exception e) {
}
String duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
int duration_millisec = Integer.parseInt(duration); // 毫秒为单位的持续时间
int duration_second = duration_millisec / 1000; // 毫秒转换为秒
int frames_per_second = 30; // 每秒想要获取的帧数
int numeroFrameCaptured = frames_per_second * duration_second;
long frame_us = 1000000 / 30;
capture == "" + numeroFrameCaptured);
for (int i = 0; i < numeroFrameCaptured; i++) {
// 在想要检索帧的时间位置设置时间位置
MEventsManager.getInstance().inject(MEventsManager.IMAGE, retriever.getFrameAtTime(frame_us * i, MediaMetadataRetriever.OPTION_CLOSEST));
}
retriever.release();
英文:
I tried the following code and it worked
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
//path of the video of which you want frames
retriever.setDataSource(absolutePath);
}catch (Exception e) {
}
String duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
int duration_millisec = Integer.parseInt(duration); //duration in millisec
int duration_second = duration_millisec / 1000; //millisec to sec.
int frames_per_second = 30; //no. of frames want to retrieve per second
int numeroFrameCaptured = frames_per_second * duration_second;
long frame_us=1000000/30;
capture=="+numeroFrameCaptured);
for (int i = 0; i < numeroFrameCaptured; i++)
{
//setting time position at which you want to retrieve frames
MEventsManager.getInstance().inject(MEventsManager.IMAGE,retriever.getFrameAtTime(frame_us*i,MediaMetadataRetriever.OPTION_CLOSEST));
}
retriever.release();
答案2
得分: 0
如果您想从视频中获取图像,您可以使用一个名为 FFMPEG 的库,通过在 gradle 中进行实现:
implementation 'com.arthenica:mobile-ffmpeg-min:4.3.1.LTS'
通过使用多个命令,您可以将视频的所有帧转换为图像,或者您也可以获取单个帧。
获取更多信息,请访问:
https://github.com/tanersener/mobile-ffmpeg
如果您只想要将帧显示在 ImageView 中,您可以使用 Glide/Picasso 库。
希望这能帮助到您...!!!
英文:
If you want image from video then you can use library called FFMPEG by implementing in gradle with this:
implementation 'com.arthenica:mobile-ffmpeg-min:4.3.1.LTS'
By using several commands you can convert all frames of video into image or you can get single frame also
for more information please visit:-
https://github.com/tanersener/mobile-ffmpeg
if you want only frame for displaying in imageview then you can use glide/picasso library.
Hope this will Help you..!!!
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论