Java调用ffmpeg实现视频转gif、webp动图
安装ffmpeg
linux环境
yum install epel-release -y #查看centos版本 cat /etc/redhat-release #由于CentOS没有官方FFmpeg rpm软件包。但是,我们可以使用第三方YUM源(Nux Dextop)完成此工作 #centos7安装 sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm #centos6安装 sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm #安装ffmpeg yum install ffmpeg ffmpeg-devel -y #查看 ffmpeg
Windows环境
下载
配置环境变量
命令行调试参数
下面是调试命令
#先生成调色板 ffmpeg -v warning -ss 2 -t 5 -i http://qimg5.youxiake.com/app/201911/07/video/MjI5MDg4.mp4 -vf "fps=3,scale=320:-1:flags=lanczos,palettegen" -y t.png #生成动图 ffmpeg -v warning -ss 2 -t 5 -i http://qimg5.youxiake.com/app/201911/07/video/MjI5MDg4.mp4 -i t.png -lavfi "fps=3,scale=320:-1:flags=lanczos [x]; [x][1:v] paletteuse" -y test.gif
java代码
public static void main(String[] args) {
String name = UUID.randomUUID().toString().replaceAll("-", "");
String paletteFile = name + ".png";
String gifFile = name + ".gif";
boolean isComplete = false;
//操作ffmpeg生成gif图片
for (int i = 0; i < 5; i++) {
try {
//生成调色板
Process p = new ProcessBuilder()
.command("C:\software\ffmpeg\bin\ffmpeg",
"-v", "warning",
"-ss", "2",
"-t", "10",
"-i", "http://qimg5.youxiake.com/app/201911/06/video/Mjc2MTg2.mp4",
"-vf", "fps=5,scale=400:-1:flags=lanczos,palettegen",
"-y", paletteFile, "-vn")
.redirectError(new File("stderr.txt"))
.start();
isComplete = p.waitFor(10, TimeUnit.SECONDS);
if (!isComplete) {
System.out.println("生成调色板出错");
} else {
p = new ProcessBuilder()
.command("C:\software\ffmpeg\bin\ffmpeg",
"-v", "warning",
"-ss", "2",
"-t", "10",
"-i", "http://qimg5.youxiake.com/app/201911/06/video/Mjc2MTg2.mp4",
"-i", paletteFile,
"-lavfi", "fps=5,scale=400:-1:flags=lanczos [x]; [x][1:v] paletteuse",
"-y", gifFile, "-vn")
.redirectError(new File("stderr.txt"))
.start();
isComplete = p.waitFor(10, TimeUnit.SECONDS);
if (isComplete) {
System.out.println("生成gif成功");
break;
} else {
System.out.println("生成gif出错");
}
}
} catch (Exception e) {
System.out.println("生成gif出错");
}
}
}
“C:softwareffmpeginffmpeg"是Windows环境下ffmpeg.exe的路径,虽然配置了环境变量,但是不指定路径的情况下回报错,不指定为什么。 在Linux环境下,配置好环境变量后可以修改成"ffmpeg”。
