zoukankan      html  css  js  c++  java
  • 如何优雅的用java实现视频转码

    1. 开源项目 JAVE (Java Audio Video Encoder)
    2. 引入依赖
    <dependency>
        <groupId>ws.schild</groupId>
        <artifactId>jave-all-deps</artifactId>
        <version>2.7.2</version>
    </dependency>
    1. 编码测试
    package test;
    
    import java.io.File;
    import ws.schild.jave.AudioAttributes;
    import ws.schild.jave.AudioInfo;
    import ws.schild.jave.Encoder;
    import ws.schild.jave.EncodingAttributes;
    import ws.schild.jave.MultimediaInfo;
    import ws.schild.jave.MultimediaObject;
    import ws.schild.jave.VideoAttributes;
    import ws.schild.jave.VideoInfo;
    import ws.schild.jave.VideoSize;
    
    public class Test {
        
        public static void main(String[] args) throws Exception {
            
            File source = new File("d:/source.mp4");
            File target = new File("d:/target.mp4");
            
            System.out.println("源视频信息");
            MultimediaObject object = new MultimediaObject(source);
            MultimediaInfo info = object.getInfo();
            System.out.println("格式format:" + info.getFormat());
            System.out.println("时长duration:" + info.getDuration());
            VideoInfo videoInfo = info.getVideo();
            System.out.println("编码decoder:" + videoInfo.getDecoder());
            System.out.println("码率bitRate:" + videoInfo.getBitRate());
            System.out.println("帧率frameRate:" + videoInfo.getFrameRate());
            VideoSize videoSize = videoInfo.getSize();
            System.out.println("分辨率:" + videoSize.getWidth() + " x " + videoSize.getHeight());
            AudioInfo audioInfo = info.getAudio();
            System.out.println("编码decoder:" + audioInfo.getDecoder());
            System.out.println("码率bitRate:" + audioInfo.getBitRate());
            System.out.println("声道channels:" + audioInfo.getChannels());
            System.out.println("采样率samplingRate:" + audioInfo.getSamplingRate());
            
            // 视频属性
            VideoAttributes video = new VideoAttributes();
            video.setCodec("libx264");
            video.setBitRate(256000); // 码率:256kbps
            video.setFrameRate(25); // 帧率:25fps
            int width = 640; // 固定宽度
            int height = width * videoSize.getHeight() / videoSize.getWidth();
            height = height%2==0 ? height : height+1; // 视频宽高必须是偶数
            video.setSize(new VideoSize(width, height));
            // 音频属性
            AudioAttributes audio = new AudioAttributes();
            audio.setCodec("aac");
            audio.setBitRate(64000); // 码率:64kbps
            audio.setSamplingRate(24000); // 采样率:24kHz
            // 转码属性
            EncodingAttributes attributes = new EncodingAttributes();
            attributes.setVideoAttributes(video);
            attributes.setAudioAttributes(audio);
            attributes.setFormat("mp4");
    
            Encoder encoder = new Encoder();
            encoder.encode(object, target, attributes);
            
            System.out.println("转码完成:新分辨率:" + width + " x " + height);
        }
        
    }
    1. 测试结果
    源视频信息
    格式format:mov
    时长duration:268280
    编码decoder:h264 (Main) (avc1 / 0x31637661)
    码率bitRate:500000
    帧率frameRate:25.0
    分辨率:768 x 432
    编码decoder:aac (LC) (mp4a / 0x6134706D)
    码率bitRate:96000
    声道channels:2
    采样率samplingRate:44100
    
    转码完成:新分辨率:640 x 360
  • 相关阅读:
    Linux网卡设置
    Linux虚拟机-----概述(1)
    Redis缓存数据库-----概述(1)
    Spring和Mybatis的集成
    onehot编码解释
    LINUX-CUDA版本所对应的NVIDIA驱动版本号,cuda版本报错的朋友参考一下
    matplotlib画图
    pytorch实现花朵数据集读取
    轻量架构ShuffleNet V2:从理论复杂度到实用设计准则
    CBAM: 卷积块注意模块
  • 原文地址:https://www.cnblogs.com/lzh1043060917/p/14205175.html
Copyright © 2011-2022 走看看