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();总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Gradle build 报错:Received status code 400 from server
这篇文章主要介绍了Gradle build 报错:Received status code 400 from server,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-07-07
spring boot实现超轻量级网关的方法(反向代理、转发)
这篇文章主要介绍了spring boot实现超轻量级网关(反向代理、转发)的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-11-11
Spring模块详解之Spring ORM和Spring Transaction详解
Spring ORM 是 Spring 框架的模块之一,旨在简化与 JPA、Hibernate、JDO 等 ORM 工具的集成,通过提供统一的 API 和模板类,如 HibernateTemplate 和 JpaTemplate,Spring ORM 使开发者可以更便捷地执行数据库操作,感兴趣的朋友跟随小编一起看看吧2024-09-09
Springboot整合hibernate validator 全局异常处理步骤详解
本文分步骤给大家介绍Springboot整合hibernate validator 全局异常处理,补呢文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2024-01-01


最新评论