本文共 2460 字,大约阅读时间需要 8 分钟。
1、简单来说,ffmpeg就是‘视音频处理工具’。
2、跨平台的视音频处理解决方案。 3、主页:ffmpeg的应用场景:
在ffmpeg的官网下载,windows的文档,解压之后bin目录下有一个ffmpeg.exe 应用程序。
1、声明一个变量ffmpegEXE,表示ffmpeg.exe存放的目录路径。 2、执行dos命令的API,ProcessBuilderpublic class MergeVideoMp3 { private String ffmpegEXE; public MergeVideoMp3(String ffmpegEXE) { this.ffmpegEXE = ffmpegEXE; } public void convertor(String videoInputPath,String mp3InputPath,double seconds,String videoOutputPath) throws IOException{ // 视频融合背景音乐的命令 ffmpeg.exe -i 苏州大裤衩.mp4 -i 背景音乐.mp3 -t 7 -y 新的视频.mp4 Listcommand = new ArrayList<>(); command.add(ffmpegEXE); command.add("-i"); command.add(videoInputPath); command.add("-i"); command.add(mp3InputPath); command.add("-t"); command.add(String.valueOf(seconds)); command.add("-y"); command.add(videoOutputPath); //java提供的dos命令的API ProcessBuilder builder = new ProcessBuilder(command); Process process = builder.start(); //当执行命令时,会产生一些临时文件碎片占用cpu和内存空间。 //命令处理时会产生一些流,流会占用内存,如果流过多就会卡住我们的线程。 //这里做一个流的处理 InputStream errorStream = process.getErrorStream(); InputStreamReader inputStreamReader = new InputStreamReader(errorStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String line = ""; while ((line=bufferedReader.readLine()) != null) { } if(bufferedReader != null){ bufferedReader.close(); } if(inputStreamReader != null){ inputStreamReader.close(); } if(errorStream != null) { errorStream.close(); } }}
在上传视频成功之后,我们通过判断背景音乐id(bgmId)是否为null判断是否进行视频整合.
if (StringUtils.isNotBlank(bgmId)) { Bgm bgm = bgmService.queryBgmById(bgmId); String mp3InputPath = FILE_SPACE + bgm.getPath(); MergeVideoMp3 tool = new MergeVideoMp3(FFMPEG_EXE); String videoInputPath = finalVideoPath; String videoOutputName = UUID.randomUUID().toString() + ".mp4"; uploadPathDB = "/" + userId + "/video" + "/" +videoOutputName; finalVideoPath = FILE_SPACE + uploadPathDB; tool.convertor(videoInputPath,mp3InputPath,videoSeconds,finalVideoPath); }
视频整合处理完毕之后,将视频信息进行数据库保存操作即可。
转载地址:http://xjfoi.baihongyu.com/