使用Java和ffmpeg把音频和视频合成视频的操作方法
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。这个项目是由FabriceBellard发起的,现在由MichaelNiedermayer主持。可以轻易地实现多种视频格式之间的相互转换,例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式
主要功能:
1、视频格式转换功能
ffmpeg视频转换功能。视频格式转换,比如可以将多种视频格式转换为flv格式,可不是视频信号转换 。
ffmpeg可以轻易地实现多种视频格式之间的相互转换(wma,rm,avi,mod等),例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式。
2、视频截图功能
对于选定的视频,截取指定时间的缩略图。视频抓图,获取静态图和动态图,不提倡抓gif文件;因为抓出的gif文件大而播放不流畅
3、给视频加水印功能
使用ffmpeg视频添加水印(logo)。
好了,下面开始今天的正文。
借助第三方工具ffmpeg合成视频
需求:在小破站上下载了一些视频,但是放到电脑里面看,我擦,声音文件和视频文件是分开的。
- 正确安装ffmpeg并配置好环境变量。
- Java代码测试
里面是下载的视频和音频
我就上代码递归了,只要用正确的ffmpeg的命令和Java调用ffmpeg.exe的程序,就可以合成啦。
packagecom.lovely.test;
importjava.io.BufferedReader;
importjava.io.File;
//importjava.io.FileInputStream;
//importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.UUID;
/**
*
*视频中获取音频文件
*
*/
publicclassTestFfmpeg{
//FFmpeg全路径
privatestaticfinalStringFFMPEG_PATH="D:\\softWare\\tools\\joyTool\\ffmpeg\\bin\\ffmpeg.exe";
publicstaticvoidmain(String[]args){
Stringpath="E:\\StudyVedio\\ComputerScience\\US";
try{
getAll(path);
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*具体合成视频函数
*@paramvideoInputPath
*原视频的全路径
*
*@paramaudioInputPath
*音频的全路径
*
*@paramvideoOutPath
*视频与音频结合之后的视频的路径
*/
publicstaticvoidconvetor(StringvideoInputPath,StringaudioInputPath,StringvideoOutPath)
throwsException{
Processprocess=null;
InputStreamerrorStream=null;
InputStreamReaderinputStreamReader=null;
BufferedReaderbr=null;
try{
//ffmpeg命令
Stringcommand=FFMPEG_PATH+"-i"+videoInputPath+"-i"+audioInputPath
+"-c:vcopy-c:aaac-strictexperimental"+
"-map0:v:0-map1:a:0"
+"-y"+videoOutPath;
process=Runtime.getRuntime().exec(command);
errorStream=process.getErrorStream();
inputStreamReader=newInputStreamReader(errorStream);
br=newBufferedReader(inputStreamReader);
//用来收集错误信息的
Stringstr="";
while((str=br.readLine())!=null){
System.out.println(str);
}
process.waitFor();
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(br!=null){
br.close();
}
if(inputStreamReader!=null){
inputStreamReader.close();
}
if(errorStream!=null){
errorStream.close();
}
}
}
//递归函数
publicstaticvoidgetAll(Stringpath)throwsException{
StringvideoInputPath="";
StringaudioInputPath="";
StringvideoOutPath="";
Filefile=newFile(path);
if(file.isDirectory()){
File[]files=file.listFiles();
for(Filef:files){
getAll(f.getPath());
if(f.isFile()){
if(f.getName().endsWith(".m4s")){
if(f.getName().endsWith("audio.m4s"))
audioInputPath=file.getPath()+"\\audio.m4s";
if(f.getName().endsWith("video.m4s"))
videoInputPath=file.getPath()+"\\video.m4s";
videoOutPath=file.getPath()+"\\all.mp4";
if(!videoInputPath.equals(""))
convetor(videoInputPath,audioInputPath,videoOutPath);
}
}
}
}
}
}
我最后用了好几分钟合成了30个完整的视频。体会了递归的强大。
总结
到此这篇关于使用Java和ffmpeg把音频和视频合成视频的操作方法的文章就介绍到这了,更多相关javaffmpeg音频合成视频内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。