目录

前言

Maven依赖

代码

总结


前言

本文提供将视频按照自定义尺寸进行裁剪的Java工具类,一如既往的实用主义。

Maven依赖

        <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1.1-jre</version></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.5</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.5.2</version></dependency>

代码

不废话,上代码。

package ai.guiji.csdn.tool;import cn.hutool.core.util.IdUtil;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import org.bytedeco.javacpp.Loader;import java.io.File;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.List;/*** @Program: csdn @ClassName: CutOutTool @Author: 剑客阿良_ALiang @Date: 2022-01-23 18:27 @Description:* 裁剪工具 @Version: V1.0*/
public class CutOutTool {/*** 视频裁剪** @param videoPath 视频地址* @param outputDir 临时目录* @param startX 裁剪起始x坐标* @param startY 裁剪起始y坐标* @param weight 裁剪宽度* @param height 裁剪高度* @throws Exception 异常*/public static String cutOutVideo(String videoPath,String outputDir,Integer startX,Integer startY,Integer weight,Integer height)throws Exception {List<String> paths = Splitter.on(".").splitToList(videoPath);String ext = paths.get(paths.size() - 1);if (!Arrays.asList("mp4", "avi", "flv").contains(ext)) {throw new Exception("format error");}String resultPath =Joiner.on(File.separator).join(Arrays.asList(outputDir, IdUtil.simpleUUID() + "." + ext));String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);ProcessBuilder builder =new ProcessBuilder(ffmpeg,"-i",videoPath,"-vf",MessageFormat.format("crop={0}:{1}:{2}:{3}",String.valueOf(weight),String.valueOf(height),String.valueOf(startX),String.valueOf(startY)),"-b","2000k","-y","-threads","5","-preset","ultrafast","-strict","-2",resultPath);builder.inheritIO().start().waitFor();return resultPath;}public static void main(String[] args) throws Exception {System.out.println(cutOutVideo("C:\\Users\\yi\\Desktop\\3.mp4", "C:\\Users\\yi\\Desktop\\", 0, 0, 960, 1080));}
}

代码说明:

1、cutOutVideo方法参数分别为视频路径、输出临时目录、起始坐标x值、起始坐标y值、裁剪宽度、裁剪高度。

2、采用uuid作为临时输出唯一id,避免重复。

3、对文件后缀格式做了校验,可以按照需求自行调整。

4、裁剪尺寸不能超出视频分辨率限制,按照需求自行调整。

验证一下

准备的视频如下

执行结果

ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 10.2.0 (Rev5, Built by MSYS2 project)
  configuration: --prefix=.. --disable-iconv --disable-opencl --disable-sdl2 --disable-bzlib --disable-lzma --disable-linux-perf --enable-shared --enable-version3 --enable-runtime-cpudetect --enable-zlib --enable-libmp3lame --enable-libspeex --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-openssl --enable-libopenh264 --enable-libvpx --enable-libfreetype --enable-libopus --enable-cuda --enable-cuvid --enable-nvenc --enable-libmfx --enable-w32threads --enable-indev=dshow --target-os=mingw32 --cc='gcc -m64' --extra-cflags=-I../include/ --extra-ldflags=-L../lib/ --extra-libs='-static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lgcc_eh -lWs2_32 -lcrypt32 -lpthread -lz -lm -Wl,-Bdynamic -lole32 -luuid'
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Users\yi\Desktop\3.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.45.100
  Duration: 00:00:31.02, start: 0.000000, bitrate: 3666 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 3278 kb/s, 24 fps, 24.42 tbr, 19536 tbn, 48.84 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 384 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Please use -b:a or -b:v, -b is ambiguous
Codec AVOption preset (Set the encoding preset) specified for output file #0 (C:\Users\yi\Desktop\\0ba24b19db0c47faa2cd25bcaee8a3ed.mp4) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> mpeg4 (native))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
Output #0, mp4, to 'C:\Users\yi\Desktop\\0ba24b19db0c47faa2cd25bcaee8a3ed.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.45.100
    Stream #0:0(und): Video: mpeg4 (mp4v / 0x7634706D), yuv420p, 960x1080 [SAR 1:1 DAR 8:9], q=2-31, 2000 kb/s, 24.42 fps, 19536 tbn, 24.42 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc58.91.100 mpeg4
    Side data:
      cpb: bitrate max/min/avg: 0/0/2000000 buffer size: 0 vbv_delay: N/A
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      encoder         : Lavc58.91.100 aac
frame=  732 fps=251 q=1.6 Lsize=    7575kB time=00:00:30.01 bitrate=2067.5kbits/s dup=13 drop=0 speed=10.3x    
video:7087kB audio:470kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.249497%
[aac @ 0000022b33400c40] Qavg: 197.756
C:\Users\yi\Desktop\\0ba24b19db0c47faa2cd25bcaee8a3ed.mp4

Process finished with exit code 0

结果视频如下

OK,没什么问题!

总结

没什么好总结的,注意尺寸,注意尺寸,注意尺寸。

分享

当情绪化的狂热平静下来,拥有推理习惯的人就会去为他自己的信仰寻找逻辑支持。——罗素

如果本文对你有帮助的话,点个赞吧,谢谢!!

Java 实现视频裁剪(附代码) | Java工具类相关推荐

  1. java学习视频网站_学习Java的视频网站

    原标题:学习Java的视频网站 很多自学Java的人都发现网上的Java视频教程都会分章节讲解,但是总感觉很乱?那是因为你没有比较系统.全面的了解Java语言,没有将Java应用到实际项目中,那么有哪 ...

  2. 记录一下:Java 汉字获取拼音或首字母工具类

    记录一下:Java 汉字获取拼音或首字母工具类 Maven依赖配置 Java代码 本文主要记录一下在Java中,如何将字符串中的中文转化为拼音,获取汉字串拼音首字母,获取汉字串拼音的工具类,以及相关的 ...

  3. java 手机号脱敏,身份证号脱敏 工具类

    java 手机号脱敏,身份证号脱敏 工具类 import org.apache.commons.lang3.StringUtils;/*** * @title: 脱敏工具类* @author: wll ...

  4. java将链接生成二维码工具类

    一.添加依赖 <!-- 生成二维码--><dependency><groupId>com.google.zxing</groupId><artif ...

  5. Java - HuTool 使用 EscapeUtil、XmlUtil等工具类(四)

    Java - HuTool 使用 EscapeUtil.XmlUtil等工具类(四) 本篇主要介绍 HuTool工具, 其是 java工具类,对于一些静态方法进行封装,虽然很小,但很全,里面拥有平时我 ...

  6. Java生成和解析二维码工具类(简单经典)

    Java生成和解析二维码工具类 开箱即用,简单不废话. pom.xml引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...

  7. Java教程:微信排序并加密工具类

    Java教程:微信排序并加密工具类 源码: import cn.bsit.commons.md5.MD5Utils;import java.util.Arrays; import java.util. ...

  8. JAVA之多sheet页表格生成工具类

    JAVA之多sheet页表格生成工具类 主要方法: import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.h ...

  9. 【开发随机】JAVA+POI+自定义注解+反射构建自定义工具类实现快捷简便的Excel模板化导出(附demo代码)

    220907更新 项目UAT期间,用户反映了一个问题,数据量稍大的情况下,会出现"从某一行开始,往下所有行设置的字体和字体大小不生效"的BUG. 经过排查,发现原因是:POI的XS ...

  10. Java SE有几个代码_JavaSE常用类及方法的介绍(附代码)

    本篇文章给大家带来的内容是关于JavaSE常用类及方法的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.基本数据类型比较用:== 2.引用数据类型比较用:equal ...

最新文章

  1. 蚂蚁金服×西安银行 | 西安银行手机银行App的智能升级之路
  2. sdut-3102小鑫追女神
  3. Codeforces Round 504
  4. shell tr 替换 空格_Shell 字符串分隔符!!!(全网最详细总结)
  5. 阿里云和中移物联网M5311的MQTT通讯
  6. ng机器学习视频笔记(十三) ——异常检测与高斯密度估计
  7. 【RSLogix5000】—(1.1)—厂房ControlLogix系统介绍(硬件介绍)——原理
  8. 硬件设计-USB2.0电路设计
  9. 在Windows11的虚拟机安装WindowsServer2016并测试DNS功能
  10. 教你两步搞定机顶盒软件的安装
  11. 趣图:你永远想不到用户怎么使用你的产品
  12. 【Java从零到架构师第二季】【07】JDBC FOR MySQL
  13. 计算机毕业设计Java印染公司信息管理系统(系统+程序+mysql数据库+Lw文档)
  14. dos下编写java程序_在DOS命令行状态下,如果命令java Hello成功运行了程序,那么下面哪些叙述是正确的()...
  15. 深圳软件测试培训:Pytest+Appium+Allure 做 UI 自动化的那些事
  16. Python实现照片、视频一键压缩及备份源代码
  17. 黑猴子的家:Centos 7.x 安装百度网盘baidunetdisk
  18. Unity【01 AssetBundle】【02 Lua】
  19. spark 提交任务到spark
  20. 海康RTSP流转RTMP并推送至Web端展示

热门文章

  1. Visual SourceSafe 2005(Vss2005)使用经验总结
  2. 达思sql数据库修复软件:用友金蝶管家婆思迅中了勒索病毒怎么办?
  3. Android Fragment应用实战,使用碎片向ActivityGroup说再见
  4. Delphi2007的重构功能
  5. nokia n9 android 4.4,NOKIA N9获APK兼容层 可安装Android应用
  6. 返回顶部php代码,页面按需返回顶部代码及注释说明
  7. wps画流程图交叉弧形_wps画的流程图打印不清晰|wps怎么绘制出立体流程图?wps绘制出立体流程图的方法...
  8. Hadoop学习心得
  9. 种子文件转成为磁力链接 下载BT磁力转换小工具
  10. 欧姆龙cp1h指令讲解_OMRON CP1H脉冲指令说明总结