博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【java小程序】使用ffmpeg进行视频与背景音乐的整合
阅读量:4184 次
发布时间:2019-05-26

本文共 2460 字,大约阅读时间需要 8 分钟。

文章目录

在小视频开发中,上传视频时需要选择背景音乐进行视频与背景音乐的整合。这里我们就借助ffmpeg这个工具来完成这件事。

ffmpeg简介

1、简单来说,ffmpeg就是‘视音频处理工具’。

2、跨平台的视音频处理解决方案。
3、主页:

ffmpeg的应用场景:

  • 播放器:市面上的一些播放器,像射手影音、暴风影音都是基于ffmpeg来进行开发的。
  • 转码工具:格式工厂、剪辑工具等
  • 直播、视频加码、滤镜、水印、特效等

利用ffmpeg进行代码开发

在ffmpeg的官网下载,windows的文档,解压之后bin目录下有一个ffmpeg.exe 应用程序。

1、声明一个变量ffmpegEXE,表示ffmpeg.exe存放的目录路径。
2、执行dos命令的API,ProcessBuilder

public 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        List
command = 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(); } }}

ffmpeg处理工具类的调用

在上传视频成功之后,我们通过判断背景音乐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/

你可能感兴趣的文章
Lucene内置很多的分词器工具包
查看>>
Pig分析数据过程
查看>>
IndexReader家族
查看>>
GROUP BY,WHERE,HAVING之间的区别和用法
查看>>
为什么不能再where语句中直接使用聚合函数
查看>>
IndexWriterConfig这个类的作用
查看>>
IndexWriterConfig的作用
查看>>
sql子语句执行优先级准则
查看>>
redis读写性能测试
查看>>
内存表和临时表的区别
查看>>
Mysql 内存表和临时表的区别
查看>>
数据库服务器升级内存需要考虑的问题 .
查看>>
sql临时表在哪啊
查看>>
Elasticsearch 当数据库使:Join
查看>>
SQL语句的执行原理分析
查看>>
CPU的几核
查看>>
重置IE设置
查看>>
SQL子句执行顺序和Join的一点总结
查看>>
sql(join on 和where的执行顺序)
查看>>
一个因为SQL join引发的内存泄露
查看>>