FFmpeg安装与使用+Java API/SpringBoot项目使用

目录

下载安装

介绍与简单使用

在项目中的使用

配置文件

工具类

使用


下载安装

Download FFmpeg

 

 解压到指定文件夹

介绍与简单使用

FFmpeg是一个开源的跨平台视频和音频处理工具,可以处理各种格式的音视频文件。

FFmpeg的一些常用命令:

1. 查看文件信息 ffmpeg -i input_file 这个命令可以查看输入文件的详细信息,包括视频分辨率、帧率、码率、音频采样率、声道数等参数。

2. 视频转码 ffmpeg -i input_file -codec:v libx264 -codec:a libmp3lame output_file 这个命令将输入文件转换成H.264视频和MP3音频的输出文件。

 -codec:v 表示视频编码器, -codec:a 表示音频编码器。

3. 裁剪视频 ffmpeg -i input_file -ss start_time -t duration output_file 这个命令可以在指定的时间点剪辑视频,并输出为新的文件。 -ss 表示开始时间, -t 表示裁剪的时长。

4. 视频剪切 ffmpeg -i input_file -ss start_time -to end_time output_file 这个命令也可以对视频进行剪辑,但是使用的是不同的参数。 -ss 表示开始时间, -to 表示结束时间。

5. 视频缩小 ffmpeg -i input_file -vf scale=320:240 output_file 这个命令可以将输入文件缩小到指定的分辨率。 -vf 表示视频滤镜。

6. 视频合并 ffmpeg -i "concat:input_file1|input_file2" -codec copy output_file 这个命令可以将多个视频文件合并成一个文件。

concat: 后面的部分表示要合并的文件列表,之间用|分隔。 

在项目中的使用

配置文件


video-process:
  ffmpeg-path: F:/AllSoft/ffmpeg-master-latest-win64-gpl/bin/ffmpeg.exe

工具类

可删除冗余代码

package com.scm.utils;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Mp4VideoUtil extends VideoUtil {

    String ffmpeg_path = "D:\\Program Files\\ffmpeg-20180227-fa0c9d6-win64-static\\bin\\ffmpeg.exe";//ffmpeg的安装位置
    String video_path = "D:\\BaiduNetdiskDownload\\test1.avi";
    String mp4_name = "test1.mp4";
    String mp4folder_path = "D:/BaiduNetdiskDownload/Movies/test1/";
    public Mp4VideoUtil(String ffmpeg_path, String video_path, String mp4_name, String mp4folder_path){
        super(ffmpeg_path);
        this.ffmpeg_path = ffmpeg_path;
        this.video_path = video_path;
        this.mp4_name = mp4_name;
        this.mp4folder_path = mp4folder_path;
    }
    //清除已生成的mp4
    private void clear_mp4(String mp4_path){
        //删除原来已经生成的m3u8及ts文件
        File mp4File = new File(mp4_path);
        if(mp4File.exists() && mp4File.isFile()){
            mp4File.delete();
        }
    }
    /**
     * 视频编码,生成mp4文件
     * @return 成功返回success,失败返回控制台日志
     */
    public String generateMp4(){
        //清除已生成的mp4
//        clear_mp4(mp4folder_path+mp4_name);
        clear_mp4(mp4folder_path);
        /*
        ffmpeg.exe -i  lucene.avi -c:v libx264 -s 1280x720 -pix_fmt yuv420p -b:a 63k -b:v 753k -r 18 .\lucene.mp4
         */
        List<String> commend = new ArrayList<String>();
        //commend.add("D:\\Program Files\\ffmpeg-20180227-fa0c9d6-win64-static\\bin\\ffmpeg.exe");
        commend.add(ffmpeg_path);
        commend.add("-i");
//        commend.add("D:\\BaiduNetdiskDownload\\test1.avi");
        commend.add(video_path);
        commend.add("-c:v");
        commend.add("libx264");
        commend.add("-y");//覆盖输出文件
        commend.add("-s");
        commend.add("1280x720");
        commend.add("-pix_fmt");
        commend.add("yuv420p");
        commend.add("-b:a");
        commend.add("63k");
        commend.add("-b:v");
        commend.add("753k");
        commend.add("-r");
        commend.add("18");
//        commend.add(mp4folder_path  + mp4_name );
        commend.add(mp4folder_path  );
        String outstring = null;
        try {
            ProcessBuilder builder = new ProcessBuilder();
            builder.command(commend);
            //将标准输入流和错误输入流合并,通过标准输入流程读取信息
            builder.redirectErrorStream(true);
            Process p = builder.start();
            outstring = waitFor(p);

        } catch (Exception ex) {

            ex.printStackTrace();

        }
//        Boolean check_video_time = this.check_video_time(video_path, mp4folder_path + mp4_name);
        Boolean check_video_time = this.check_video_time(video_path, mp4folder_path);
        if(!check_video_time){
            return outstring;
        }else{
            return "success";
        }
    }

    public static void main(String[] args) throws IOException {

//        ProcessBuilder builder = new ProcessBuilder();
//        builder.command("D:\\Program Files\\EditPlus\\EditPlus.exe");
//        //将标准输入流和错误输入流合并,通过标准输入流程读取信息
//        builder.redirectErrorStream(true);
//        Process p = builder.start();

        //ffmpeg的路径
        String ffmpeg_path = "D:\\soft\\ffmpeg\\ffmpeg.exe";//ffmpeg的安装位置
        //源avi视频的路径
        String video_path = "D:\\develop\\upload\\02-概述-分库分表是什么.avi";
        //转换后mp4文件的名称
        String mp4_name = "02-概述-分库分表是什么.mp4";
        //转换后mp4文件的路径
        String mp4_path = "D:\\develop\\upload\\02-概述-分库分表是什么.mp4";
        //创建工具类对象
        Mp4VideoUtil videoUtil = new Mp4VideoUtil(ffmpeg_path,video_path,mp4_name,mp4_path);
        //开始视频转换,成功将返回success
        String s = videoUtil.generateMp4();
        System.out.println(s);
    }
}

使用

    //ffmpeg的路径
    @Value("${video-process.ffmpeg-path}")
    private String ffmpegpath;
public void test(){

String video_path="xx";
String mp4_name="";
String mp4_path="";
//创建工具类对象
Mp4VideoUtil videoUtil = new Mp4VideoUtil(ffmpegpath, video_path, mp4_name, mp4_path);
//开始视频转换,成功将返回success,失败返回失败原因
String result = videoUtil.generateMp4();
if (!result.equals("success")) 
{
log.debug("视频转码失败,原因:{}", result);
}
}

猜你喜欢

转载自blog.csdn.net/qq_53679247/article/details/130871486