用Java从视频中获取缩略图

2024-03-12

我想从 servlet 或任何其他服务器端 Java 方法中的视频创建缩略图。

视频文件上传到服务器上,上传后应创建缩略图。

我的问题不是创建缩略图,而是仅创建一个或一定数量的缩略图。

到目前为止我的代码:

public class Test {
    public static void main(String[] args) throws IOException, InterruptedException, IM4JavaException {
        createThumbnail(new File("00-50-C2-1D-7F-85_005.avi"), 512);
    }

    private static void createThumbnail(File sourceImage, int width) throws IOException,
        InterruptedException, IM4JavaException {
        ConvertCmd cmd = new ConvertCmd();
        String destinationFileName = sourceImage.getName() + "_" + width + "_" + "thumb.png";
        File thumbNailFile = new File(destinationFileName);
        if (!thumbNailFile.exists()) {
            IMOperation op = new IMOperation();
            op.addImage(sourceImage.toString());
            op.thumbnail(width);
            op.addImage(destinationFileName);
            cmd.run(op);
        }
    }
}

这里的问题是:为视频中的每一帧创建一个缩略图。在我的 21,012 段测试视频中,创建了超过 1000 个缩略图。

有没有办法从视频中创建缩略图XJava 中的秒或帧?

编辑1: 我还尝试将 FFMpeg 与 com.day.cq.dam.handler.ffmpeg.FFMpegWrapper 用作 Maven 依赖项的 FFMpegWrapper 一起使用:

   <dependency>
      <groupId>com.day.cq.dam</groupId>
      <artifactId>cq-dam-video</artifactId>
      <version>5.6.2</version>
    </dependency>

与班级:

public class Test2 {
    public static void main(String[] args) throws IOException {
        String videoName = "Roentgen_A_VisarioG2_005.avi";
        File videoFile = new File(videoName);
        testFFMpeg(videoFile); // FFMpeg

        // lets try VideoImageSource
        VideoImageSource viSource = new VideoImageSource(videoFile);
        viSource.setMediaTime(10);
        BufferedImage thumb = viSource.getImage();
        File output = new File(videoName + "_thumb.png");
        ImageIO.write(thumb, "png", output);
    }

    public static void testFFMpeg(File videoFile) throws IOException {
        FFMpegWrapper wraper = new FFMpegWrapper(videoFile);
        int length = (int) wraper.getInputDuration() / 1000 / 2;
        BufferedImage[] thumbnail = wraper.getThumbnails(10, length);
        if (thumbnail == null) {
            System.out.println("[ERROR] no thumbnail created!");
            return;
        }
        ImageIO.write(thumbnail[0], "png", new File(videoFile.getAbsolutePath() + "_thumb.png"));
    }
}

还有视频图像源取自:https://code.google.com/p/vitalopensource/source/browse/trunk/src/com/vtls/opensource/image/VideoImageSource.java https://code.google.com/p/vitalopensource/source/browse/trunk/src/com/vtls/opensource/image/VideoImageSource.java不起作用。 使用 FFMpegWrapper (http://docs.adobe.com/docs/en/cq/5-6/javadoc/com/day/cq/dam/handler/ffmpeg/FFMpegWrapper.html http://docs.adobe.com/docs/en/cq/5-6/javadoc/com/day/cq/dam/handler/ffmpeg/FFMpegWrapper.html)我没有收到任何BufferedImage (getThumnbails()回报null)并且使用 VideoImageSource 我收到错误: 无法处理格式:H264、1536x1024、FrameRate=50.0、Length=4722688 0 个额外字节 未能实现:com.sun.media.PlaybackEngine@5defbbf

错误:无法实现 com.sun.media.PlaybackEngine@5defbbf 线程“main”中的异常 java.lang.IllegalArgumentException:图像 == 空!在 javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925) 在 javax.imageio.ImageIO.getWriter(ImageIO.java:1591) 处 javax.imageio.ImageIO.write(ImageIO.java:1520) 在 testVideos.Test2.main(Test2.java:37)

test2-class 中的任何方法都不起作用,并且类测试为我提供了每个帧的缩略图...:(


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Java从视频中获取缩略图 的相关文章

随机推荐

  • 迁移到 tomcat 7 后启动时出现 java.lang.IllegalArgumentException

    将 jbilling www jbilling org 移至 tomcat 7 后 它不再启动并在启动时抛出以下异常 java lang IllegalArgumentException taglib definition not cons
  • Jquery 中的文本突出显示与音频同步

    我需要同步许多网页上的文本和音频 播放音频时 文本应逐短语突出显示 而不是逐字或逐字符突出显示 因此仅在短语开头才需要同步 我不想使用仅 Flash 的解决方案 而更愿意使用对 HTML 更友好的解决方案 我想结合使用两个插件 JPlaye
  • 单行for循环构建字典?

    我正在构建一个字典 稍后我会将其转换为 JSON 字符串 我这样构造它 data for smallItem in bigList data smallItem smallItem 我怎样才能使 for 循环第一行 您可以使用听写理解 ht
  • Maven中如何处理生成源的依赖关系?

    在过去的几天里 我一直在尝试使用以下命令将 REST API 客户端的代码生成到我的项目中 openapi generator maven plugin 然而 Maven 失败了compile 一旦意识到生成的代码刚刚引入的第三方依赖项尚未
  • 使 zsh 从文件中获取完整参数

    zsh很棒 但它的完成系统非常多样化 并且文档缺乏好的示例 是否有用于完成特定应用程序的模板 补全将从文件中获取其匹配数据 并用换行符分隔 我尝试修改我的一个旧示例 该示例将匹配数据 实时 cat zsh completers jazzup
  • Java8 - 显式类型如何匹配一种变体 - 而不是其他类型?

    我有一个简单的片段如下 我提到this https jira mongodb org browse JAVA 2010 List
  • 使用 Javascript / Jquery 滚动到页面上的特定位置[重复]

    这个问题在这里已经有答案了 可以使用以下命令移动到页面上的某个位置 elementId 我怎样才能使用 Javascript Jquery 做同样的事情 当调用 JS 函数时 我想滚动到该页面上的特定位置 经过多次谷歌搜索后 我发现你只需要
  • ruby: `read': File.read 处的参数无效 -(Errno::EINVAL)

    我正在做一个简单的脚本来检查所有文件的 crc require zlib exit if Object const defined Ocra files Dir glob File open dir txt a do file file p
  • 了解触摸事件

    我正在尝试让我的一些库与触摸设备一起使用 但我很难弄清楚它们是如何支持的以及它们是如何工作的 基本上有5个触摸事件 https developer mozilla org en US docs DOM Touch events 但移动浏览器
  • C#中访问内存地址

    我正在与 ActiveX 组件交互 该组件为我提供内存地址和字节数 如何编写 C 程序来访问从给定内存地址开始的字节 有没有一种方法可以本地实现 或者我必须与 C 接口 ActiveX 组件和我的程序是否共享相同的内存 地址空间 您可以使用
  • THREE.BufferGeometry - 访问面索引和面法线

    在 BufferGeometry 中 有没有一种方法可以访问面索引和法线而不转换为几何图形 手头的几何体是由 Threejs 编辑器创建的 SphereBufferGeometry 我只需要读取面部索引和法线 而不需要修改它们 Buffer
  • Google 结账通知确认失败

    我有一个被调用的回调 url 我可以处理它 但是 Google 不会处理我的确认 这一切都在EnvironmentType Sandbox 在 Google 结帐 集成控制台 中 我收到以下消息 我们在处理您的通知确认时遇到错误 我们得到的
  • 使用 ItemTouchHelper 时,如何在拖动时取消对 RecyclerView 中项目的拖动?

    背景 我试图拥有一个具有不同视图类型的 RecyclerView 但具有拖放功能以及单击和长按操作的能力 它与 电话 应用程序类似 您可以在其中更改收藏夹项目的顺序 在 电话 应用程序上 当您长按某个项目时 会立即出现上下文菜单 如果继续拖
  • 配置器中的组合数量

    我被要求编写一个例程来决定产品配置器中可能的组合数量 配置器非常简单 尽管它具有比这更多的功能 但它可以建模为多个 单选组 如 UI 控件 其中必须选择 n 个选项之一 唯一可以使用的约束是规则 如果选择了一个选项 则不能选择另一个选项 所
  • Pandas 两个分组的 DataFrame 列的简单关联

    有没有一种好方法来获取两个分组的 DataFrame 列的简单关联 看来无论熊猫怎样 corr 函数想要返回一个相关矩阵 例如 i pd MultiIndex from product A B C np arange 1 11 1 name
  • 如果 url 不包含某些字符串,则 htaccess 重定向

    我想将所有传入请求重定向到另一个网址 如果它不包含 和 admin 我需要它用于 angular js 但我有 admin 和 php 例如 http example com link to article http example com
  • JavaScript 检测/浏览器统计

    这个问题已经被问过几次了 但我认为仍然值得与你们核实以获得更多意见 我的所有网站都使用 Google Analytics 进行统计 由于它依赖于 JavaScript 我认为检查有多少人在其浏览器中启用 禁用了 JS 是很重要的 我记得我经
  • 如何从 Azure 数据工厂连接到 Firebird/InterBase (Syntess) 数据库?

    在 ADF 中 我创建了一个管道 源是 ODBC 表或查询 下一步是创建链接服务 集成运行时已创建并选择 如下所示 现在问题来了 我应该输入什么连接字符串 尝试与Server 192 168 1 35 Database dbname DSN
  • Tomcat - 如何指定可以在 server.xml 中扩展的属性

    目前 我的 server xml 中有
  • 用Java从视频中获取缩略图

    我想从 servlet 或任何其他服务器端 Java 方法中的视频创建缩略图 视频文件上传到服务器上 上传后应创建缩略图 我的问题不是创建缩略图 而是仅创建一个或一定数量的缩略图 到目前为止我的代码 public class Test pu