1 Star 19 Fork 9

王富贵/ffmpeg-spring-boot-starter

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
masiyi- masiyi README d62e5f0 9个月前
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

最近工作中在使用FFmpeg,加上之前写过较多的SpringBoot的Starter,所以干脆再写一个FFmpeg的Starter出来给大家使用。

首先我们来了解一下FFmpeg能干什么,FFmpeg 是一个强大的命令行工具和库集合,用于处理多媒体数据。它可以用来做以下事情:

  • 解码:将音频和视频从压缩格式转换成原始数据。
  • 编码:将音频和视频从原始数据压缩成各种格式。
  • 转码:将一种格式的音频或视频转换为另一种格式。
  • 复用:将音频、视频和其他流合并到一个容器中。
  • 解复用:从一个容器中分离出音频、视频和其他流。
  • 流媒体:在网络上传输音频和视频流。
  • 过滤:对音频和视频应用各种效果和调整。
  • 播放:直接播放媒体文件。

FFmpeg支持广泛的编解码器和容器格式,并且由于其开源性质,被广泛应用于各种多媒体应用程序中,包括视频会议软件、在线视频平台、编辑软件等。 例如

在这里插入图片描述 作者很喜欢的一款截图软件ShareX就使用到了FFmpeg的功能。

现在ffmpeg-spring-boot-starter已发布,maven地址为 ffmpeg-spring-boot-starter

在这里插入图片描述

那么如何使用ffmpeg-spring-boot-starter 呢?

第一步,新建一个SpringBoot项目

SpringBoot入门:如何新建SpringBoot项目(保姆级教程)

第二步,在pom文件里面引入jar包

<dependency>
    <groupId>io.gitee.wangfugui-ma</groupId>
    <artifactId>ffmpeg-spring-boot-starter</artifactId>
    <version>${最新版}</version>
</dependency>

第三步,配置你的ffmpeg信息

在yml或者properties文件中配置如下信息

ffmpeg.ffmpegPath=D:\\ffmpeg-7.0.1-full_build\\bin\\

注意这里要配置为你所安装ffmpeg的bin路径,也就是脚本(ffmpeg.exe)所在的目录,之所以这样设计的原因就是可以不用在系统中配置环境变量,直接跳过了这一个环节(一切为了Starter)

第四步,引入FFmpegTemplate

    @Autowired
    private FFmpegTemplate ffmpegTemplate;

在你的项目中直接使用Autowired注解注入FFmpegTemplate即可使用

第五步,使用FFmpegTemplate

execute(String command)

  • 功能:执行任意FFmpeg命令,捕获并返回命令执行的输出结果。
  • 参数command - 需要执行的FFmpeg命令字符串。
  • 返回:命令执行的输出结果字符串。
  • 实现:使用Runtime.getRuntime().exec()启动外部进程,通过线程分别读取标准输出流和错误输出流,确保命令执行过程中的所有输出都被记录并可被进一步分析。
  • 异常:抛出IOExceptionInterruptedException,需在调用处妥善处理。

FFmpeg执行器,这是这里面最核心的方法,之所以提供这个方法,是来保证大家的自定义的需求,例如FFmpegTemplate中没有封装的方法,可以灵活自定义ffmpeg的执行参数。

convert(String inputFile, String outputFile)

  • 功能:实现媒体文件格式转换。
  • 参数inputFile - 待转换的源文件路径;outputFile - 转换后的目标文件路径。
  • 实现:构建FFmpeg命令,调用FFmpeg执行器完成媒体文件格式的转换。

就像这样:

    @Test
    void convert() {
        ffmpegTemplate.convert("D:\\video.mp4","D:\\video.avi");
    }

extractAudio(String inputFile)

  • 功能:精确提取媒体文件的时长信息。
  • 参数inputFile - 需要提取时长信息的媒体文件路径。
  • 实现:构造特定的FFmpeg命令,仅请求媒体时长数据,直接调用FFmpeg执行器并解析返回的时长值。

就像这样:

    @Test
    void extractAudio() {  System.out.println(ffmpegTemplate.extractAudio("D:\\video.mp4"));
    }

copy(String inputFile, String outputFile)

  • 功能:执行流复制,即在不重新编码的情况下快速复制媒体文件。

  • 参数inputFile - 源媒体文件路径;outputFile - 目标媒体文件路径。

  • 实现:创建包含流复制指令的FFmpeg命令,直接调用FFmpeg执行器,以达到高效复制的目的。

    就像这样:

    @Test
    void copy() {
        ffmpegTemplate.copy("D:\\video.mp4","D:\\video.avi");
    }

captureVideoFootage(String inputFile, String outputFile, String startTime, String endTime)

  • 功能:精准截取视频片段。
  • 参数inputFile - 源视频文件路径;outputFile - 截取片段的目标文件路径;startTime - 开始时间;endTime - 结束时间。
  • 实现:构造FFmpeg命令,指定视频片段的开始与结束时间,直接调用FFmpeg执行器,实现视频片段的精确截取。
@Test
    void captureVideoFootage() {
        ffmpegTemplate.captureVideoFootage("D:\\video.mp4","D:\\cut.mp4","00:01:01","00:01:12");
    }

scale(String inputFile, String outputFile, Integer width, Integer height)

  • 功能:调整媒体文件的分辨率。
  • 参数inputFile - 源媒体文件路径;outputFile - 输出媒体文件路径;width - 目标宽度;height - 目标高度。
  • 实现:创建包含分辨率调整指令的FFmpeg命令,直接调用FFmpeg执行器,完成媒体文件分辨率的调整。
    @Test
    void scale() {
        ffmpegTemplate.scale("D:\\video.mp4","D:\\video11.mp4",640,480);
    }

cut(String inputFile, String outputFile, Integer x, Integer y, Integer width, Integer height)

  • 功能:实现媒体文件的精确裁剪。
  • 参数inputFile - 源媒体文件路径;outputFile - 裁剪后媒体文件路径;x - 裁剪框左上角X坐标;y - 裁剪框左上角Y坐标;width - 裁剪框宽度;height - 裁剪框高度。
  • 实现:构造FFmpeg命令,指定裁剪框的坐标与尺寸,直接调用FFmpeg执行器,完成媒体文件的精确裁剪。
    @Test
    void cut() {
        ffmpegTemplate.cut("D:\\video.mp4","D:\\video111.mp4",100,100,640,480);
    }

embedSubtitle(String inputFile, String outputFile, String subtitleFile)

  • 功能:将字幕文件内嵌至视频中。
  • 参数inputFile - 视频文件路径;outputFile - 输出视频文件路径;subtitleFile - 字幕文件路径。
  • 实现:构造FFmpeg命令,将字幕文件内嵌至视频中,直接调用FFmpeg执行器,完成字幕的内嵌操作。
    @Test
    void embedSubtitle() {
        ffmpegTemplate.embedSubtitle("D:\\video.mp4","D:\\video1211.mp4","D:\\srt.srt");
    }

merge(String inputFile, String outputFile)

  • 功能: 通过外部ffmpeg工具将多个视频文件合并成一个。
  • 参数:
    • inputFile: 包含待合并视频列表的文本文件路径。
    • outputFile: 合并后视频的输出路径。

是这样用的:

   @Test
    void merge() {
        ffmpegTemplate.merge("D:\\mylist.txt","D:\\videoBig.mp4");
    }

注意,这个mylist.txt文件长这样: 在这里插入图片描述

后续版本考虑支持

  1. 添加更多丰富的api
  2. 区分win和Linux环境(脚本执行条件不同)
  3. 支持在系统配置环境变量(用户如果没有配置配置文件的ffmpegPath信息可以自动使用环境变量)

在这里插入图片描述

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

最近工作中在使用FFmpeg,加上之前写过较多的SpringBoot的Starter,所以干脆再写一个FFmpeg的Starter出来给大家使用。 展开 收起
README
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/wangfugui-ma/ffmpeg-spring-boot-starter.git
git@gitee.com:wangfugui-ma/ffmpeg-spring-boot-starter.git
wangfugui-ma
ffmpeg-spring-boot-starter
ffmpeg-spring-boot-starter
develop

搜索帮助