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

2023-10-31

目录

下载安装

介绍与简单使用

在项目中的使用

配置文件

工具类

使用


下载安装

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);
}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FFmpeg安装与使用+Java API/SpringBoot项目使用 的相关文章

随机推荐

  • 那些你可能遇到的 Linux 命令?什么,你还不知道?赶紧收藏?完善中!

    文章目录 一 Linux 进程 1 通过进程名查找进程号 1 1 ps aux ps ef diff 1 2 ps aux ps aux 什么 它们不一样 1 3 grep awk 取出进程号 取出进程号并 Kill 2 通过进程号查看进程
  • LINUX应用和驱动交互的四种方式

    Linux开发中 应用读取数据时往往会遇到驱动尚未获得有效数据的情况 所以需要采用适合的同步方式 1 非阻塞方式 非阻塞方式 顾名思义就是不管数据是否准备好 驱动都会返回结果 采用这种方式就需要应用不停地重复查询 查询硬件的线程就会一直都占
  • Centos7 升级openssl-1.1.1s及openssh-9.1p1(附脚本)

    主要是上个月openssl出现了漏洞 因此要对服务器的进行升级 建议如果没问题还是尽量别升级 主要步骤是2 脚本内容也只包含升级 1和3是开启和关闭telnet 不建议使用telnet 1 安装和启动telnet 实际中我没使用telnet
  • 数据结构前言

    一 什么是数据结构 数据结构是计算机存储 组织数据的方式 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合 上面是百度百科的定义 通俗的来讲数据结构就是数据元素集合与数据元素集合或者数据元素与数据元素之间的组成形式 举个简单明了的
  • Web Worker 用法

    一 概述 JavaScript 语言采用的是单线程模型 也就是说 所有任务只能在一个线程上完成 一次只能做一件事 前面的任务没做完 后面的任务只能等着 随着电脑计算能力的增强 尤其是多核 CPU 的出现 单线程带来很大的不便 无法充分发挥计
  • DBaaS体系及特性

    用户对云计算的交付能力已经不再满足于单纯的基础设施 IaaS 交付 他们希望数据中心中的更多传统IT 服务能以云服务模式进行交付 其中最为迫切的就是数据库 将数据库以云服务模式交付给用户 就是数据库即服务 DBaaS 也称云数据库 传统数据
  • VirusTotal——您身边的企业安全专家

    本文由 Cloud Ace 整理发布 Cloud Ace 是谷歌云全球战略合作伙伴 拥有 300 多名工程师 也是谷歌最高级别合作伙伴 多次获得 Google Cloud 合作伙伴奖 作为谷歌托管服务商 我们提供谷歌云 谷歌地图 谷歌办公套
  • 基于linux环境下安装jre + eclipse cdt

    博客的排版真的好糟糕 请看点击打开链接 一 下载所用到的软件安装包 1 java运行环境 jre 8u112 linux x64 tar gz 2 elipse cdt版本 eclipse cpp neon 2 linux gtk x86
  • pyahocorasick和pyltp包安装方法

    1 安装pyahocorasick 包 pip install pyahocorasick i Simple Index 这个需要VS环境 如果命令行安装提示没有VS环境可以进入 用VS命令行执行pip命令 即可安装成功 2 安装pyltp
  • Vue中el-dialog的用法

    写入HTML
  • 57 openEuler搭建Mariadb数据库服务器-管理数据库用户

    文章目录 57 openEuler搭建Mariadb数据库服务器 管理数据库用户 57 1 创建用户 57 2 查看用户 57 3 修改用户 57 3 1 修改用户名 57 3 2 修改用户示例 57 3 3 修改用户密码 57 3 4 修
  • 关于javaSE8之后的默认方法的整理

    网络中的说法 关于java8接口中默认方法的使用 8在接口中引入了默认方法 通过在方法前加上default关键字就可以在接口中写方法的默认实现 有点类似于C 中的多继承 但是当多个接口或父类中有相同签名的方法时 会引发一些问题 经过实验得出
  • 射频电路学习之滤波电路

    文章目录 前言 一 滤波电路的分类 二 滤波电路的主要参数 1 插入损耗 IL 2 波纹系数 3 频带宽度 4 矩形系数 5 阻带抑制 三 滤波电路设计 1 集总参数滤波电路 巴特沃斯滤波电路 切比雪夫滤波电路 归一化滤波电路的变换 电路变
  • Topaz Video AI for mac(视频增强和修复工具)

    Topaz Video AI for Mac是一款视频增强和修复工具 采用了人工智能技术 可以提高视频的清晰度 降噪 去抖动和插帧等 这款软件支持多种视频格式 包括MP4 MOV AVI等 使用Topaz Video AI for Mac
  • Python基础—面向对象(超详版)

    Python基础 面向对象 面向对象简介 什么是面向对象 类与对象 父类与子类 面向对象的特性 单继承与多继承 单继承 多继承 多层继承 封装 多态 重写与调用 python重写 python调用 super函数 前言 个人主页 以山河作礼
  • VS 使用System.Console打印时输出窗口不显示

    在项目属性中勾选 启用visual studio承载进程 可以在输出窗口中的调试打印信息中显示System Console打印信息
  • 安装PYG

    目录 1 通过Anaconda安装 2 通过pip安装 3 尝试历程 参考 1 通过Anaconda安装 conda install pyg c pyg c conda forge 2 通过pip安装 首先通过如下命令获取系统torch和C
  • Python并行处理数据多进程/多线程,榨干你的CPU

    前言 最近在公司实习 给整了个活 像是数学建模一样的数据分析的活 目标是在几个互相有关联的大表中找出满足某条件的那些业务 其中第一步就是把两个表拼起来 就叫它们A和B吧 省略拼表过程中需要的逻辑判断 串行 两个长为M和N的表 在判断中需要一
  • Oracle删除重复数据只保留一条

    问题描述 merge数据时 找不到唯一的源数据 需要先删除有重复的数据 只保留一条 解决方式 查找表中多余的重复记录 多个字段 select from tmp a where a 料号 a 分类码 in select 料号 分类码 from
  • FFmpeg安装与使用+Java API/SpringBoot项目使用

    目录 下载安装 介绍与简单使用 在项目中的使用 配置文件 工具类 使用 下载安装 Download FFmpeg 解压到指定文件夹 介绍与简单使用 FFmpeg是一个开源的跨平台视频和音频处理工具 可以处理各种格式的音视频文件 FFmpeg