> 文章列表 > 音视频处理工具类

音视频处理工具类

音视频处理工具类

目录

    • 导入jar包
    • 工具类

导入jar包

<!--依赖了所有平台的包 打包之后会比较大 因此使用 jave-core + 平台的包处理音视频文件--><!--<dependency><groupId>ws.schild</groupId><artifactId>jave-all-deps</artifactId><version>3.1.1</version></dependency>--><dependency><groupId>ws.schild</groupId><artifactId>jave-core</artifactId><version>3.1.1</version></dependency><!-- 以下依赖根据系统三选一 --><!-- win系统平台的依赖 --><dependency><groupId>ws.schild</groupId><artifactId>jave-nativebin-win64</artifactId><version>3.1.1</version></dependency><!-- linux系统平台的依赖 --><!--<dependency><groupId>ws.schild</groupId><artifactId>jave-nativebin-linux64</artifactId><version>3.1.1</version></dependency>--><!-- macos系统平台的依赖 --><!--<dependency><groupId>ws.schild</groupId><artifactId>jave-nativebin-osx64</artifactId><version>3.1.1</version></dependency>-->

工具类

获取音视频大小、时长、处理音视频转码工具类

import lombok.extern.slf4j.Slf4j;
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 java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.channels.FileChannel;@Slf4j
public class AudioVideoUtil {/*** 获取音视频的大小** @param source* @return*/public static Long getSize(File source) {try (FileInputStream fis = new FileInputStream(source);FileChannel fc = fis.getChannel();) {return fc.size();} catch (IOException e) {log.error("AudioVideoUtil.getSize|获取文件大小 异常", e);}return -1L;}/*** 获取音视频的时长** @param source* @return*/public static Long getTime(File source) {try {MultimediaObject instance = new MultimediaObject(source);MultimediaInfo result = instance.getInfo();return result.getDuration() / 1000;} catch (EncoderException e) {log.error("AudioVideoUtil.getTime|获取音视频时长 异常", e);}return -1L;}/*** 音频格式转换** @param source       原音频  本地路径* @param target       目标音频  本地路径* @param outputFormat 需要转化的格式*/public static boolean audioToAudio(File source, File target, String outputFormat) {long start = System.currentTimeMillis();AudioAttributes audio = new AudioAttributes();audio.setCodec("libmp3lame");audio.setBitRate(128000);audio.setChannels(2);audio.setSamplingRate(44100);EncodingAttributes attrs = new EncodingAttributes();attrs.setOutputFormat(outputFormat);attrs.setAudioAttributes(audio);Encoder encoder = new Encoder();try {encoder.encode(new MultimediaObject(source), target, attrs);return true;} catch (EncoderException e) {log.error("AudioVideoUtil.audioToAudio|音频格式转码 异常", e);} finally {long end = System.currentTimeMillis();log.info("AudioVideoUtil.audioToAudio|音频格式转码 耗时:{} ms", end - start);}return false;}/*** 音频格式转换** @param sourceUrl    原音频路径  远程路径* @param target       目标音频 本地路径* @param outputFormat 需要转化的格式*/private static boolean audioToAudio(String sourceUrl, File target, String outputFormat) {long start = System.currentTimeMillis();//Audio AttributesAudioAttributes audio = new AudioAttributes();audio.setCodec("libmp3lame");audio.setBitRate(128000);audio.setChannels(2);audio.setSamplingRate(44100);//Encoding attributesEncodingAttributes attrs = new EncodingAttributes();attrs.setOutputFormat(outputFormat);attrs.setAudioAttributes(audio);//EncodeEncoder encoder = new Encoder();try {encoder.encode(new MultimediaObject(new URL(sourceUrl)), target, attrs);return true;} catch (EncoderException e) {log.error("AudioVideoUtil.audioToAudio|音频格式转码 异常", e);} catch (MalformedURLException e) {log.error("AudioVideoUtil.audioToAudio|音频格式转码 异常", e);} finally {long end = System.currentTimeMillis();log.info("AudioVideoUtil.audioToAudio|音频格式转码 耗时:{} ms", end - start);}return false;}/*** 视频文件转音频文件** @param source       原音频  本地路径* @param target       目标音频  本地路径* @param outputFormat 需要转化的格式*/public static boolean videoToAudio(File source, File target, String outputFormat) {long start = System.currentTimeMillis();AudioAttributes audio = new AudioAttributes();audio.setCodec("libmp3lame");audio.setBitRate(128000);audio.setChannels(2);audio.setSamplingRate(44100);EncodingAttributes attrs = new EncodingAttributes();attrs.setOutputFormat(outputFormat);attrs.setAudioAttributes(audio);Encoder encoder = new Encoder();MultimediaObject mediaObject = new MultimediaObject(source);try {encoder.encode(mediaObject, target, attrs);return true;} catch (Exception e) {log.error("AudioVideoUtil.videoToAudio|视频转音频 异常", e);} finally {long end = System.currentTimeMillis();log.info("AudioVideoUtil.videoToAudio|视频转音频 耗时:{} ms", end - start);}return false;}/*** 视频转码** @param source       原音频  本地路径* @param target       目标音频  本地路径* @param outputFormat 需要转化的格式*/public static boolean videoToVideo(File source, File target, String outputFormat) {long start = System.currentTimeMillis();AudioAttributes audio = new AudioAttributes();audio.setCodec("aac");audio.setBitRate(236000 / 2);audio.setChannels(2);audio.setSamplingRate(8000);VideoAttributes video = new VideoAttributes();video.setCodec("h264");video.setBitRate(1000000);video.setFrameRate(25);video.setQuality(4);EncodingAttributes attrs = new EncodingAttributes();attrs.setOutputFormat(outputFormat);attrs.setAudioAttributes(audio);attrs.setVideoAttributes(video);Encoder encoder = new Encoder();try {encoder.encode(new MultimediaObject(source), target, attrs);return true;} catch (Exception e) {log.error("AudioVideoUtil.videoToVideo|视频格式转码 异常", e);} finally {long end = System.currentTimeMillis();log.info("AudioVideoUtil.videoToVideo|视频格式转码 耗时:{} ms", end - start);}return false;}public static boolean cutAudio(File source, File target, float startTime, float duration) {long start = System.currentTimeMillis();if (target.exists()) {target.delete();}MultimediaObject srcMultiObj = new MultimediaObject(source);MultimediaInfo srcMediaInfo;try {srcMediaInfo = srcMultiObj.getInfo();Encoder encoder = new Encoder();EncodingAttributes encodingAttributes = new EncodingAttributes();//设置起始偏移量(秒)encodingAttributes.setOffset(startTime);//设置切片的音频长度(秒)encodingAttributes.setDuration(duration);//设置音频属性AudioAttributes audio = new AudioAttributes();audio.setBitRate(srcMediaInfo.getAudio().getBitRate());audio.setSamplingRate(srcMediaInfo.getAudio().getSamplingRate());audio.setChannels(srcMediaInfo.getAudio().getChannels());audio.setCodec(srcMediaInfo.getAudio().getDecoder().split(" ")[0]);encodingAttributes.setAudioAttributes(audio);//写文件encoder.encode(srcMultiObj, target, encodingAttributes);return true;} catch (EncoderException e) {log.error("AudioVideoUtil.cutAudio|音视频剪辑 异常", e);} finally {long end = System.currentTimeMillis();log.info("AudioVideoUtil.cutAudio|音视频剪辑 耗时:{} ms", end - start);}return false;}public static void main(String[] args) {File source = new File("C:/xx/xx/xx/xx.mp3");File target = new File("C:/xx/xx/xx/xxxx.mp3");cutAudio(source, target, 10.0F, 30.0F);Long sourceTime = getTime(source);Long sourceSize = getSize(source);Long targetTime = getTime(target);Long targetSize = getSize(target);System.out.println("原音频大小:" + sourceSize + " 原音频时长:" + sourceTime);System.out.println("目标音频大小:" + targetSize + " 目标音频时长:" + targetTime);}
}