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

经验分享 程序员 微信小程序 职场和发展