springboot整合jave2实现音频格式转换

您所在的位置:网站首页 MP4格式转成MP3格式 springboot整合jave2实现音频格式转换

springboot整合jave2实现音频格式转换

2024-05-30 14:37| 来源: 网络整理| 查看: 265

java中处理音频的常用框架 首先了解FFmpeg

FFmpeg是一款开源软件,用于生成处理多媒体数据的各类库和程序。FFmpeg可以转码、处理视频和图片(调整视频、图片大小,去噪等)、打包、传输及播放视频。作为最受欢迎的视频和图像处理软件,它被来自各行各业的不同公司所广泛使用。

链接: 一文简述FFmpeg

视频压缩支持视频打包视频截图功能视频添加水印支持音频、视频容器格式转换下载视频ffprobe 用于获取音视频文件的信息libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构 和读取音视频帧等功能;libavcodec:用于各种类型声音/图像编解码;libavutil:包含一些公共的工具函数;libswscale:用于视频场景比例缩放、色彩映射转换;libpostproc:用于后期效果处理;ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;ffsever:一个 HTTP 多媒体即时广播串流服务器;ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示; JAVE2

JAVE2 (Java Audio Video Encoder) 类库是一个 ffmpeg 项目的 Java 语言封装。开发人员可以使用JAVE 在不同的格式间转换视频和音频。例如将 AVI 转成 MPEG 动画,等等 ffmpeg 中可以完成的在 JAVE 都有对应的方法。

链接: jave2-github地址

优点:使用方便,直接在项目中引入即可处理媒体文件,且开发完成后可以随工程一起打包发布,不需要在目标运行环境内手动安装 FFmpeg相关的类库

代码实现 其它系统的依赖包去https://github.com/a-schild/jave2官网查看 ws.schild jave-core 3.1.1 ws.schild jave-nativebin-win32 3.1.1 ws.schild jave-nativebin-win64 3.1.1 /** * 获取音频文件的编码信息 * * @param filePath * @throws EncoderException */ private static void info(String filePath) throws EncoderException { File file = new File(filePath); MultimediaObject multimediaObject = new MultimediaObject(file); MultimediaInfo info = multimediaObject.getInfo(); // 时长 long duration = info.getDuration(); String format = info.getFormat(); // format:mov System.out.println("format:" + format); AudioInfo audio = info.getAudio(); // 它设置将在重新编码的音频流中使用的音频通道数(1 =单声道,2 =立体声)。如果未设置任何通道值,则编码器将选择默认值。 int channels = audio.getChannels(); // 它为新的重新编码的音频流设置比特率值。如果未设置比特率值,则编码器将选择默认值。 // 该值应以每秒位数表示。例如,如果您想要128 kb / s的比特率,则应调用setBitRate(new Integer(128000))。 int bitRate = audio.getBitRate(); // 它为新的重新编码的音频流设置采样率。如果未设置采样率值,则编码器将选择默认值。该值应以赫兹表示。例如,如果您想要类似CD // 采样率、音频采样级别 16000 = 16KHz int samplingRate = audio.getSamplingRate(); // 设置音频音量 // 可以调用此方法来更改音频流的音量。值为256表示音量不变。因此,小于256的值表示音量减小,而大于256的值将增大音频流的音量。 // setVolume(Integer volume) String decoder = audio.getDecoder(); System.out.println("声音时长:毫秒" + duration); System.out.println("声道:" + channels); System.out.println("bitRate:" + bitRate); System.out.println("samplingRate 采样率、音频采样级别 16000 = 16KHz:" + samplingRate); // aac (LC) (mp4a / 0x6134706D) System.out.println("decoder:" + decoder); } /** * 音频格式转换 * @param inputFormatPath * @param outputFormatPath * @return */ public static boolean audioEncode(String inputFormatPath, String outputFormatPath) { String outputFormat = getSuffix(outputFormatPath); String inputFormat = getSuffix(inputFormatPath); File source = new File(inputFormatPath); File target = new File(outputFormatPath); try { MultimediaObject multimediaObject = new MultimediaObject(source); // 获取音频文件的编码信息 MultimediaInfo info = multimediaObject.getInfo(); AudioInfo audioInfo = info.getAudio(); //设置音频属性 AudioAttributes audio = new AudioAttributes(); audio.setBitRate(audioInfo.getBitRate()); audio.setSamplingRate(audioInfo.getSamplingRate()); audio.setChannels(audioInfo.getChannels()); // 设置转码属性 EncodingAttributes attrs = new EncodingAttributes(); attrs.setInputFormat(inputFormat); attrs.setOutputFormat(outputFormat); attrs.setAudioAttributes(audio); // 音频转换格式类 Encoder encoder = new Encoder(); // 进行转换 encoder.encode(new MultimediaObject(source), target, attrs); return true; } catch (IllegalArgumentException | EncoderException e) { e.printStackTrace(); } return false; } /** * 获取文件路径的.后缀 * @param outputFormatPath * @return */ private static String getSuffix(String outputFormatPath) { return outputFormatPath.substring(outputFormatPath.lastIndexOf(".") + 1); } 可以调用FFmpeg /** * 剪切视频 * * @param sourcePath * @param targetPath * @param offetTime 起始时间,格式 00:00:00.000 小时:分:秒.毫秒 * @param endTime 同上 * @throws Exception */ public static void cutAv(String sourcePath, String targetPath, String offetTime, String endTime) { try { ProcessWrapper ffmpeg = new DefaultFFMPEGLocator().createExecutor(); ffmpeg.addArgument("-ss"); ffmpeg.addArgument(offetTime); ffmpeg.addArgument("-t"); ffmpeg.addArgument(endTime); ffmpeg.addArgument("-i"); ffmpeg.addArgument(sourcePath); ffmpeg.addArgument("-vcodec"); ffmpeg.addArgument("copy"); ffmpeg.addArgument("-acodec"); ffmpeg.addArgument("copy"); ffmpeg.addArgument(targetPath); ffmpeg.execute(); try (BufferedReader br = new BufferedReader(new InputStreamReader(ffmpeg.getErrorStream()))) { blockFfmpeg(br); } log.info("切除视频成功={}", targetPath); } catch (IOException e) { throw new RuntimeException("剪切视频失败"); } } /** * 等待命令执行成功,退出 * * @param br * @throws IOException */ private static void blockFfmpeg(BufferedReader br) throws IOException { String line; // 该方法阻塞线程,直至合成成功 while ((line = br.readLine()) != null) { doNothing(line); } } /** * 打印日志,调试阶段可解开注释,观察执行情况 * * @param line */ private static void doNothing(String line) { // log.info(line); }

可以搜索FFmpeg常用命令

参考连接

链接: Java实现视频,音频转码

链接: 利用jave2进行音频处理

链接: 一.通过JAVE可以实现视频剪切,压缩,提取音乐等操作

链接: JAVE官方文档

链接: 音频格式简介和PCM转换成WAV

链接: spring boot集成ffmpeg



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3