当前位置: 首页 > news >正文

AIGC方案-java实现视频伪动效果

Thumbnailator 是一个优秀的图片处理的Google开源Java类库。处理效果远比Java API的好。从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式,同时保持了需要写入的最低限度的代码量。还支持对一个目录的所有图片进行批量处理操作
支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例。
学习可参考:https://dunwu.github.io/pages/adacc5/

一、1.1旋转效果(适合作切图动效)

方案:该效果我认为可以放在图片的前2秒实现切换动效,具体实现方案:在切换到下一张图的2秒内(120帧)要转360度,所以需要每一帧让图片转3度。
特殊点:如果该图片对应的音频时长小于2秒,这种情况应该不转动
核心代码:

Thumbnails.of("/Users/luzelong/Downloads/images/prompt_1.png").size(370,370).rotate(45).toFile("/Users/luzelong/Desktop/f.png");
Thumbnails.of("/Users/luzelong/Downloads/images/prompt_1.png").size(370,370).rotate(70).toFile("/Users/luzelong/Desktop/g.png");

控制rotate里面的值从0 -> 360即可实现旋转一周
在这里插入图片描述
ps:图1是原图,图2是旋转45度,图3是旋转70度

二、水平移动(可配合方法四)

实现方案:
1.将图片放大两倍
2.将原大小的截取框 在放大后的图片上 从左移动到右边
参考代码:

Thumbnails.of("/Users/luzelong/Downloads/images/prompt_1.png").scale(2d).toFile("/Users/luzelong/Desktop/c.png");
Thumbnails.of("/Users/luzelong/Desktop/c.png").sourceRegion(Positions.CENTER_LEFT, 370, 370).size(370,370).keepAspectRatio(false).toFile("/Users/luzelong/Desktop/d.png");
Thumbnails.of("/Users/luzelong/Desktop/c.png").sourceRegion(Positions.CENTER_RIGHT, 370, 370).size(370,370).keepAspectRatio(false).toFile("/Users/luzelong/Desktop/e.png");

缺点:先放大再从中心左侧开始截取可能会丢失重要的图片细节,优化点是减少放大倍数
在这里插入图片描述
ps:图1为原图,图2为图片放大后截取的中心左侧,图3为图片放大后截取的中心右侧。

三、中心渐进放大(可配合方法四)

实现方案:截取图片的某一区间,将这个区间等比例拉伸到原图大小.
核心代码实现:

Thumbnails.of("/Users/luzelong/Downloads/images/prompt_1.png").sourceRegion(Positions.CENTER, 250, 250).size(370, 370).keepAspectRatio(false)
.toFile("/Users/luzelong/Desktop/a.png");

其中size里面填写原图的大小,针对每一帧的图片不断减小sourceRegion里面的值(起始值是原图大小)即可实现缩放效果。
在这里插入图片描述
ps:第一张图是原图,第二张图sourceRegion里设置的大小是300,第三张图sourceRegion里设置的大小是250,该动效可能只适合1:1的图片,因为其他比例的图片按照比例截取会出现小数的像素点,而真实的像素是不存在小数的,就会导致放大过程抖动!

四、通过水印法,将图片放在另一张图片中心

Thumbnails.of("/Users/luzelong/Downloads/images/2.png").sourceRegion(Positions.CENTER, 480, 268).size(480,268).toFile("/Users/luzelong/Downloads/projects/works/aigc-maliang/c.png");
//添加水印
Thumbnails.of("/Users/luzelong/Downloads/images/1.png").size(960,536).watermark(Positions.CENTER, ImageIO.read(new File("/Users/luzelong/Downloads/projects/works/aigc-maliang/c.png")), 1f).outputQuality(0.8f).toFile("/Users/luzelong/Downloads/projects/works/aigc-maliang/d.png");

在这里插入图片描述
经过于是可以通过下面这段代码实现,将放大虚化后的图片作为原图的背景

public static BufferedImage centerOutsideBlurBackground(BufferedImage bufferedImage){try {BufferedImage newImage = Thumbnails.of(bufferedImage).scale(1.2d).asBufferedImage();// 添加模糊滤镜float[] matrix = new float[121];for (int i = 0; i < matrix.length; i++) {matrix[i] = 1.0f / matrix.length;}Kernel kernel = new Kernel(11, 11, matrix);ImageFilter filter = new ImageFilter() {@Overridepublic BufferedImage apply(BufferedImage img) {ConvolveOp op = new ConvolveOp(kernel);return op.filter(img, null);}};//添加水印return Thumbnails.of(newImage).size(newImage.getWidth(), newImage.getHeight()).addFilter(filter).watermark(Positions.CENTER, bufferedImage, 1f).outputQuality(1f).asBufferedImage();}catch (Exception e){e.printStackTrace();}return null;
}

五、ffempeg实现的视频动效

//渐入(视频前90帧)
i in.mp4 -vf fade=in:0:90 out.mp4
//黑白
i in.mp4 -vf lutyuv=“u=128:v=128” out.mp4
//锐化
i in.mp4 -vf unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5 out.mp4
//反锐化
i in.mp4 -vf unsharp=7:7:-2:7:7:-2 out.mp4
//渐晕
i in.mp4 -vf vignette=PI/4 out.mp4
//闪烁渐晕
i in.mp4 -vf vignette=‘PI/4+random(1)PI/50’:eval=frame out.mp4
//视频颤抖
i in.mp4 -vf crop="in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)sin(n/10):(in_h-out_h)/2+((in_h-out_h)/2)sin(n/7)" out.mp4
//色彩变幻
i in.mp4 -vf hue="H=2PIt:s=sin(2PIt)+1" out.mp4
//模糊处理
i in.mp4 -vf boxblur=5:1:cr=0:ar=0 out.mp4
//镜像翻转
i in.mp4 -vf crop=iw/2:ih:0:0,split[left][tmp];[tmp]hflip[right];[left]pad=iw2[a];[a][right]overlay=w out.mp4
//水平翻转
i in.mp4 -vf geq=p(W-X\,Y) out.mp4
//垂直翻转
i in.mp4 -vf vflip out.mp4
//浮雕效果
i in.mp4 -vf format=gray,geq=lum_expr=(p(X,Y)+(256-p(X-4,Y-4)))/2’ out.mp4
//均匀噪声
i in.mp4 -vf noise=alls=20:allf=t+u out.mp4

失败报错,部分命令不支持:

2023/05/09 15:01:54.119 main [INFO] FfmeegUtil (FfmeegUtil.java:93) Failed to inject frame into filter network: Invalid argument
2023/05/09 15:01:54.119 main [INFO] FfmeegUtil (FfmeegUtil.java:93) Error while processing the decoded data for stream #0:0
2023/05/09 15:01:54.119 main [INFO] FfmeegUtil (FfmeegUtil.java:93) [aac @ 0x7fc38280a800] Qavg: 64267.547
2023/05/09 15:01:54.119 main [INFO] FfmeegUtil (FfmeegUtil.java:93) [aac @ 0x7fc38280a800] 2 frames left in the queue on closing
2023/05/09 15:01:54.129 main [INFO] FfmeegUtil (FfmeegUtil.java:93) Conversion failed!

相关文章:

  • SpringBoot + 自建GitLab + Jenkins + CentOS Stream 9 来实现自动化部署
  • 御微半导体面试总结
  • 内存泄漏系列专题分析之二十:camx swap内存泄漏实例分析
  • Jenkins + Docker + Kubernetes(JKD)自动化部署全链路实践
  • 基于OpenCV的图像增强技术:直方图均衡化与自适应直方图均衡化
  • 零基础设计模式——行为型模式 - 备忘录模式
  • LVS 负载均衡详解:四层转发原理与三种经典模式全面解析
  • eureka如何绕过 LVS 的虚拟 IP(VIP),直接注册服务实例的本机真实 IP
  • 我们来学mysql -- 8.4版本记录慢查询
  • Spring MVC扩展与SSM框架整合
  • 传统机器学习与大模型 + Prompt 的对比示例
  • 计算机系统概述(5)
  • 使用Docker申请Let‘s Encrypt证书
  • 谈文件系统
  • AI Agent核心技术深度解析:Function Calling与ReAct对比报告
  • vue3笔记(1)自用
  • 开源、免费、美观的 Vue 后台管理系统模板
  • 当简约美学融入小程序 UI 设计:开启高效交互新篇
  • 将vmware下旧的黑群晖nas迁移到别的服务器,并对硬盘进行扩容
  • 深度学习:PyTorch简介
  • 西部数码网站管理助手c盘安装/黑帽seo之搜索引擎
  • wordpress 新编辑器/裤子seo关键词
  • 上海设计师网站有哪些/搜索推广和信息流推广的区别
  • 杭州注册公司有什么优惠政策/象山关键词seo排名
  • 300元建站/百度客户服务电话是多少
  • 提供营销单页网站/59软文网