java视频压缩转码

压缩方法
依赖

        <dependency>
            <groupId>joinery</groupId>
            <artifactId>jave</artifactId>
            <version>1.0.2</version>
        </dependency>

方法

package com.online.ota.util;

import java.io.File;

import it.sauronsoftware.jave.AudioAttributes;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.EncoderException;
import it.sauronsoftware.jave.EncodingAttributes;
import it.sauronsoftware.jave.VideoAttributes;

public class FfmepgUtil {

	public static void ffmepg(String sourceAddr, String targetAddr,
			String codec, int bitRate, String format)  {

		File source = new File(sourceAddr);
		File target = new File(targetAddr);

		try {
			AudioAttributes audio = new AudioAttributes();// 音频属性
			audio.setCodec("libmp3lame");// libfaac PGM编码
			audio.setBitRate(new Integer(128000));// 音频比特率
			audio.setChannels(new Integer(2));// 声道
			audio.setSamplingRate(new Integer(44100));// 采样率
			VideoAttributes video = new VideoAttributes();// 视频属性
			video.setCodec(codec);// 视频编码
			video.setBitRate(new Integer(bitRate));// 视频比特率
			video.setFrameRate(new Integer(30));// 帧率
			EncodingAttributes attrs = new EncodingAttributes();// 转码属性
			attrs.setFormat(format);// 视频格式
			attrs.setAudioAttributes(audio);// 音频属性
			attrs.setVideoAttributes(video);// 视频属性
			Encoder encoder = new Encoder();// 创建解码器
			encoder.encode(source, target, attrs);
			System.out.println("上传成功!!!");
		} catch (EncoderException e) {
			e.printStackTrace();
			System.out.println("文件格式不正确!");
		}
	}


	public static void main(String[] args) throws Exception, Exception {
		/*for(int i = 0; i<=0;i++) {
			ffmepg("D:\\pm.mp4", "D:\\upload\\pm"+i+".mp4", "mpeg4", 15, "mp4");
		}*/

		ffmepg("D:\\upload\\mu.mp4", "D:\\upload\\server1UP\\pm35.mp4", "mpeg4", 15, "mp4");
		TranscodingUtil.frameRecord("D:\\upload\\server1UP\\pm35.mp4", "D:\\upload\\solidityUP\\pm35.mp4");
	}
}

转码
依赖

        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacpp</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>opencv-platform</artifactId>
            <version>3.4.1-1.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>ffmpeg-platform</artifactId>
            <version>3.4.2-1.4.1</version>
        </dependency>

方法

package cn.com.Utils;

import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Frame;

public class TranscodingUtil {
	private static boolean isStart = true;

	public static void frameRecord(String inputFile, String outputFile)
			throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
		// 获取视频源
		FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);
		grabber.setOption("rtsp_transport","tcp");
		//速度
		grabber.setFrameRate(30);
		//码率
		grabber.setVideoBitrate(3000000);
		// 流媒体输出地址,分辨率(长,高),是否录制音频(0:不录制/1:录制)
		FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile, 1280, 720, 1);
		recorder.setFrameRate(30);
		recorder.setVideoBitrate(3000000);
		//编码格式
		recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); //avcodec.AV_CODEC_ID_H264  //AV_CODEC_ID_MPEG4
		recordByFrame(grabber, recorder);
	}

	private static void recordByFrame(FFmpegFrameGrabber grabber, FFmpegFrameRecorder recorder)
			throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
		try {// 建议在线程中使用该方法

			grabber.start();
			recorder.start();
			//CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口
			//     canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			//canvas.setAlwaysOnTop(true);

			long t1 = System.currentTimeMillis();

			Frame frame = null;


			while (isStart && (frame = grabber.grabFrame()) != null) {
				long t2 = System.currentTimeMillis();
				if(t2-t1 > 2*60*60*1000){
					break;
				}else{
					recorder.record(frame);
					//TODO your work
				}
				//canvas.showImage(grabber.grab());//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像
			}
			recorder.stop();
			grabber.stop();

		} finally {
			if (grabber != null) {
				grabber.stop();
			}
		}
	}
	public static void main(String[] args) {
		String inputFile="D:\\upload\\pm12.mp4";
		String outputFile="D:\\upload\\solidityUP\\pm12.mp4";
		try {
			frameRecord(inputFile,outputFile);
		} catch (org.bytedeco.javacv.FrameRecorder.Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
125分50秒---162.81M---LabView01---第10章数据的显示.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView01-第10章数据的显示.wmv 92分2秒---143.46M---LabView02---第11章文件的IO及保存.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView02-第11章文件的IO及保存.wmv 37分22秒---58.09M---LabView03---第12章LabVIEW的通信.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView03-第12章LabVIEW的通信.wmv 9分58秒---21.2M---LabView04---第13章LabVIEW与其它软件的连接.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView04-第13章LabVIEW与其它软件的连接.wmv 4分45秒---9.99M---LabView05---第14章LabVIEW中子VI的设置及调用.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView05-第14章LabVIEW中子VI的设置及调用.wmv 34分30秒---61.03M---LabView06---第15章其它高级技巧.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView06-第15章其它高级技巧.wmv 9分41秒---11.37M---LabView07---第2章第一个LabVIEW例子.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView07-第2章第一个LabVIEW例子.wmv 86分58秒---140.25M---LabView08---第3章基本元素.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView08-第3章基本元素.wmv 76分48秒---143.72M---LabView09---第4章程序结构.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView09-第4章程序结构.wmv 5分46秒---14.67M---LabView10---第5章数据采集.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView10-第5章数据采集.wmv 12分50秒---18.35M---LabView11---第6章数据传输及电脑接口.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView11-第6章数据传输及电脑接口.wmv 59分57秒---87.83M---LabView12---第7章数据的分析及处理.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView12-第7章数据的分析及处理.wmv 42分4秒---61.02M---LabView13---第8章LabVIEW的信号调理.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView13-第8章LabVIEW的信号调理.wmv 132分19秒---178.86M---LabView14---第9章分析处理中数学计算.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView14-第9章分析处理中数学计算.wmv

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值