目录

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));
    }

成功截图

https://i-blog.csdnimg.cn/blog_migrate/edb89ed86e446bcf1ecc8613f038c667.png

https://i-blog.csdnimg.cn/blog_migrate/3af038b91954009b2b191d9d60e20137.png

这一次我们举例用的是 ffmpag 中的推流命令。

ffmpeg -re -i 原文件() -c copy -f 格式 -y 目标文件()

ffmpag 中有很多的命令。后面有时间我会整理一些命令给大家参考。

文档参考

学习 java 群

java 交流群(限订阅了的加):868794080

免费扫码领取红包

https://i-blog.csdnimg.cn/blog_migrate/7f56f2ac462aed0ae766bff5cf260d9d.jpeg#pic_center