jave (java的ffmpeg框架)简单使用

引入文件(

jave-native-win64       windows 64位系统
jave-native-linux64 linux 64位系统
按自己服务器系统来替换

<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-core</artifactId>
    <version>2.4.6</version>
</dependency>
<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-native-win64</artifactId>
     <version>2.4.6</version>
</dependency>

 

压缩视频  音频使用 libmp3lame 压缩,ios默认播放器播放会没有声音,还是使用aac

File source = new File("e:/视频/第八课.mp4");
        File target = new File("e:/视频/第八课_ys.mp4");
        long time = System.currentTimeMillis();
        try {
            MultimediaObject object = new MultimediaObject(source);
            AudioInfo audioInfo = object.getInfo().getAudio();
            AudioAttributes audio = new AudioAttributes();
            audio.setCodec("aac");
            if(audioInfo.getBitRate() > 128000){
                audio.setBitRate(new Integer(128000));
            }
            audio.setChannels(audioInfo.getChannels());
            if(audioInfo.getSamplingRate() > 48050){
                audio.setSamplingRate(new Integer(48050));
            }
            VideoInfo videoInfo = object.getInfo().getVideo();
            VideoAttributes video = new VideoAttributes();
            video.setCodec("h264");
            if(videoInfo.getBitRate() > 800000){
                video.setBitRate(new Integer(800000));
            }
            if(videoInfo.getFrameRate() > 20){
                video.setFrameRate(new Integer(20));
            }
            int width = videoInfo.getSize().getWidth();
            int height = videoInfo.getSize().getHeight();
            if(width > 1280){
                float rat = (float) width / 1280;
                video.setSize(new VideoSize(1280,(int)(height/rat)));
            }
            EncodingAttributes attr = new EncodingAttributes();
            attr.setFormat("mp4");
            attr.setAudioAttributes(audio);
            attr.setVideoAttributes(video);
            Encoder encoder = new Encoder();
            encoder.encode(object, target, attr);
            System.out.println("耗时:" + (System.currentTimeMillis() - time)/1000);
        } catch (Exception e) {
            e.printStackTrace();
        }

获取视频某个帧的图片

long times = System.currentTimeMillis();
        File source = new File("e:/视频/第八课_ys.mp4");
        File target = new File("e:/视频/第八课_ys.png");
        MultimediaObject object = new MultimediaObject(source);
        try {
            VideoInfo videoInfo = object.getInfo().getVideo();
            VideoAttributes video = new VideoAttributes();
            video.setCodec("png");
            video.setSize(videoInfo.getSize());
            EncodingAttributes attrs = new EncodingAttributes();
            attrs.setFormat("image2");
            attrs.setOffset(3f);//设置偏移位置,即开始转码位置(3秒)
            attrs.setDuration(0.01f);//设置转码持续时间(0.01秒)
            attrs.setVideoAttributes(video);
            Encoder encoder = new Encoder();
            encoder.encode(object,target,attrs);
        } catch (EncoderException e) {
            e.printStackTrace();
        }
        System.out.println("耗时:"+(System.currentTimeMillis() - times));

 

posted @ 2019-01-17 14:42  荣超  阅读(9354)  评论(3编辑  收藏  举报