背景:由于项目需求,需要将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相关推荐

  1. 基于javacv的视频截图、转码、提取音频

    目录 目标 全量依赖 最小依赖 截图配置类 转码配置类 提取音频配置类 源视频处理结果类 核心类 怎么使用 目标 将所有格式的视频转码为H5能播放的mp4格式,也可以截取任意一帧图片 全量依赖 < ...

  2. 基于javacv的视频编码格式判断及转码

    目录 目标 依赖 从网上找的代码 遇到问题 眼前的希望 ~~最终代码~~ 升级代码 目标 将所有格式的视频 转码为mp4格式 升级版 依赖 <!-- 依赖很多,不需要的自行排除 --> & ...

  3. JavaCV音视频开发宝典:JavaCV混合屏幕录屏和系统声音录制mp4视频文件(windows桌面屏幕和系统声音混合录制)

    <JavaCV音视频开发宝典>专栏目录导航 <JavaCV音视频开发宝典>专栏介绍和目录 前言 之前已经写过dshow方式采集摄像头画面.麦克风.系统声音和桌面屏幕画面. 之前 ...

  4. JavaCV音视频开发宝典:vb8和vp9编码的webm格式视频文件转成mp4文件

    <JavaCV音视频开发宝典>专栏目录导航 <JavaCV音视频开发宝典>专栏介绍和目录 ​ 前言 mp4不用多说,我们日常生活中,手机上或者浏览器网页中使用最多的视频文件就是 ...

  5. JavaCV音视频开发宝典:基于JavaCV实现wav音频直播服务,wav在线FM电台直播服务,无需流媒体服务,浏览器原生audio标签直接播放wav直播音频

    <JavaCV音视频开发宝典>专栏目录导航 <JavaCV音视频开发宝典>专栏介绍和目录 ​ 前言 之前写过了mp3实现FM电台直播服务:<JavaCV音视频开发宝典:J ...

  6. 《JavaCV音视频实战宝典》专栏介绍和目录

    <JavaCV音视频实战宝典>是2022年最新推出专注于音视频开发的高级实战宝典教程系列,更加偏重综合类流媒体音视频应用,技术不在局限于JavaCV,可能会包含结合Java中较为经典的sp ...

  7. 用FFmpeg搭建基于CNN的视频分析方案

    Photo by Lukas from Pexels FFmpeg作为一个集录制.转换.音/视频编码解码功能为一体的开源框架,自然也需要考虑怎样去和当下流行的视频分析技术融合.本文来自英特尔网络平台部 ...

  8. 在直播软件搭建中,如何基于rtmp实现视频直播?

    最近几年直播软件搭建可谓大火,这也就导致了在视频直播领域,有不同的商家提供各种的商业解决方案,包括软硬件设备,摄像机,编码器,流媒体服务器等.本文要讲解的是在直播软件搭建中,如何基于rtmp实现视频直 ...

  9. 基于OpenCV的视频场景切割神器

    环境 windows 10 64bit anaconda with python 3.7 pyscenedetect 0.5.5 简介 了解视频剪辑的小伙伴,应该都知道转场这个词.一个视频场景转换到另 ...

  10. ev4视频转换为mp4工具使用教程

    有时,我们会从互联网上下载ev4这种格式的视频,这些视频通常是加密的,需要购买授权码才能播放. 基于这种情况,我们可以使用这个程序,它可以很容易地转换视频.ev4格式转换为视频格式.MP4格式并直接播 ...

最新文章

  1. linux中快速查找文件
  2. 单片机GPIO软件模拟I2C通讯程序
  3. 【控制】《多无人机协同控制技术》周伟老师-目录
  4. 【Tiny4412】烧写Uboot到EMMC
  5. SAP 电商云 Spartacus UI quick order 产品 live search 的实现
  6. 解决Chrome谷歌浏览器″Adobe Flash Player 插件已被屏蔽″的问题
  7. python创建长度为n的数组_在Python中建立N维数组并赋初值
  8. PHP 循环引用的问题
  9. uniapp打包成html5包个ios壳,HBuilder之uni-app打包App方法
  10. BZOJ 1015 题解
  11. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.11
  12. #9733;如何解释特修斯之船问题?
  13. Android开发:为什么你的学习效率如此低,为什么你很迷茫?
  14. 经典小游戏开发思路和算法之拼图(1)
  15. ubuntu下deactivate matlab的操作
  16. jt808终端鉴权_GitHub - SmallChi/JT808: JT808协议、GB808协议、道路运输车辆卫星定位系统-北斗兼容车载终端通讯协议(支持2013、2019版本)...
  17. spring概念理解之IOC(控制反转)
  18. vue如何新建一个项目(详细步骤)
  19. Qemu虚拟化PowerPc
  20. 通过百度人脸对比API进行人脸对比

热门文章

  1. 小程序轮播图测试用例
  2. 微信小程序-轮播图实现
  3. 他山之石——VBA SQL基础
  4. java计算机毕业设计O2O生鲜果蔬电商设计与实现(附源码、数据库)
  5. 舆情监测系统哪家好?
  6. ADI为何对MEMS传感器一往情深?
  7. MySQL数据库基本操作指令
  8. 封装0805跟0603有什么区别,只存在大小的区别么???
  9. 【每日一具9】Gif动画录制工具
  10. ubuntu下载字体