本小蛋 2022-04-20 00:59 采纳率: 100%
浏览 27
已结题

javacv 生成视频缩略图总是打印视频信息

我想用javacv生成缩略图,但是这有个问题让人很恼火:程序运行时没有问题,但是当程序结束时就会打印如下视频信息,从九点多研究到现在,还没搞清楚是啥情况,求告知!!

img

错误信息如下:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Users\24686\Videos\Captures\QQ录屏20211219201536.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf57.83.100
  Duration: 00:03:16.92, start: 0.000000, bitrate: 42727 kb/s
    Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1918x1078 [SAR 1:1 DAR 137:77], 42394 kb/s, 21.33 fps, 24.67 tbr, 90k tbn, 25 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 328 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

程序如下:

    public static void main(String[] args) {
        String dir = "C:\\Users\\24686\\Videos\\Captures\\";
        try {
            VideoImgUtil.createVideoImg(
                    new File(dir,"QQ录屏20211219201536.mp4"),
                    new File(dir,"QQ录屏20211219201536.png"),
                    7);
        } catch (FrameGrabber.Exception e) {
            System.out.println("xxxxxxxxxx");
        }
    }
    /**
     * 创建视频缩略图
     * @param video 视频文件
     * @param target 存放地址
     * @param offset 偏移帧数,从offset开始
     */
    public static void createVideoImg(File video, File target, int offset) throws FrameGrabber.Exception {
        FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(video);
        ff.start();
        int ffLength = ff.getLengthInFrames();
        int i = 0;
        Frame f;
        while (i < ffLength) {
            i++;
            f = ff.grabImage();
            if((i>offset) &&  (f.image != null)){
                doExecuteFrame(f,target);
                break;
            }
        }
        ff.close();
    }

    /**
     * 截取缩略图
     */
    private static void doExecuteFrame(Frame f, File target) {
        if (null == f || null == f.image) {
            return;
        }
        Java2DFrameConverter converter = new Java2DFrameConverter();
        BufferedImage bi = converter.getBufferedImage(f);
        try {
            ImageIO.write(bi, "png", target);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

  • 写回答

1条回答 默认 最新

  • BCS-点心 2022-04-20 09:34
    关注

    这个没用过,但是你可以通过断点调试的方式,查看下在哪一步做了视频信息输出的操作,把这一步取消掉就可以

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月28日
  • 已采纳回答 4月20日
  • 修改了问题 4月20日
  • 创建了问题 4月20日

悬赏问题

  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架