使用java调用ffmpeg命令将视频分屏并音视频同时播放(二分屏)

实现想法

使用ffmpeg命令中的filter_complex(滤镜)参数来进行展示

引入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>
        
       

命令

ffmpeg -i /file/test.mp4 -i /file/test.mp4  -filter_complex "[0:v]pad=iw*2:ih*1[a];[a][1:v]overlay=w" out.mp4

核心方法

  /**
     * 操作系统命令
     *
     * @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();
        }

    }
 /**
     *
     *
     * @param videoPath  源视频路径
     * @param filterPath 带透明通道的视频路径
     * @param outputPath 目标视频路径
     */
    public static void addSpecialEffects(String videoPath, String filterPath,int width,int height, String outputPath) throws Exception {
        List<String> command = Lists.newArrayList();
        //获取JavaCV中的ffmpeg本地库的调用路径
        String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
        command.add(ffmpeg);
        command.add("-i");
        command.add(videoPath);
        command.add("-i");
        command.add(filterPath);
        command.add("-filter_complex");
        //2分屏 加2声音
        command.add("[0:v]pad=iw*2:ih*1[a];[a][1:v]overlay=w");
        command.add("-filter_complex");
        command.add("amix=inputs=2:duration=first:dropout_transition=2,volume=1");
        command.add("-s");
        command.add(width+"*"+height);

        command.add(outputPath);
        long start = System.currentTimeMillis();
        execute(command);
       

调用

public static void main(String[] args) throws Exception {
        addSpecialEffects("./filelist/视频002.mp4",
                "./filelist/视频001.mp4",1920,1080,"./filelist/test.mp4");
    }

成功截图

注意听,音视频都是有的
在这里插入图片描述

指定分辨率截图
在这里插入图片描述

命令说明

filter_complex滤镜的参数结构说明

[0:v]  这个里头两个参数,1表示的是操作对象的编号。在本例中0就是原始视频文件test.mp4,另一个参数v表示操作对象里的视频信息。

pad=iw*3 pad是将合成的视频宽高,这里iw代表第一个视频的宽,iw*3代表合成后的视频宽度加倍
ih  ih为第一个视频的高
overlay  覆盖

指定分辨率

-s 1280*720

文档参考

javacv源码

学习java群

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一枚开发小咸鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值