javacv opencv 多图片合成视频 并加入mp3的音频 控制视频秒数

本人eclipse开发java,准备用的opencv进行合成视频,经查找需要javacv的支持。

于是找到最新的opencv-3.4.1,然后下载了对应的java支持javacv1.4.1

1、下载opencv、javacv

    进入opencv官网下载opencv-3.4.1(https://ayera.dl.sourceforge.net/project/opencvlibrary/opencv-win/3.4.1/opencv-3.4.1-vc14_vc15.exe 大概172M),再从(http://www.softpedia.com/get/Programming/Other-Programming-Files/JavaCV.shtml 大概390M)下载 javacv1.4.1的各环境支持

(如果需要可以再下载例子来看。opencv-3.4.1(https://codeload.github.com/opencv/opencv/zip/3.4.1 大概87M))

2、配置环境

    解压opencv,解压javacv (eclipse、tomcat、jdk这两个就不用再说了吧)

    配置opencv的路径,在Path增加指向opencv (本人是64位系统,我的指向路径是C:\opencv\opencv\build\x64\vc15\bin;C:\opencv\opencv\build\java\x64;)

            说明一下 ...vc15\bin 是告诉java程序使用opencv的哪个版本进行视频的处理

                        ...\build\java\x64 是告诉java程序 系统的支持需要的dll文件

    其他环境说明:Tomcat用的是8 ,jdk用的是1.8

3、创建普通项目(window环境)

    新建普通java项目,eclipse导入java包的支持,从javacv中取到ffmpeg.jar、javacpp.jar、javacv.jar、opencv.jar、javacv-platform.jar、ffmpge-windows-x86_64.jar、opencv-windows-x86_64.jar导到新项目中

以下是例子代码:在main函数中

    //图片转换器
    //在main函数中时要让系统去加载这个opencv的相关变量,其它有运行容器(如Tomcat)则不用
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    OpenCVFrameConverter.ToIplImage conveter = new OpenCVFrameConverter.ToIplImage(); //申明一个图片处理的变量

    //------------------->begin 初始化视频录制器
    // 参数说明视频存储位置mergeMp4Path:xxx.mov,视频的宽和高
    recorder = new FFmpegFrameRecorder(mergeMp4Path,MAX_W,MAX_H);
    recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4); // 13  
    recorder.setFormat("mov"); //设置格式mov为快播短播
    recorder.setFrameRate(FRAME_RATE); //此处说明每一秒多少帧,即说明1秒会录多少张照片
//  recorder.setGopSize(FRAME_RATE*2); //这一步没有感觉到有多少影响,暂时不管
    recorder.setVideoBitrate(8000000); //8000kb/s 这个说明视频每秒大小,值越大图片转过来的压缩率就越小质量就会越高

//  recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P); // yuv420p  先默认吧,这个应该属于设置视频的处理模式吧
    // 不可变(固定)音频比特率 
    recorder.setAudioOption("crf", "0");  
    // 最高质量  
    recorder.setAudioQuality(0);  
    // 音频比特率  
//  recorder.setAudioBitrate(192000);  
    // 音频采样率  
//  recorder.setSampleRate(44100);  
   // 双通道(立体声)  
    recorder.setAudioChannels(2);
//------------------->end 初始化视频录制器

    recorder.start();//开始录制

//------------------->begin 如果有多张,则以下代码则执行多次即可

    String frame = "xxxx.jpg";//单张图片的位置

    IplImage image = opencv_imgcodecs.cvLoadImage(frame); // 非常吃内存!!
    Frame frame = conveter.convert(image);
    recorder.record(frame);  //录制
    // 释放内存
    cvLoadImage(fname); // 非常吃内存!!  
    opencv_core.cvReleaseImage(image);

//------------------->end 如果有多张,则以下代码则执行多次即可

//------------------->begin 开始录制音频
    grabber = new FFmpegFrameGrabber(mp3Path);
    grabber.start();// 开始录制音频

    while ((audioSamples = grabber.grab()) != null) {
          recorder.setTimestamp(grabber.getTimestamp());  //告诉录制器这个audioSamples的音频时长
          recorder.record(audioSamples);  //录入音频
    }

//------------------->end 开始录制音频

    grabber.stop();
    grabber.release();
    recorder.stop();  
    recorder.release();

 

 

    到此图片和音频的动作就合成成功了

 

 

 

4、创建web项目(Windows 64位+Tomcat 8)

    新建一个web项目,将ffmpeg.jar、javacpp.jar、javacv.jar、opencv.jar、javacv-platform.jar、ffmpge-windows-x86_64.jar、opencv-windows-x86_64.jar导到项目 WEB-INF的lib下,使项目引用了lib依赖并引用Tomcat依赖

       将上述main函数抽成一个静态方法,例如是: AA.createVedio();

       在web项目中新建一个Servlet,并在doPost和doGet调用 AA.createVedio();

        此时项目成功访问,并能成功生成视频

 

5、搭建Linux环境(Linux Centos7 64位 + Tomcat 8)

    将上述Windows + Tomcat项目中的 ffmpge-windows-x86_64.jar和opencv-windows-x86_64.jar换成Linux的jar包,从javacv中找到 ffmpge-linux-x86_64.jar和opencv-linux-x86_64.jar替换即可

    这样项目的代码基本完成,接下来就是在linux环境搭opencv (jdk和Tomcat 就不再描述了)

    将刚下载的opencv-3.4.1.zip 放到服务器,然后用cmake命令生成opencv的运行依赖

    本人当时参照的是 https://www.cnblogs.com/hc101/p/7890115.html

    当然我遇到的问题是如下

    注意一下:

    一、命令的使用cmake xxxx(opencv的源码路径我的是\opencv\sources) -D CMAKE_BUILD_TYPE=DEBUG -D CMAKE_INSTALL_PREFIX=/usr/local(/usr/local指的是什么,感觉没有用),这个命令在哪执行则它就会安装到哪里

        二、配置环境变量

    在/etc/profile 中首部加入

    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib

    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

    在/etc/ld.so.conf.d 增加opencv.conf

    在opencv.conf 加入/usr/local/lib

    sudo ldconfig //生效ID配置

    source /etc/profile //生效环境变量

    部署Tomcat ,将中的windows+Tomcat 的代码放到linux下,运行成功生成视频

 

 

 

 

    

你可能感兴趣的:(图片合成视频,java,opencv,javacv,mp3)