使用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");
    }

成功截图

注意听,音视频都是有的
使用java调用ffmpeg命令将视频分屏并音视频同时播放(二分屏)_第1张图片

指定分辨率截图
使用java调用ffmpeg命令将视频分屏并音视频同时播放(二分屏)_第2张图片

命令说明

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

你可能感兴趣的:(java调用ffmpeg,音视频,java,开发语言)