javacv和opencv对图文视频编辑-用多张图片合成MP4视频

狠人话不多,直接上代码

package com.bitar.javavideo.test;import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Java2DFrameConverter;import javax.imageio.ImageIO;
import java.io.File;/*** 把图片转换为MP4视频 ,* dir:D:\desktop\test\test01* 1个图1秒*/
public class Test01 {public static void main(String[] args) throws Exception {String outPutFile = "D:\\desktop\\test\\test01\\01-result.mp4";int imgWidth = 512;int imgHeight = 512;// FFmpegFrameRecorder:处理视频帧//视频宽高最好是按照常见的视频的宽高  16:9  或者 9:16FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outPutFile, imgWidth, imgHeight);//设置视频编码层模式recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);//1-代表1帧/sDouble FrameRate = 25.0D;recorder.setFrameRate(FrameRate);/** videoBitRate这个参数很重要,当然越大,越清晰,但最终的生成的视频也越大。* 查看一个资料,说均衡考虑建议设为videoWidth*videoHeight*frameRate*0.07*运动因子,运动因子则与视频中画面活动频繁程度有关,如果很频繁就设为4,不频繁则设为1*/int motionFactory = 1;recorder.setVideoBitrate((int) ((imgWidth * imgHeight * FrameRate) * motionFactory * 0.07));//设置视频图像数据格式int pixelFormat = avutil.AV_PIX_FMT_YUV420P;recorder.setPixelFormat(pixelFormat);String format = "mp4";recorder.setFormat(format);//         双通道(立体声)// recorder.setAudioChannels(grabber.getAudioChannels());recorder.setAudioChannels(2);recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);recorder.start();// 录制视频Java2DFrameConverter converter = new Java2DFrameConverter();//URL imgUrl = new URL("D:\\desktop\\test\\img1.png");//根据每秒的帧数 记录多少次图片,for (int i = 0; i < 25; i++) {recorder.record(converter.getFrame(ImageIO.read(new File("D:\\desktop\\test\\test01\\512x512-1.png"))));}for (int i = 0; i < 25; i++) {recorder.record(converter.getFrame(ImageIO.read(new File("D:\\desktop\\test\\test01\\512x512-2.png"))));}for (int i = 0; i < 25; i++) {recorder.record(converter.getFrame(ImageIO.read(new File("D:\\desktop\\test\\test01\\512x512-3.png"))));}recorder.close();}
}

补充:

FFmpegFrameRecorder  可以当成录像机,往录像中加入一张张图片,最后就是视频。

FFmpegFrameRecorder  记录的是frame(视频帧),所以需要将图片转换为Frame需要借助Java2DFrameConverter 。可以将本地图片、字节、网络图片等作为录像机的图片来源。

注意:最终视频是一个固定宽高的视频,所以图片最好是相同尺寸,关于图片的编辑、音频编辑后续会讲到,欢迎关注下哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/617408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Camunda Cluster

Rest API&#xff1a;无状态&#xff0c;根据权重路由。控制台API&#xff1a;webapp 登录有状态&#xff0c;根据IP路由。 nginx.conf upstream rest_proxy {server localhost:8080 weight1;server localhost:8081 weight1;server localhost:8082 weight1; }upstream webapp…

《2024 年 Web3.0 数字资产趋势报告》(二)

撰文&#xff1a;方军、周芳鸽、李祺虹、张睿彬&#xff0c;Uweb 编辑&#xff1a;Nona&#xff0c;Techub News 点击关注公众号获取完整报告 接下来我们将继续和大家分享《2024 年 Web3.0 数字资产趋势报告》中其余部分。

PyCharm连接服务器(利用PyCharm实现远程开发)

利用PyCharm实现远程开发 注&#xff1a;该功能只有在PyCharm专业版下才可以使用&#xff0c;并且必须是官方的正版许可&#xff0c;破解版的是不可以使用的&#xff01;&#xff01;&#xff01;可以通过免费教育许可申请使用权限&#xff08;申请流程&#xff09;。 pycharm…

QEMU源码全解析 —— PCI设备模拟(6)

接前一篇文章&#xff1a; 上一回讲到了pci_edu_realize函数中的pci_register_bar函数&#xff0c;本回对于其进行详细解析。 再次贴出pci_register_bar函数源码&#xff0c;在hw/pci/pci.c中&#xff0c;代码如下&#xff1a; void pci_register_bar(PCIDevice *pci_dev, in…

在Java中正确使用Optional

Optional类是在Java 8中引入的&#xff0c;用于解决NullPointerException的问题。 java.util.Optional类是一个泛型类型的类&#xff0c;只包含一个类型为T的值。其目的是提供对可能为null的类型T的引用对象的更安全的替代方案。但是&#xff0c;只有在正确使用的情况下&#…

HarmonyOS开发FA应用模型下多个页面的声明方式

目录 方式1 方式2 HarmonyOS配套的IDE是DevEco Studio&#xff0c;目前的版本是3.1。官网可以直接下载 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 ​ 方式1 ​在DevEco Studio如果是在pages目录通过右键New->ArkTS File生成的文件&#xff0c;需要注意&…

Android 13(T) - Media框架(3)- mediaserver

上一节我们了解到android_media_MediaPlayer.cpp中封装的是MediaPlayer native实现&#xff0c;这一节我们就来了解它的内部实现。 1、MediaPlayer MediaPlayer native代码位于frameworks/av/media/libmedia/mediaplayer.cpp 先来看MediaPlayer的声明&#xff0c;它继承于BnM…

鸿蒙原生应用再添新丁!天眼查 入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;天眼查 入局鸿蒙 来自 HarmonyOS 微博1月12日消息&#xff0c;#天眼查启动鸿蒙原生应用开发#作为累计用户数超6亿的头部商业信息查询平台&#xff0c;天眼查可以为商家企业&#xff0c;职场人士以及普通消费者等用户便捷和安全地提供查询海量…

Vue高级

一 ref属性 被用来给元素或子组件注册引用信息&#xff08;id的替代者&#xff09; 应用在html标签上获取的是真实DOM元素&#xff0c;应用在组件标签上是组件实例对象&#xff08;vc&#xff09; 使用方式&#xff1a; 打标识&#xff1a; ...... 或 获取&#xff1a;this.…

ubuntu安装mysql(tar.xz)

1&#xff1a;下载地址 MySQL &#xff1a;&#xff1a; 下载 MySQL 社区服务器 2&#xff1a;上传文件到服务器 3:解压 mkdir mysqlmv mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz /mysqlcd /mysqltar -xvf mysql-8.0.13-linux-glibc2.12-x86_64.tar.xzmv /mysql/mysql-8.…

【Spring类路径Bean定义信息扫描】

Spring类路径Bean定义信息扫描 1. ClassPathBeanDefinitionScanner作用2. 类声明3. 属性4. 构造器5. 扫描方法6. 真正扫描方法7. postProcessBeanDefinition8. 注册bean定义 1. ClassPathBeanDefinitionScanner作用 扫描类路径下的类注册为bean定义。2. 类声明 public class …

后端获取来访url

先说一下&#xff1a;后端是没有办法获取前端来访路径的&#xff1a;a.com访问到b.com&#xff0c;你的程序是b.com&#xff0c;你想获取a.com这个路径&#xff0c;在java后端是获取不到的&#xff0c;反正我网上搜了好久&#xff0c;用了好多种方法都没有获取到&#xff0c;如…

【期末不挂科-C++考前速过系列P3】大二C++第3次过程考核(20道选择题&12道判断题&2道代码题)【解析,注释】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C考前速过系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《…

行为型设计模式——状态模式

状态模式 状态模式是比较简单的设计模式&#xff0c;它的主要作用是减少代码中大量的 if-else 或者 switch-case 等逻辑判断&#xff08;俗称屎山&#xff09;。它将每个状态定义为一个类&#xff0c;而每个状态类有自己对应的方法&#xff0c;因此当需要根据状态执行逻辑代码…

开源Bluespec bsc编译器和可重用示例设计

这篇介绍Bluespec以及设计示例的文章&#xff0c;是在2021年ICCAD&#xff08;International Conference On Computer-Aided Design&#xff09;发布的论文。达坦科技的open-rdma项目和推广的MIT体系结构学习社区都用到Bluespec&#xff0c;因此将此论文翻译成中文&#xff0c;…

app跳转小程序免登录

app跳转小程序二次登录&#xff1a; app跳转小程序&#xff0c;第一种做法是 点击 app 页面 --> 跳转到对应小程序的路径 --> 登录小程序 --> 使用功能。这种做法&#xff0c;在 app跳转小程序后&#xff0c;需要二次登录&#xff0c;用户体验不是很好。 app跳转小…

【JVM】垃圾回收 GC

一、前言 垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;是由 Java 虚拟机&#xff08;JVM&#xff09;垃圾回收器提供的一种对内存回收的一种机制&#xff0c;它一般会在内存空闲或者内存占用过高的时候对那些没有任何引用的对象不定时地进行回收。以避免…

C#进阶-IIS服务器发布ASP.NET项目

对于云服务器&#xff0c;程序员一般不会陌生&#xff0c;如果项目需要发布到现网&#xff0c;那么服务器是必不可缺的一项硬性条件&#xff0c;那么如何在云服务器上部署一个项目&#xff0c;需要做哪些配置准备&#xff0c;下面就由本文档为大家讲解&#xff0c;本篇以 IIS服…

封装数据访问通用类DbHelper

为什么要封装通用类&#xff1f; 数据交互&#xff1a;增上改查 相同的事情&#xff1a;连接 T-SQL命令&#xff0c;Command 执行命令&#xff0c;选择执行方式 得到相应结果 关闭连接 将一些从重复的逻辑进行封装&#xff0c;达到通用的目的 提高复用率…