用Javacv,ffmpeg将图片合成为视频

用Javacv,ffmpeg将图片合成为视频

转自烂代码网:【Javacv示例】用Javacv,ffmpeg将图片合成为视频

https://www.trashcode.cn/post/d/9b7505de-5693-4a65-9e4a-c413c641b25f

步骤为:

读取图片库图片,用ffmpeg创建recorder

将读取到的图片转换为IplImage,用创建的recorder进行记录

生成视频

/**

    * 通过图片创建视频

    * @return

    */

    public String createVideoFromPhoto()

    {

        //图片路径,指向图片目录

        String imgFolder = videoFolder + "imggen\\emerge\\";

        String videoFormat = "mp4";

        String videoGenFolder = videoFolder + "videogen\\";

        String videoName = "vCreateFromPhoto";

        String videoGenPath = videoGenFolder + videoName + "." + videoFormat;

        MediaTool.tryDelete(videoGenPath);


        //用FFmpeg提供的 recorder 记录图片帧生成视频

        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(videoGenPath, 640, 480);

        try {

            // recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);

            // recorder.setVideoCodec(avcodec.AV_CODEC_ID_FLV1);

            //设置编码格式

            recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);

            recorder.setFormat(videoFormat);

            // recorder.setFormat("mov,mp4,m4a,3gp,3g2,mj2,h264,ogg,MPEG4");

            recorder.setFrameRate(30);

            //recorder.setPixelFormat(0); // yuv420p

            recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);

            recorder.start();

            //图片转换器

            OpenCVFrameConverter.ToIplImage conveter = new OpenCVFrameConverter.ToIplImage();

            File file = new File(imgFolder);

            File[] flist = file.listFiles();

            String imgPath;

            // 循环所有图片

            org.bytedeco.opencv.opencv_core.IplImage image;


            org.bytedeco.opencv.opencv_core.IplImage imageOther=null;


            for (int i = 0; i < flist.length; i++) {

                imgPath=imgFolder+flist[i].getName();

                //image=opencv_imgcodecs.cvLoadImage(imgPath);

                //加载图片

                imageOther= cvLoadImage(imgPath);

                for (int j = 0; j < 30; j++)

                    //按照帧率30进行记录

                    recorder.record(conveter.convert(imageOther));

                //recorder.record(conveter.convert(image));

                //opencv_core.cvReleaseImage(image);

            }

            opencv_core.cvReleaseImage(imageOther);

            recorder.stop();

            recorder.release();

            //输出视频路径

            LOGGER.info(videoGenPath);

        } catch (Exception e) {

            LOGGER.error("", e);

        }

        return videoGenPath;

    }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。