gpt4 book ai didi

Android从图像列表制作动画视频

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:41:28 24 4
gpt4 key购买 nike

我想通过在两个图像之间应用过渡动画来从图像列表制作动画视频。我在 SO 上发现了很多类似的问题,

Android Screen capturing or make video from images

Android- How to make video using set of images from sd card?

所有类似的 SO 问题都建议使用动画,但我们如何将动画图像存储到视频文件中?是否有任何 Android 库支持此功能来制作图像视频?

最佳答案

Android 不支持适用于 Java SE 的 AWT 的 BufferedBitmap 和 AWTUtil。目前jcodec的Android版本已经集成了SequenceEncoder的方案。您可以从包 org.jcodec.api.SequenceEncoder 中使用它。

这里是使用 jcodec 从一系列位图生成 MP4 文件的解决方案:

try {
File file = this.GetSDPathToFile("", "output.mp4");
SequenceEncoder encoder = new SequenceEncoder(file);

// only 5 frames in total
for (int i = 1; i <= 5; i++) {
// getting bitmap from drawable path
int bitmapResId = this.getResources().getIdentifier("image" + i, "drawable", this.getPackageName());
Bitmap bitmap = this.getBitmapFromResources(this.getResources(), bitmapResId);
encoder.encodeNativeFrame(this.fromBitmap(bitmap));
}
encoder.finish();
} catch (IOException e) {
e.printStackTrace();
}

// get full SD path
File GetSDPathToFile(String filePatho, String fileName) {
File extBaseDir = Environment.getExternalStorageDirectory();
if (filePatho == null || filePatho.length() == 0 || filePatho.charAt(0) != '/')
filePatho = "/" + filePatho;
makeDirectory(filePatho);
File file = new File(extBaseDir.getAbsoluteFile() + filePatho);
return new File(file.getAbsolutePath() + "/" + fileName);// file;
}

// convert from Bitmap to Picture (jcodec native structure)
public Picture fromBitmap(Bitmap src) {
Picture dst = Picture.create((int)src.getWidth(), (int)src.getHeight(), ColorSpace.RGB);
fromBitmap(src, dst);
return dst;
}

public void fromBitmap(Bitmap src, Picture dst) {
int[] dstData = dst.getPlaneData(0);
int[] packed = new int[src.getWidth() * src.getHeight()];

src.getPixels(packed, 0, src.getWidth(), 0, 0, src.getWidth(), src.getHeight());

for (int i = 0, srcOff = 0, dstOff = 0; i < src.getHeight(); i++) {
for (int j = 0; j < src.getWidth(); j++, srcOff++, dstOff += 3) {
int rgb = packed[srcOff];
dstData[dstOff] = (rgb >> 16) & 0xff;
dstData[dstOff + 1] = (rgb >> 8) & 0xff;
dstData[dstOff + 2] = rgb & 0xff;
}
}
}

如果您需要更改 fps,您可以自定义 SequenceEncoder。

关于Android从图像列表制作动画视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10284708/

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