我是靠谱客的博主 欢喜花瓣,最近开发中收集的这篇文章主要介绍javacv相关学习:使用java调用ffmpeg命令合并音视频(解决时长不一致问题)上期回顾,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
上期回顾
使用javacv调用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中有很多的命令。后面有时间我会整理一些命令给大家参考。
文档参考
javacv源码
部分参考文档
学习java群
java交流群(限订阅了的加):868794080
免费扫码领取红包
最后
以上就是欢喜花瓣为你收集整理的javacv相关学习:使用java调用ffmpeg命令合并音视频(解决时长不一致问题)上期回顾的全部内容,希望文章能够帮你解决javacv相关学习:使用java调用ffmpeg命令合并音视频(解决时长不一致问题)上期回顾所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复