- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我从一个星期开始就在使用 xuggle,我写了一个方法来获得一个视频帧,但如果视频很长,这种方法会花费太多时间:
public static void getFrameBySec(IContainer container, int videoStreamId, IStreamCoder videoCoder, IVideoResampler resampler, double sec)
{
BufferedImage javaImage = new BufferedImage(videoCoder.getWidth(), videoCoder.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
IConverter converter = ConverterFactory.createConverter(javaImage, IPixelFormat.Type.BGR24);
IPacket packet = IPacket.make();
while(container.readNextPacket(packet) >= 0)
{
if (packet.getStreamIndex() == videoStreamId)
{
IVideoPicture picture = IVideoPicture.make(videoCoder.getPixelType(), videoCoder.getWidth(), videoCoder.getHeight());
int offset = 0;
while(offset < packet.getSize())
{
int bytesDecoded = videoCoder.decodeVideo(picture, packet, offset);
if (bytesDecoded < 0)
throw new RuntimeException("got error decoding video");
offset += bytesDecoded;
if (picture.isComplete())
{
IVideoPicture newPic = picture;
if (resampler != null)
{
newPic = IVideoPicture.make(resampler.getOutputPixelFormat(), picture.getWidth(), picture.getHeight());
if (resampler.resample(newPic, picture) < 0)
throw new RuntimeException("could not resample video from");
}
if (newPic.getPixelType() != IPixelFormat.Type.BGR24)
throw new RuntimeException("could not decode video as RGB 32 bit data in");
javaImage = converter.toImage(newPic);
try
{
double seconds = ((double)picture.getPts()) / Global.DEFAULT_PTS_PER_SECOND;
if (seconds >= sec && seconds <= (sec +(Global.DEFAULT_PTS_PER_SECOND )))
{
File file = new File(Config.MULTIMEDIA_PATH, "frame_" + sec + ".png");
ImageIO.write(javaImage, "png", file);
System.out.printf("at elapsed time of %6.3f seconds wrote: %s \n", seconds, file);
return;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
else
{
// This packet isn't part of our video stream, so we just
// silently drop it.
}
}
converter.delete();
}
你知道更好的方法吗?
最佳答案
通过阅读您的代码,我发现可以进行一些优化。
您首先阅读整个文件一次,创建字节偏移量和秒数的索引。然后该函数可以从给定的秒数中查找字节偏移量,您可以在该偏移量处解码视频并执行其余代码。
另一种选择是使用您的方法,每次读取整个文件,但不是调用所有重新采样器、newPic 和 java 图像转换器代码,而是首先检查秒数是否匹配。如果他们这样做,则将图像转换为要显示的新图片。
所以
if(picture.isComplete()){
try {
double seconds = ((double)picture.getPts()) / Global.DEFAULT_PTS_PER_SECOND;
if (seconds >= sec && seconds <= (sec +(Global.DEFAULT_PTS_PER_SECOND )))
{
Resample image
Convert Image
Do File stuff
}
关于Java - Xuggle - 获取框架的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6184934/
所以如果我运行: ffmpeg -t 10 -re -i "rtmp://170.93.143.150/rtplive/ app=rtplive/ playpath=e000990f025f00750
我最近从 this link 下载了 Xuggler 教程:帧捕获和视频创建 的代码。 ,我已经在我的项目中添加了运行此代码所需的所有 .jar 文件,但是,当我运行此代码时,出现错误: 这是我的代码
如何使用 xuggle 和 java 将图像数组编码到电影中?我希望帧率为 30 fps。我愿意使用 xuggle 之外的其他框架,但我相信 xuggle 是最简单的。可能是一个新手问题,但无论如何谢
我有一个 mp3 文件和一张图片。我需要用 java 创建一个结合它们的视频。 我正在尝试用 xuggle 来做,但仍然没有结果。 任何人都可以给我任何建议吗? 最佳答案 最后,我找到了解决办法。 我
我正在开发一个将 Hadoop 的 MapReduce 框架与 Xuggle 集成的程序。为此,我正在实现一个 IURLProtocolHandlerFactory 类,该类可读取和写入内存中的 Ha
我从一个星期开始就在使用 xuggle,我写了一个方法来获得一个视频帧,但如果视频很长,这种方法会花费太多时间: public static void getFrameBySec(IContainer
我有这段代码: import com.xuggle.mediatool.IMediaWriter; import com.xuggle.mediatool.ToolFactory; import co
我正在尝试在我的 Android 应用程序中使用 Xuggle 的库。 我已将所有 jar 文件添加到我的应用程序中。当我使用 xuggle 函数时,我在导入所需的 xuggle 包后没有收到任何警告
本文整理了Java中org.openimaj.video.xuggle.XuggleVideo类的一些代码示例,展示了XuggleVideo类的具体用法。这些代码示例主要来源于Github/Stack
我读到了 xuggle图书馆 我试图让 xuggle 库作为单个 jar 文件工作,而无需任何外部使用任何 dll 文件或环境变量 我阅读了安装 xuggler 时出现的所有错误并尝试了所有错误,但仍
我对使用 java 进行图像捕获还很陌生。Xuggle 或 ffmpeg 哪个更好、更容易实现帧捕获和制作具有音频和视频的视频。我看过 xuggle 和 ffmpeg,但无法从两者中获得像样的教程。任
我正在用 Java 编写截屏应用程序。我决定使用 Xuggle 来完成它,并按照 xuggle wiki 上的安装说明进行操作。 我用 %XUGGLE_HOME%\bin 和 %XUGGLE_HOME
我发现了关于 Xuggle昨天让我首先说这是一件了不起的事情。我浏览了所有video和 text教程。 我的第一个问题是以编程方式记录计算机桌面,我解决了这个 this way 。 现在我需要一些不同
我最近开始使用 Xuggle 将各种格式的视频文件转换为相应的 FLV(通过 jwplayer 在我们的网站上播放)。我使用的代码非常简单;基本上他们为基本视频转换教程展示的内容: IMediaRea
我创建了一个基于 Xuggle 的服务器系统,将传入的文件编码为 H264 并对其进行分段。但是,在 Quicktime 中播放视频时,它几乎可以正常工作(有时音频会出现小问题),但是当从一个质量流更
一千分钟,我试图找到一种方法来流式传输多个视频并将它们组合成一个输出。我想用 ffmpeg 或 xuggler 用 ffmpeg cmd 做到这一点。 VirtualDub 和 avis 无法满足我的
我可以通过 xuggle 播放视频,但是当我启动我的程序时,视频在单独的 JFrame 中打开! ,我想在我自己的 Jframe 或 JPanel 中以全屏显示模式实现此播放器,那么我该怎么做?? 我
我正在尝试使用 Xuggle 从本地读取 mov 文件。这给了我以下错误: 30-mag-2011 15.56.55 com.xuggle.ferry.NativeLogger log GRAVE:
当我通过 JWS 启动我的应用程序时出现以下异常。但是当它作为一个没有 JNLP 的独立 Java 应用程序启动时它工作得很好。 Exception in thread "AWT-EventQueu
我有一个应用程序可以捕获屏幕视频并保存到文件中。我让用户能够选择 480、720 和“全屏”视频尺寸。 480会在屏幕上的一个小盒子里录制,720会在一个更大的盒子里录制,当然,“全屏”会在更大的盒子
我是一名优秀的程序员,十分优秀!