项目中使用了视频,要分析视频获取第几帧来作为视频封面。此文章旨在记录解决问题的过程,以及遇到的问题。
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博客
评论前必须登录!
注册