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

免费扫码领取红包

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚开发小咸鱼

原创不宜,请作者喝杯咖啡吧。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值