Java 8 通过JCodec或类似工具将Java 8 BuffereImage转换为MP4
这里是Java8。当我提到JCodec时,我对任何有效的解决方案都持开放态度Java 8 通过JCodec或类似工具将Java 8 BuffereImage转换为MP4,java-8,mp4,bufferedimage,codec,jcodec,Java 8,Mp4,Bufferedimage,Codec,Jcodec,这里是Java8。当我提到JCodec时,我对任何有效的解决方案都持开放态度 在中,它们提供了一个不错的示例,说明了如何将缓冲区图像列表转换为磁盘上的MP4,如下所示: SeekableByteChannel out = null; try { out = NIOUtils.writableFileChannel("/tmp/output.mp4"); // for Android use: AndroidSequenceEncoder AWTSequenceEncod
在中,它们提供了一个不错的示例,说明了如何将
缓冲区图像列表
转换为磁盘上的MP4,如下所示:
SeekableByteChannel out = null;
try {
out = NIOUtils.writableFileChannel("/tmp/output.mp4");
// for Android use: AndroidSequenceEncoder
AWTSequenceEncoder encoder = new AWTSequenceEncoder(out, Rational.R(25, 1));
for (...) {
// Generate the image, for Android use Bitmap
BufferedImage image = ...;
// Encode the image
encoder.encodeImage(image);
}
// Finalize the encoding, i.e. clear the buffers, write the header, etc.
encoder.finish();
} finally {
NIOUtils.closeQuietly(out);
}
我不想写入磁盘上的文件系统资源(例如“/tmp/output.mp4
”),而是想写入内存缓冲区(完全兼容mp4),理想情况下是一个字节[]
或将转换为字节[]
的东西
这可能与JCodec有关吗(可能是
NIOUtils
或类似文件中的某个内容)?您可以创建一个seekablebytechnel
实现,该实现只需读取/写入内部字节缓冲区或字节[]
。或者,由于您使用的是NIO,如果您想避免写入SSD/HDD,可以使用。只需从内存文件系统中打开文件通道
到路径
,对其进行写入,然后读取字节。您可以通过文件通道#open
静态方法之一正常打开文件通道
。但是,请注意,路径必须来自内存中的文件系统
;这意味着您不能使用
的路径#get
或路径#创建路径
。另外,我刚刚意识到JCodec有自己的seekablebytechnel
(出于某种原因),这与java.nio.channels.seekablebytechnel
不同。FileChannel
实现了后者,这意味着您需要使用它。至于ByteBufferSeekableByteChannel
,它与我的意思非常相似,只是它似乎无法调整大小。换句话说,它只能保存由构造过程中传入的ByteBuffer
确定的一组字节数。如果您能够确定ByteBuffer
的容量需要提前多少,那么就没有问题了。@Slaw我想,它使用自己的seekablebytechnel
,因为标准的seekablytechnel
是在Java7中引入的。