avi和音频合成 ffmpeg_使用Java和ffmpeg把音频和视频合成视频的操作方法

FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。 FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。这个项目是由Fabrice Bellard发起的,现在由Michael Niedermayer主持。可以轻易地实现多种视频格式之间的相互转换,例如可以将摄录下的视频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的程序,就可以合成啦。

package com.lovely.test;

import java.io.BufferedReader;

import java.io.File;

//import java.io.FileInputStream;

//import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.UUID;

/**

*

* 视频中获取音频文件

*

*/

public class TestFfmpeg {

// FFmpeg全路径

private static final String FFMPEG_PATH = “D:\softWare\tools\joyTool\ffmpeg\bin\ffmpeg.exe”;

public static void main(String[] args) {

String path = “E:\StudyVedio\ComputerScience\US”;

try {

getAll(path);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 具体合成视频函数

* @param videoInputPath

* 原视频的全路径

*

* @param audioInputPath

* 音频的全路径

*

* @param videoOutPath

* 视频与音频结合之后的视频的路径

*/

public static void convetor(String videoInputPath, String audioInputPath, String videoOutPath)

throws Exception {

Process process = null;

InputStream errorStream = null;

InputStreamReader inputStreamReader = null;

BufferedReader br = null;

try {

// ffmpeg命令

String command = FFMPEG_PATH + ” -i ” + videoInputPath + ” -i ” + audioInputPath

+ ” -c:v copy -c:a aac -strict experimental ” +

” -map 0:v:0 -map 1:a:0 “

+ ” -y ” + videoOutPath;

process = Runtime.getRuntime().exec(command);

errorStream = process.getErrorStream();

inputStreamReader = new InputStreamReader(errorStream);

br = new BufferedReader(inputStreamReader);

// 用来收集错误信息的

String str = “”;

while ((str = br.readLine()) != null) {

System.out.println(str);

}

process.waitFor();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (br != null) {

br.close();

}

if (inputStreamReader != null) {

inputStreamReader.close();

}

if (errorStream != null) {

errorStream.close();

}

}

}

// 递归函数

public static void getAll(String path) throws Exception {

String videoInputPath = “”;

String audioInputPath = “”;

String videoOutPath = “”;

File file = new File(path);

if (file.isDirectory()) {

File[] files = file.listFiles();

for (File f : 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把音频和视频合成视频的操作方法的文章就介绍到这了,更多相关java ffmpeg音频合成视频内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92722 人正在系统学习中 相关资源:连续梁的弯矩计算软件V1.0绿色版_连续梁-其它代码类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月12日
下一篇 2021年1月12日

相关推荐