基于javacv实现视频转mp4
背景:由于项目需求,需要将ts视频格式转成mp4格式,发现ffmpeg工具非常强大,遇是盯上了javacv。
第一步,导入jar包
<dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.4.4</version>
</dependency>
第二步,编写代码
import org.bytedeco.javacpp.Loader;
import org.bytedeco.javacv.*;
import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacpp.opencv_objdetect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.File;import static org.bytedeco.javacpp.avutil.*;
import static org.bytedeco.javacpp.opencv_core.*;/*** 视频工厂* @author Litluecat*/
public class VideoFactoryUtils {private static final Logger log = LoggerFactory.getLogger(VideoFactoryUtils.class);//转换后的视频格式private static final String VIDEO_FORMAT = ".mp4";public static void main(String[] args) throws Exception {VideoFactoryUtils.convertToMp4(new File("E:\\test.ts"));}/*** 转换视频文件为mp4* @param file 目标视频文件*/public static void convertToMp4(File file) throws FrameRecorder.Exception, FrameGrabber.Exception {long startTime = System.currentTimeMillis();log.info("开始进行ts格式转MP4。。。");FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(file);//视频比率,与清晰度有关grabber.setVideoBitrate(2000000);//转储后mp4文件地址String fileName = file.getAbsolutePath().substring(0, file.getAbsolutePath().lastIndexOf(".")) + VIDEO_FORMAT;;Frame frame = null;FFmpegFrameRecorder recorder = null;try {grabber.start();log.info("FFmpegFrameGrabber start已耗时:{}ms", (System.currentTimeMillis() - startTime));recorder = new FFmpegFrameRecorder(fileName, grabber.getImageWidth(), grabber.getImageHeight(), grabber.getAudioChannels());recorder.setVideoCodec(grabber.getVideoCodec());recorder.setFormat(VIDEO_FORMAT);recorder.setFrameRate(grabber.getFrameRate());recorder.setVideoBitrate(grabber.getVideoBitrate());recorder.start();log.info("FFmpegFrameRecorder start已耗时:{}ms", (System.currentTimeMillis() - startTime));long changeSize = 0L;while ((frame = grabber.grabFrame()) != null) {recorder.setTimestamp(grabber.getTimestamp());recorder.record(frame);changeSize++;}log.info("视频转换总耗时:{}ms, 完成帧数:{}", (System.currentTimeMillis() - startTime), changeSize);log.info("转换后的视频地址:{}", fileName);} catch (Exception e) {e.printStackTrace();}finally{log.info("开始关闭FFmpegFrameGrabber、FFmpegFrameRecorder流链接。。。");recorder.stop();recorder.release();grabber.stop();}}
}
总结:之前使用opencv进行人脸识别、图像处理的时候就使用过javacv与ffmepg,只注重与opencv,没注意到后两者,也算是一次学习~
基于javacv实现视频转mp4相关推荐
- 基于javacv的视频截图、转码、提取音频
目录 目标 全量依赖 最小依赖 截图配置类 转码配置类 提取音频配置类 源视频处理结果类 核心类 怎么使用 目标 将所有格式的视频转码为H5能播放的mp4格式,也可以截取任意一帧图片 全量依赖 < ...
- 基于javacv的视频编码格式判断及转码
目录 目标 依赖 从网上找的代码 遇到问题 眼前的希望 ~~最终代码~~ 升级代码 目标 将所有格式的视频 转码为mp4格式 升级版 依赖 <!-- 依赖很多,不需要的自行排除 --> & ...
- JavaCV音视频开发宝典:JavaCV混合屏幕录屏和系统声音录制mp4视频文件(windows桌面屏幕和系统声音混合录制)
<JavaCV音视频开发宝典>专栏目录导航 <JavaCV音视频开发宝典>专栏介绍和目录 前言 之前已经写过dshow方式采集摄像头画面.麦克风.系统声音和桌面屏幕画面. 之前 ...
- JavaCV音视频开发宝典:vb8和vp9编码的webm格式视频文件转成mp4文件
<JavaCV音视频开发宝典>专栏目录导航 <JavaCV音视频开发宝典>专栏介绍和目录 前言 mp4不用多说,我们日常生活中,手机上或者浏览器网页中使用最多的视频文件就是 ...
- JavaCV音视频开发宝典:基于JavaCV实现wav音频直播服务,wav在线FM电台直播服务,无需流媒体服务,浏览器原生audio标签直接播放wav直播音频
<JavaCV音视频开发宝典>专栏目录导航 <JavaCV音视频开发宝典>专栏介绍和目录 前言 之前写过了mp3实现FM电台直播服务:<JavaCV音视频开发宝典:J ...
- 《JavaCV音视频实战宝典》专栏介绍和目录
<JavaCV音视频实战宝典>是2022年最新推出专注于音视频开发的高级实战宝典教程系列,更加偏重综合类流媒体音视频应用,技术不在局限于JavaCV,可能会包含结合Java中较为经典的sp ...
- 用FFmpeg搭建基于CNN的视频分析方案
Photo by Lukas from Pexels FFmpeg作为一个集录制.转换.音/视频编码解码功能为一体的开源框架,自然也需要考虑怎样去和当下流行的视频分析技术融合.本文来自英特尔网络平台部 ...
- 在直播软件搭建中,如何基于rtmp实现视频直播?
最近几年直播软件搭建可谓大火,这也就导致了在视频直播领域,有不同的商家提供各种的商业解决方案,包括软硬件设备,摄像机,编码器,流媒体服务器等.本文要讲解的是在直播软件搭建中,如何基于rtmp实现视频直 ...
- 基于OpenCV的视频场景切割神器
环境 windows 10 64bit anaconda with python 3.7 pyscenedetect 0.5.5 简介 了解视频剪辑的小伙伴,应该都知道转场这个词.一个视频场景转换到另 ...
- ev4视频转换为mp4工具使用教程
有时,我们会从互联网上下载ev4这种格式的视频,这些视频通常是加密的,需要购买授权码才能播放. 基于这种情况,我们可以使用这个程序,它可以很容易地转换视频.ev4格式转换为视频格式.MP4格式并直接播 ...
最新文章
- linux中快速查找文件
- 单片机GPIO软件模拟I2C通讯程序
- 【控制】《多无人机协同控制技术》周伟老师-目录
- 【Tiny4412】烧写Uboot到EMMC
- SAP 电商云 Spartacus UI quick order 产品 live search 的实现
- 解决Chrome谷歌浏览器″Adobe Flash Player 插件已被屏蔽″的问题
- python创建长度为n的数组_在Python中建立N维数组并赋初值
- PHP 循环引用的问题
- uniapp打包成html5包个ios壳,HBuilder之uni-app打包App方法
- BZOJ 1015 题解
- [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.11
- #9733;如何解释特修斯之船问题?
- Android开发:为什么你的学习效率如此低,为什么你很迷茫?
- 经典小游戏开发思路和算法之拼图(1)
- ubuntu下deactivate matlab的操作
- jt808终端鉴权_GitHub - SmallChi/JT808: JT808协议、GB808协议、道路运输车辆卫星定位系统-北斗兼容车载终端通讯协议(支持2013、2019版本)...
- spring概念理解之IOC(控制反转)
- vue如何新建一个项目(详细步骤)
- Qemu虚拟化PowerPc
- 通过百度人脸对比API进行人脸对比