云计算百科
云计算领域专业知识百科平台

java FFmpeg 使用 及 服务器CentOS 7 FFmpeg安装配置

项目中使用了视频,要分析视频获取第几帧来作为视频封面。此文章旨在记录解决问题的过程,以及遇到的问题。

1. java  pom.xml文件中引入,Maven库:

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

上面两个库的版本一定要对应,具体版本可以查看Maven仓库中查阅。

上面完成,项目重新加载maven进行编译。

2. 在项目中使用

我的项目使用很简单,就只获取到第几帧作为图片,代码如下,

public Map<String, String> getVideoImage(String filePath) throws Exception {
String name = getFileNameFromUrl(filePath);
FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath);
ff.start();
//判断是否是竖屏小视频
String rotate = ff.getVideoMetadata("rotate");
int ffLength = ff.getLengthInFrames();
Frame f;
int i = 0;
int index = 3;//截取图片第几帧
Map<String, String> targetFilePath = null;
while (i < ffLength) {
f = ff.grabImage();
if (i == index) {
if (null != rotate && rotate.length() > 1) {
targetFilePath = doExecuteFrame(f, true, name); //获取缩略图
} else {
targetFilePath = doExecuteFrame(f, false, name); //获取缩略图
}
break;
}
i++;
}
ff.stop();
return targetFilePath; //返回的是视频第N帧
}

这一步到此,java后端的项目基本就成功了,剩下的是上传minio,返回地址,这个走正常的上传就可以,并自己组装返回数据。

3. 服务器安装配置

找了各种资料,yum安装,压缩包安装,git源代码安装的。我尝试了yum安装及git源码安装。

最后yum安装的版本比较低,只有2.8.15,跟使用的版本不大匹配。

最后用的git源码,使用make编译安装:

创建任意目录,在创建的目录中,键入命令:

git clone https://github.com/FFmpeg/FFmpeg.git

在linux 使用git,需要安装git,yum install git 安装即可。然后进入FFmpeg目录:

cd FFmpeg
git checkout release/4.4

其中 release/4.4 是分支名,想要哪个版本可以去GitHub – FFmpeg/FFmpeg: Mirror of https://git.ffmpeg.org/ffmpeg.git中找一下;

运行完成以后,接着输入以下指令:

./configure
make
make install

在运行./configure 时可能会报错,大概是一些其他库没有安装,比如nasm,yasm等,去直接安装一下就行。

运行make命令时间比较长,耐心等待一下。

安装完成以后,需要配置环境变量,ffmpeg  -version命令才会查找到相关信息。

我的配置文件 是/etc/profile,根据自己实际情况打开添加就行,在打开的文件中,添加以下两行,

其中PATH 内容为你的安装路径,如果在之前没有指定路径的话,我的默认路径为/usr/local/bin下面。

export PATH=/usr/local/bin:$PATH
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/bin"

然后保存,退出,

输入命令: source /etc/profile是文件生效。

还有一项配置,我也不知道干啥,我也配置了,

vim /etc/ld.so.conf

# 输入以下内容

include ld.so.conf.d/*.conf
# ffmpeg 安装路径
/usr/local/bin

配置完成以后,使用 ffmpeg -version 查看版本,如果信息成功加载了,说明安装成功了。

补充:

在服务器端未安装之前,本地运行完全没问题,发布到服务器后,报了两个错误。

java.lang.NoClassDefFoundError: Could not initialize class org.bytedeco.ffmpeg.global.avutil
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.bytedeco.javacv.FFmpegFrameGrabber

这两个错误大概是版本冲突,或者没有此版本的依赖,所以需要排查自己服务器上的版本信息。

如有错误欢迎指正,互相学习。

本文参考:

linux安装并配置ffmpeg_ffmpeg 默认安装在linux在什么位置-CSDN博客

赞(0)
未经允许不得转载:网硕互联帮助中心 » java FFmpeg 使用 及 服务器CentOS 7 FFmpeg安装配置
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!