视频格式转换工具,用到ws.schild.jave,之前是用的it.sauronsoftware.jave,作者已经不维护了

20 篇文章 1 订阅
10 篇文章 0 订阅

视频格式转换工具,用到ws.schild.jave,之前是用的it.sauronsoftware.jave,作者已经不维护了 ,最近又看到了这个,算是它的升级版,所以自己摸索它的用法,也根据之前的方法一步步试的。

添加依赖:

核心依赖

        <groupId>ws.schild</groupId>
            <artifactId>jave-core</artifactId>
            <version>3.0.1</version>
        </dependency>

系统平台的依赖,看你程序使用的是什么系统,两个都可以加,这个是为了使用包里提供的工具,没有这个会出现错误!
        <dependency>
            <groupId>ws.schild</groupId>
            <artifactId>jave-nativebin-win64</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>ws.schild</groupId>
            <artifactId>jave-nativebin-linux64</artifactId>
            <version>3.0.1</version>
        </dependency>

package com.maike.common.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.maike.codegenerate.common.entity.VideoItem;
import ws.schild.jave.Encoder;
import ws.schild.jave.EncoderException;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;
import ws.schild.jave.encode.VideoAttributes;
import ws.schild.jave.info.MultimediaInfo;
import ws.schild.jave.info.VideoInfo;

/**
 *
 * @ClassName VideoFormatUtil
 * @Description 视频格式转换工具
 * @Author geekcjj
 * @Date 2020年12月13日 上午10:52:28
 */
public class VideoFormatUtil {

	public static Logger Log = LoggerFactory.getLogger(VideoFormatUtil.class);

	/**
	 * 视频文件转音频文件
	 * @param videoPath
	 * @param audioPath
	 * @return
	 */
	public static boolean videoToAudio(String videoPath, String audioPath) {
		File fileMp4=new File(videoPath);
		File fileMp3=new File(audioPath);

		//Audio Attributes
		AudioAttributes audio = new AudioAttributes();
		audio.setCodec("libmp3lame");
		audio.setBitRate(128000);
		audio.setChannels(2);
		audio.setSamplingRate(44100);

		//Encoding attributes
		EncodingAttributes attrs = new EncodingAttributes();
		attrs.setOutputFormat("mp3");
		attrs.setAudioAttributes(audio);
		Encoder encoder = new Encoder();
		MultimediaObject mediaObject=new MultimediaObject(fileMp4);
		try {
			encoder.encode(mediaObject, fileMp3, attrs);
			Log.info("File MP4 convertito in MP3");
			return true;
		} catch (Exception e) {
			Log.error("File non convertito");
			Log.error(e.getMessage());
			return false;
		}
	}

	/**
	 * 获取视频的基本信息,视频长宽高,视频的大小等
	 * @param fileSource
	 * @return
	 */
	public static VideoItem getVideoInfo(String fileSource) {
		// String filePath =
		// Utils.class.getClassLoader().getResource(fileSource).getPath();
		File source = new File(fileSource);
		//Encoder encoder = new Encoder();
		FileInputStream fis = null;
		FileChannel fc = null;
		VideoItem videoInfo = null;
		try {
			MultimediaObject MultimediaObject=new MultimediaObject(source);
			MultimediaInfo m = MultimediaObject.getInfo();
			fis = new FileInputStream(source);
			fc = fis.getChannel();
			videoInfo = new VideoItem(m.getVideo().getSize().getWidth(), m.getVideo().getSize().getHeight(), fc.size(),
					m.getDuration(), m.getFormat());
			System.out.println(videoInfo);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (null != fc) {
				try {
					fc.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != fis) {
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return videoInfo;
	}

    /**
	 * 截取视频中某一帧作为图片
	 * @param videoPath
	 * @param imagePath
	 * @return
	 */
	public static boolean getVideoProcessImage(String videoPath,String imagePath){
		long times = System.currentTimeMillis();
		File videoSource = new File(videoPath);
		File imageTarget = new File(imagePath);
		MultimediaObject object = new MultimediaObject(videoSource);
		try {
			MultimediaInfo multimediaInfo = object.getInfo();
			VideoInfo videoInfo=multimediaInfo.getVideo();
			VideoAttributes video = new VideoAttributes();
			video.setCodec("png");
			video.setSize(videoInfo.getSize());
			EncodingAttributes attrs = new EncodingAttributes();
			//VideoAttributes attrs = ecodeAttrs.getVideoAttributes().get();
			attrs.setOutputFormat("image2");
			attrs.setOffset(11f);//设置偏移位置,即开始转码位置(11秒)
			attrs.setDuration(0.01f);//设置转码持续时间(1秒)
			attrs.setVideoAttributes(video);
			Encoder encoder = new Encoder();
			encoder.encode(object,imageTarget,attrs);
			return true;
		} catch (EncoderException e) {
			e.printStackTrace();
			return false;
		}
	}

    /**
	 * m4r音频格式转换为mp3,audioPath可更换为要转换的音频格式
	 * @param audioPath
	 * @param mp3Path
	 */
	public static void m4rToMp3(String audioPath,String mp3Path){
		File source = new File(audioPath);
		File target = new File(mp3Path);
		AudioAttributes audio = new AudioAttributes();
		audio.setCodec("libmp3lame");
		audio.setBitRate(new Integer(128000));
		audio.setChannels(new Integer(2));
		audio.setSamplingRate(new Integer(44100));
		EncodingAttributes attrs = new EncodingAttributes();
		attrs.setOutputFormat("mp3");
		attrs.setAudioAttributes(audio);
		Encoder encoder = new Encoder();
		try {
			encoder.encode(new MultimediaObject(source), target, attrs);
		} catch (EncoderException e) {
			e.printStackTrace();
		}
	}

    /**
	 * 从和视频中提取音频wav
	 * @param aviPath
	 * @param targetWavPath
	 */
	public static void videoExtractAudio(String aviPath,String targetWavPath){
		File source = new File(aviPath);
		File target = new File(targetWavPath);
		AudioAttributes audio = new AudioAttributes();
		audio.setCodec("pcm_s16le");
		EncodingAttributes attrs = new EncodingAttributes();
		attrs.setOutputFormat("wav");
		attrs.setAudioAttributes(audio);
		Encoder encoder = new Encoder();
		try {
			encoder.encode(new MultimediaObject(source), target, attrs);
		} catch (EncoderException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 视频转换为手机可播放的格式
	 * @param sourceVideo sourceVideo.avi
	 * @param targetVideo targetVideo.3gp
	 */
	public static void videoToMobileVideo(String sourceVideo, String targetVideo){
		File source = new File("source.avi");
		File target = new File("target.3gp");
		AudioAttributes audio = new AudioAttributes();
		audio.setCodec("libfaac");
		audio.setBitRate(new Integer(128000));
		audio.setSamplingRate(new Integer(44100));
		audio.setChannels(new Integer(2));
		VideoAttributes video = new VideoAttributes();
		video.setCodec("mpeg4");
		video.setBitRate(new Integer(160000));
		video.setFrameRate(new Integer(15));
		video.setSize(new VideoSize(176, 144));
		EncodingAttributes attrs = new EncodingAttributes();
		attrs.setOutputFormat("3gp");
		attrs.setAudioAttributes(audio);
		attrs.setVideoAttributes(video);
		Encoder encoder = new Encoder();
		try {
			encoder.encode(new MultimediaObject(source), target, attrs);
		} catch (EncoderException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		//System.out.println("数据 = [" + getVideoProcessImage("E:/MyFile/mylove/video/dPQRVRFuZHJ8.mp4","E:/MyFile/sfaafasddxg.jpg") + "]");
		//System.out.println("数据 = [" + getVideoInfo("E:/MyFile/mylove/video/dPQRVRFuZHJ8.mp4") + "]");
		//System.out.println("数据 = [" + videoToAudio("E:/MyFile/mylove/video/dPQRVRFuZHJ8.mp4","E:/MyFile/sfaafasddxgd.mp3") + "]");
	}

}

 

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值