视频图像处理 ffmpeg 使用

本文提供了一个使用Java和FFmpeg录制MP4视频的示例代码,并详细介绍了在CentOS环境中安装配置FFmpeg及所需编解码库的过程。

java ffmpeg 使用示例

private void outputMp4() {
        String fileName = UUID.randomUUID().toString().replaceAll("-", "") + ".mp4";
        log.info("录屏文件上传到文件服务器开始,文件名:{}", fileName);
        try {
            BufferedImage img = ImageIO.read(videos.get(0));
            int width = img.getWidth();
            int height = img.getHeight();
            if (height % 2 != 0) {
                height++;
            }
            if (width % 2 != 0) {
                width++;
            }
            FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(fileName, width, height);
            log.info("有异常?1111");
            recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
            log.info("22222222");
            recorder.setFrameRate(15.0);
            log.info("3333333");
            recorder.setVideoBitrate((int) ((width * height * 25.0) * 1 * 0.07));
            log.info("4444444");
            recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
            log.info("5555555");
            // 视频格式
            recorder.setFormat("mp4");
            // recorder.setFormat("flv");
            log.info("6666666");
            recorder.start();
            log.info("7777777");
            OpenCVFrameConverter.ToIplImage conveter = new OpenCVFrameConverter.ToIplImage();
            log.info("8888888");
            for (File f : videos) {
                opencv_core.IplImage image = cvLoadImage(f.getPath());
                recorder.record(conveter.convert(image));
                opencv_core.cvReleaseImage(image);
            }
            recorder.stop();
            recorder.release();
            File file = new File(fileName);
            videoName = fileStorageOperate.fileStorageUploadFile(file);
            log.info("录屏文件上传到文件服务器完成,文件名:{}", fileName);
            file.delete();
        } catch (Exception e) {
            log.error("录屏文件上传到文件服务器异常,文件名:{}", fileName);
            log.info(e.getMessage());
            // recorder.stop();

            try {
                BufferedImage img = ImageIO.read(videos.get(0));
                log.info(String.format("image1 width %d height %d", img.getWidth(), img.getHeight()));

            } catch (IOException e1) {

                log.info(e.getMessage());

            }
        }
    }

CentOS 中使用,需要安装 ffmpeg

   现在最新的FFMPEG 他自带有音频和视频解码的库,可能是因为版权的一些问题,它没有自带编码音频和视频的库,另外,如果需要使用ffplay 进行视频播放,还需要安装SDL。下面介绍在linux 下,以H264 和 MP3 视音频编码 SDL显示为例的安装。

    1、下载最新的安装代码。

        LAME 音频编码:http://lame.sourceforge.net/download.php

        X264 视频编码 :http://www.videolan.org/developers/x264.html

        SDL 显示库: http://www.libsdl.org/download-2.0.php

        FFMPEG : http://www.ffmpeg.org/download.html

 

    2、 安装MP3编码库

        ./configure

        make

        make install

 

    3、安装X264视频编码库

        ./configure --enable-shared

        make

        make install

        如果安装过程中提示yasm版本过低,可以使用 ./configure --enable-shared --disable-asm 关闭yasm,然后再安装。也可以自己先升级yasm后再安装。

 

    4、SDL显示安装

        ./configure

        make

        make install

 

    5、安装FFMPEG

        ./configure --enable-libmp3lame --enable-libx264 --enable-gpl

        make

        make install

 

安装测试:

    可以使用下面命令进行测试编解码:

ffmpeg -i 2312.mp4 -vcodec libx264 -b:v 1200k -r 25 -acodec mp3 -ab 128k -ar 44100 output.mp4

编解码结果输出

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值