gpt4 book ai didi

android - MediaMetadataRetriever getFrameAtTime 仅返回第一帧

转载 作者:行者123 更新时间:2023-11-29 01:38:28 27 4
gpt4 key购买 nike

下面的代码只返回(test.gif)第一帧,并用5个相同的帧(视频第一帧)制作一个gif。

我在 StackOverflow 中阅读了大多数问题,但我无法弄清楚是什么原因导致了这个问题。

此外,根据一些建议,我尝试将 mmRetriever.getFrameAtTimeMediaMetadataRetriever.OPTION_CLOSEST 选项一起使用,但没有成功。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {

Uri vid = data.getData();
videoPath = getPath(vid);

MediaMetadataRetriever mmRetriever = new MediaMetadataRetriever();
mmRetriever.setDataSource(videoPath);
String METADATA_KEY_DURATION = mmRetriever
.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);


ByteArrayOutputStream bos = new ByteArrayOutputStream();

AnimatedGifEncoder encoder = new AnimatedGifEncoder();
encoder.setDelay(30);
encoder.start(bos);

int max = (int) Long.parseLong(METADATA_KEY_DURATION);
Log.i("max",String.valueOf(max));
for (int i=1000000;i<max*1000;i+=1000000) {
Log.i("i",String.valueOf(i));

Bitmap bitmap = mmRetriever.getFrameAtTime(i,MediaMetadataRetriever.OPTION_CLOSEST);

encoder.addFrame(bitmap);


}
encoder.finish();
try {
String filepath = Environment.getExternalStorageDirectory()
+ File.separator + "test.gif";
FileOutputStream outStream = new FileOutputStream(filepath);
outStream.write(bos.toByteArray());
outStream.close();
GifAnimationDrawable big = new GifAnimationDrawable(
new FileInputStream(filepath));

imageview.setImageDrawable(big);
big.setVisible(true, true);

} catch (Exception e) {
e.printStackTrace();
}

}

}

日志返回最大值约5000

最佳答案

来自 this来源:

MediaMetadataRetriever的 getFrameAt 方法需要微秒(1/1000000 秒)而不是毫秒,因此在您的情况下它总是向下舍入到第一帧。

关于android - MediaMetadataRetriever getFrameAtTime 仅返回第一帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26367706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com