javacv相关学习使用java调用ffmpeg命令合并音视频解决时长不一致问题
目录
javacv相关学习:使用java调用ffmpeg命令合并音视频(解决时长不一致问题)
上期回顾
实现想法
1.获取JavaCV中的ffmpeg本地库的调用路径 。
2.拼接命令
3.使用ProcessBuilder类 来操作系统进程。
引入javacv版本
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>4.4-1.5.6</version>
</dependency>
核心方法
/**
* 操作系统进程
*
* @return
*/
public static void execute(List<String> command) {
try {
String join = String.join(" ", command);
System.out.println(join);
ProcessBuilder process = new ProcessBuilder(command);
process.inheritIO().start().waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
调用
public static void main(String[] args) {
List<String> command = new ArrayList<>();
//获取 JavaCV 中的 ffmpeg 本地库的调用路径
String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
command.add(ffmpeg);
command.add("-re");
command.add("-i");
command.add("./record/f1_1.flv");
command.add("-i");
command.add("./record/test.mp3");
command.add("-filter_complex");
command.add("amix");
command.add("-map");
command.add("0:v");
command.add("-map");
command.add("0:a");
command.add("-map");
command.add("1:a");
//-shortest 会取视频或音频两者短的一个为准,多余部分则去除不合并
command.add("-shortest");
//
//可以推到 流媒体服务器上。 例如 srs
//command.add("rtmp://8.136.201.114:1935/live/livestream");
//文件夹需要自己创建。
//也可以推到其他的文件夹(相当于录像)
command.add("./file/test.flv");
long start = System.currentTimeMillis();
execute(command);
System.out.println("用时:" + (System.currentTimeMillis()-start));
}
成功截图
这一次我们举例用的是 ffmpag 中的推流命令。
ffmpeg -re -i 原文件(流) -c copy -f 格式 -y 目标文件(流)
ffmpag 中有很多的命令。后面有时间我会整理一些命令给大家参考。
文档参考
学习 java 群
java 交流群(限订阅了的加):868794080