javacv ffmpeg使用原生ffmpeg命令方式

 更新时间:2024年11月07日 10:00:02   作者:搬山境KL攻城狮  
在使用javacv集成ffmpeg进行视频处理时,发现使用ffmpeg-6.0-1.5.9版本出现原生命令执行失败的问题,通过降级至ffmpeg-5.1.2-1.5.8版本,问题得到解决,此外,ffprobe可以用于获取视频属性,需确保视频片段属性一致性

javacv ffmpeg使用原生ffmpeg命令

测试过程中,

发现ffmpeg-6.0-1.5.9-linux-x86_64.jar 存在问题(ffmpeg原生命令执行失败)

降级到ffmpeg-5.1.2-1.5.8-linux-x86_64.jar版本正常

<javacv.version>1.5.8</javacv.version>

    <dependencies>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>${javacv.version}</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>ffmpeg</aifactId>
            <version>5.1.2-${javacv.version}</version>
            <classifier>linux-x86_64</classifier>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>Windows</id>
            <activation>
                <os>
                    <!-- mvn enforcer:display-info -->
                    <family>windows</family>
                </os>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>org.bytedeco</groupId>
                    <artifactId>ffmpeg</artifactId>
                    <version>5.1.2-${javacv.version}</version>
                    <classifier>windows-x86_64</classifier>
                </dependency>
            </dependencies>
        </profile>
        <profile>
           <id>Mac</id>
           <activation>
               <os>
                   <!-- mvn enforcer:display-info -->
                   <family>mac</family>
               </os>
           </activation>
           <dependencies>
               <dependency>
                   <groupId>org.bytedeco</groupId>
                   <artifactId>ffmpeg</artifactId>
                   <version>5.1.2-${javacv.version}</version>
                   <classifier>macosx-x86_64</classifier>
               </dependency>
           </dependencies>
       </profile>
    </profiles>

1. ffmpeg

org.bytedeco.ffmpeg.ffmpeg
org.bytedeco.ffmpeg.ffprobe
  • 版本号
   String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
   System.out.println("ffmpeg path=>" + ffmpeg);
   ProcessBuilder pb = new ProcessBuilder(ffmpeg, "-version");
   pb.inheritIO().start().waitFor();
  • 直接拼接视频(前提各个视频片段帧率等属性一致)
        // 输入视频文件路径
        List<String> inputFiles = Arrays.asList("video1.mp4", "video2.mp4");
        // 输出视频文件路径
        String outputFile = "output.mp4";
        // 拼接模板文件
        String modelFile = "modelFile.txt";
        // 创建拼接模板文件
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(modelFile))) {
            for (String inputFile : inputFiles) {
                writer.write("file '" + inputFile + "'");
                writer.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
        ProcessBuilder pb = new ProcessBuilder(ffmpeg,
                "-f", "concat",
                "-safe", "0",
                "-i", modelFile,
                "-c", "copy",
                outputFile);
        pb.inheritIO().start().waitFor();

2. ffprobe

  • 版本号
    public static void main(String[] args) throws IOException, InterruptedException {
        String ffprobe = Loader.load(org.bytedeco.ffmpeg.ffprobe.class);
        System.out.println("ffprobe path=>" + ffprobe);
        ProcessBuilder pb = new ProcessBuilder(ffprobe, "-version");
        pb.inheritIO().start().waitFor();
    }
  • 视频属性

更多用法:help、大模型

ffprobe -h topic
        String ffprobe = Loader.load(org.bytedeco.ffmpeg.ffprobe.class);
        ProcessBuilder pb = new ProcessBuilder(ffprobe,
                "-v", "error",
                "-print_format", "json",
                "-show_streams",
                "video1.mp4");
        pb.inheritIO().start().waitFor();

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MyBatis-Plus实现多表联查的方法实战

    MyBatis-Plus实现多表联查的方法实战

    这篇文章主要给大家介绍了关于MyBatis-Plus实现多表联查的方法,MyBatis Plus是一款针对MyBatis框架的增强工具,它提供了很多方便的方法来实现多表联查,需要的朋友可以参考下
    2023-07-07
  • Gradle build 报错:Received status code 400 from server

    Gradle build 报错:Received status code 400 from server

    这篇文章主要介绍了Gradle build 报错:Received status code 400 from server,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • spring boot实现超轻量级网关的方法(反向代理、转发)

    spring boot实现超轻量级网关的方法(反向代理、转发)

    这篇文章主要介绍了spring boot实现超轻量级网关(反向代理、转发)的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • spring boot 自动更新静态文件和后台代码的实例

    spring boot 自动更新静态文件和后台代码的实例

    下面小编就为大家分享一篇spring boot 自动更新静态文件和后台代码的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Spring模块详解之Spring ORM和Spring Transaction详解

    Spring模块详解之Spring ORM和Spring Transaction详解

    Spring ORM 是 Spring 框架的模块之一,旨在简化与 JPA、Hibernate、JDO 等 ORM 工具的集成,通过提供统一的 API 和模板类,如 HibernateTemplate 和 JpaTemplate,Spring ORM 使开发者可以更便捷地执行数据库操作,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • 列举java语言中反射的常用方法及实例代码

    列举java语言中反射的常用方法及实例代码

    反射机制指的是程序在运行时能够获取自身的信息。这篇文章主要介绍了列举java语言中反射的常用方法,需要的朋友可以参考下
    2019-07-07
  • 详解Springboot下载Excel的三种方式

    详解Springboot下载Excel的三种方式

    本文给大家分享Springboot下载Excel三种方式,主要分为浏览器下载和代码本地下载实现的方式,针对每种实现方式给大家介绍的非常详细,需要的朋友参考下吧
    2021-07-07
  • Springboot整合hibernate validator 全局异常处理步骤详解

    Springboot整合hibernate validator 全局异常处理步骤详解

    本文分步骤给大家介绍Springboot整合hibernate validator 全局异常处理,补呢文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • Java 8函数式接口之Consumer用法示例详解

    Java 8函数式接口之Consumer用法示例详解

    这篇文章主要为大家介绍了Java 8函数式接口之Consumer用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • java实现解析二进制文件的方法(字符串、图片)

    java实现解析二进制文件的方法(字符串、图片)

    本篇文章主要介绍了java实现解析二进制文件的方法(字符串、图片),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论