使用Java将视频中某一帧抽取为封面图片

由于业务需求需将视频中的某帧进行截取作为该视频封面,网上太多教程过于复杂麻烦,经本人研究发现可以使用Java调用FFmpeg来进行处理。

/**
 * 获取指定的视频文件后进行封面截图为png并保存到指定目录
 *
 * @param videoFile 视频媒体文件
 * @param fileName  文件名
 */
public String generateCover(String videoFile, String fileName) {

    String[] file = videoFile.split("\\.");
    // 截图保存位置
    String fileCover = file[0] + ".png";

    ProcessBuilder processBuilder = new ProcessBuilder();
    // 重定向错误流,防阻塞
    processBuilder.redirectErrorStream(true);
    // 调用ffmpeg.exe 执行截取命令,需要服务器中安装了ffmpeg并配置了环境变量
    processBuilder.command("ffmpeg.exe", "-i", videoFile, "-ss", "00:00:03", "-vframes", "1", fileCover);

    try {
        Process process = processBuilder.start();
        // 获取流信息
        BufferedReader reader =
                new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        int exitCode = process.waitFor();
        System.out.println("\nExited with error code : " + exitCode);
    } catch (IOException | InterruptedException e) {
        return e.toString();
    }
    return fileName.split("\\.")[0] + ".png";
}

最终处理结果

posted @ 2024-02-20 15:14  MineLSG  阅读(716)  评论(0编辑  收藏  举报