ffmpeg+java视频转换基础示例

摘要:
ws.schild<ws.schild<版本>2.7.3<&书信电报;1.设置转码方法Encoder=newEncoder();Filefile1=新文件(“3.mp4”);

引入依赖

<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-core</artifactId>
<version>2.7.3</version>
</dependency>
<1--此依赖为windows版本,还有os版本和linux版本,注意自行选择-->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-nativebin-win64</artifactId>
<version>2.7.3</version>
</dependency>

1.设置转码的方法
Encoder encoder = new Encoder();
encoder.encode(
java.io.File source,
java.io.File target,
it.sauronsoftware.jave.EncodingAttributes attributes)
第一个参数source:需要转码的源文件
第二个参数target:需转型成的目标文件

第三个参数attributes:是一个包含编码所需数据的参数

2.设置编码的参数
EncodingAttributes
构建方法:
EncodingAttributes attrs = new EncodingAttributes()
方法:
setAudioAttributes添加音频转码时所需音频属性

setVideoAttributes添加视频转码时所需视频属性

setFormat设置转码格式的方法

setOffset设置转码偏移位置的方法,例如你想在5秒后开始转码源文件则setOffset(5)

setEncodingThreads设置编码线程

setDecodingThreads设置解码线程

setDuration设置转码持续时间的方法,例如你想持续30秒的转码则setDuration(30)

3.设置音频转码的属性
Audio encoding attributes
构建方法:AudioAttributes audio = new AudioAttributes();
方法:
setCodec(java.lang.String codec)//设置编码器
setBitRate(java.lang.Integer bitRate)//设置比特率
setSamplingRate(java.lang.Integer bitRate)//设置取样率
setChannels(java.lang.Integer channels)//设置声音频道
setVolume(java.lang.Integer volume)//设置音量

4.设置视频转码参数
构造方法
VideoAttributes video = new VideoAttributes();
方法:
setCodec(java.lang.String codec)//设置编码器
setTag(java.lang.String tag)//设置标签(通常用多媒体播放器所选择的视频解码)
setBitRate(java.lang.Integer bitRate)//设置比特率
setFrameRate(java.lang.Integer bitRate)//设置帧率
setSize(it.sauronsoftware.jave.VideoSize size)//设置大小

示例代码:

public static void main(String[] args) {
        File file = new File("2.mp4");
        MultimediaObject object = new MultimediaObject(file);
        File file1 = new File("3.mp4");
        try {
            AudioInfo audioInfo = object.getInfo().getAudio();
            VideoInfo videoInfo = object.getInfo().getVideo();
            //设置编码的参数
            EncodingAttributes encodingAttributes = new EncodingAttributes();
            //设置音频转码的参数
            AudioAttributes audioAttributes = new AudioAttributes();
            //设置声道 编码的音频流中使用的声道数(1=单声道,2=双声道)
            audioAttributes.setChannels(2);
            //设置比特率参数除以1000就是多少kpbs
            audioAttributes.setBitRate(128000);
            //设置编码
            audioAttributes.setCodec("aac");
            //设置音量编码时候的音量值,未设置为0,如果256,则音量值不会改变
            audioAttributes.setVolume(256);
            //设置取样率44.1khz
            audioAttributes.setSamplingRate(new Integer(44100));
            //设置视频转码的参数
            VideoAttributes videoAttributes = new VideoAttributes();
            //设置编码器
            videoAttributes.setCodec("h264");
            //设置视频比特率
            videoAttributes.setBitRate(128000);
            /* 设置视频帧率,视频帧率:15 f / s  帧率越低,效果越差
             * 视频帧率(Frame rate)是用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数(Frames per Second,简:FPS)或“赫兹”(Hz)
            */
            videoAttributes.setFrameRate(12);
            //设置视频大小
            videoAttributes.setSize(new VideoSize(videoInfo.getSize().getWidth(),videoInfo.getSize().getHeight()));
            System.out.println("原视频编码"+videoInfo.getDecoder());
            System.out.println("原视频高度"+videoInfo.getSize().getHeight());
            System.out.println("原视频宽度"+videoInfo.getSize().getWidth());
            System.out.println("原视频帧率"+videoInfo.getFrameRate());
            System.out.println("原视频比特率"+videoInfo.getBitRate());
            //1mb=1024kb,1kb=1024b,1mb=1024*1024
            double mb = Math.ceil(file.length() / (1024 * 1024));
            int second = (int) object.getInfo().getDuration() / 1000;
            BigDecimal bigDecimal = new BigDecimal(String.format("%.4f", mb / second));
            System.out.println("开始压缩视频-->视频每秒平均"+bigDecimal+"MB");
            System.out.println("原音频比率"+audioInfo.getBitRate());
            System.out.println("原音频声道"+audioInfo.getChannels());
            //44.1kHz,表示每秒钟对模拟音频信号进行了44100次取样
            System.out.println("原音频取样率"+audioInfo.getSamplingRate());
            System.out.println("原音频编码"+audioInfo.getDecoder());
            long time = System.currentTimeMillis();
            encodingAttributes.setFormat("mp4");
            encodingAttributes.setAudioAttributes(audioAttributes).setVideoAttributes(videoAttributes);
            encodingAttributes.setEncodingThreads(Runtime.getRuntime().availableProcessors()/2);
            encodingAttributes.setDecodingThreads(Runtime.getRuntime().availableProcessors()/2);
            //encodingAttributes.setDuration(3.0f);
            Encoder encoder = new Encoder();
            encoder.encode(new MultimediaObject(file), file1, encodingAttributes);
            System.out.println("压缩总耗时:" + (System.currentTimeMillis() - time)/1000);
            OutputStream outputStream = new FileOutputStream(new File("4.mp4"));
            FileInputStream fileInputStream = new FileInputStream(file1);
            int len = 0;
            byte[] bytes=new byte[1024];
            while((len=fileInputStream.read(bytes))!=-1){
                outputStream.write(bytes,0,len);
            }
            outputStream.flush();
            outputStream.close();
            fileInputStream.close();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if (file1.length()>0){
                file1.delete();
            }
        }
    }

免责声明:文章转载自《ffmpeg+java视频转换基础示例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[Oracle]Oracle镜像安装及使用教程怎样写一个基于procd的init脚本下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【JAVA】将PDF转化成图片

很多的开源库可以完成这个任务,但是效果都不理想,主要会产生以下问题: 1)分辨率很低,就是最后转化成的图片是缩略图,放大之后看不清楚; 2)不能支持中文,所有中文一律乱码; 3)图片各种混淆:大体是对的,但是个别元素出现混乱,尺寸位置不对等等; 上面说到的三种问题在各种类库中或多或少都存在。 A)实验下来效果最好的是QOPPA的开源库,在免费部分的测试情况...

torch 深度学习(3)

torch 深度学习(3) 损失函数,模型训练 前面我们已经完成对数据的预处理和模型的构建,那么接下来为了训练模型应该定义模型的损失函数,然后使用BP算法对模型参数进行调整 损失函数 Criterion 加载包 require 'torch' require 'nn' -- 各种损失函数也是 'nn'这个模块里面的 设定命令行参数 if...

ORACLE的SPFILE与PFILE

    ORACLE中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件,可以分为两种类型。它们是在数据库实例启动时候加载的,决定了数据库的物理结构、内存、数据库的限制及系统大量的默认值、数据库的各种物理属性、指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重要文件。 初始化参数文件(Initialization Parameters...

SILK编码语音转WAV格式

“  SILK音频编码格式介绍、WAV文件封装格式介绍以及SILK音频编码到WAV的转换。” 在语音相关的协议还原中,经常会遇到语音编码的问题,通常语音编码的数据无法直接展示,需要转换成WAV,MP3等格式,才能播放。这个转换过程,是首先将音频编码数据使用对应解码库解码为PCM流,然后再将PCM流根据封装格式的要求,进行编码封装,最后得到可供通用播放器...

python之路_爬虫之requests模块初始

一、校花网视频爬取 1、正常爬取 import requests import re import hashlib import time import os downLoad_path=r'D:DOWNLOAD' def get_page(url): response=requests.get(url) if response.stat...

zabbix触发器函数的使用

 zabbix触发器常用函数以及用例: abschange 参数:忽略 支持类型:float,int,str,text,log 作用:返回最近获得的值与之前获得值差的绝对值,对于字符串类型:0表示相等,1表示不同 avg 参数:秒或#num 支持类型:float,int 作用:返回一段时间的平均值 举例: avg(5):最后5秒的平均值 avg(#5):表...