1、maven的pom.xml文件中导入相应的配置下载jar包
<!-- javacv视频音频工具包 -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.2</version>
</dependency>
2、上面的jar包会下载的很慢很慢,想快的话需要在maven的仓库setting.xml配置阿里的镜像下载
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
3、工具类代码
package com.chindle.edu.educommon.util;
import org.bytedeco.javacv.*;
import java.io.File;
/**
* @className:MergeMovieAndVoiceDemo
* @Author:cong
* @Date:2020/7/9 9:17
* @Description: 消音视频和配音的合成
*/
public class MergeMovieAndVoiceUtil {
public static String mergeAudioAndVideo(String videoPath, String audioPath, String outPut) throws Exception {
File file = new File(videoPath);
FrameRecorder recorder = null;
FrameGrabber grabber1 = null;
FrameGrabber grabber2 = null;
try {
//抓取视频帧
grabber1 = new FFmpegFrameGrabber(videoPath);
//抓取音频帧
grabber2 = new FFmpegFrameGrabber(audioPath);
grabber1.start();
grabber2.start();
//创建录制
recorder = new FFmpegFrameRecorder(outPut,
grabber1.getImageWidth(), grabber1.getImageHeight(),
grabber2.getAudioChannels());
recorder.setFormat("mp4");
recorder.setFrameRate(grabber1.getFrameRate());
recorder.setSampleRate(grabber2.getSampleRate());
recorder.start();
Frame frame1;
Frame frame2;
//然后录入音频
while ((frame2 = grabber2.grabFrame()) != null) {
recorder.record(frame2);
}
//先录入视频
while ((frame1 = grabber1.grabFrame()) != null) {
recorder.record(frame1);
}
grabber1.stop();
grabber2.stop();
recorder.stop();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (recorder != null) {
recorder.release();
}
if (grabber1 != null) {
grabber1.release();
}
if (grabber2 != null) {
grabber2.release();
}
} catch (FrameRecorder.Exception e) {
e.printStackTrace();
}
}
return outPut;
}
public static void main(String[] args) throws Exception {
String movie = "C:/Users/welcome/Desktop/2.avi";
String audio = "C:/Users/welcome/Desktop/1.mp3";
String resultPath = "C:/Users/welcome/Desktop/1/d.mp4";
mergeAudioAndVideo(movie, audio, resultPath);
}
}