03-视频处理-视频处理技术方案
1.2.2 视频处理技术方案
如何通过程序进行视频处理?
ffmpeg是一个可行的视频处理程序,可以通过Java调用ffmpeg.exe完成视频处理。
在java中可以使用Runtime类和Process Builder类两种方式来执行外部程序,工作中至少掌握一种。
本项目使用Process Builder的方式来调用ffmpeg完成视频处理。
关于Process Builder的测试如下:
@Testpublic void testProcessBuilder() throws IOException {//创建ProcessBuilder对象ProcessBuilder processBuilder =new ProcessBuilder();//设置执行的第三方程序(命令)processBuilder.command("ping","127.0.0.1");//processBuilder.command("ipconfig");
// processBuilder.command("java","-jar","f:/xc-service-manage-course.jar");//将标准输入流和错误输入流合并,通过标准输入流读取信息就可以拿到第三方程序输出的错误信息、正常信息processBuilder.redirectErrorStream(true);//启动一个进程Process process = processBuilder.start();//由于前边将错误和正常信息合并在输入流,只读取输入流InputStream inputStream = process.getInputStream();//将字节流转成字符流InputStreamReader reader = new InputStreamReader(inputStream,"gbk");//字符缓冲区char[] chars = new char[1024];int len = -1;while((len = reader.read(chars))!=-1){String string = new String(chars,0,len);System.out.println(string);}inputStream.close();reader.close();}
@Testpublic void testFFmpeg() {ProcessBuilder processBuilder = new ProcessBuilder();//定义命令内容List<String> command = new ArrayList<>();command.add("E:\\java_soft\\ffmpeg-20180227-fa0c9d6-win64-static\\bin\\ffmpeg.exe");command.add("‐i");command.add("E:\\java_www\\ffmpeg_test\\lucene.avi");command.add("‐y");//覆盖输出文件command.add("‐c:v");command.add("libx264");//测试使用工具类将avi转成mp4command.add("‐s");command.add("1280x720");command.add("‐pix_fmt");command.add("yuv420p");command.add("‐b:a");command.add("63k");command.add("‐b:v");command.add("753k");command.add("‐r");command.add("18");command.add("E:\\java_www\\ffmpeg_test\\1.mp4");processBuilder.command(command);//将标准输入流和错误输入流合并,通过标准输入流读取信息processBuilder.redirectErrorStream(true);try {//启动进程Process start = processBuilder.start();//获取输入流InputStream inputStream = start.getInputStream();//转成字符输入流InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");int len = -1;char[] c = new char[1024];StringBuffer outputString = new StringBuffer();//读取进程输入流中的内容while ((len = inputStreamReader.read(c)) != -1) {String s = new String(c, 0, len);outputString.append(s);System.out.print(s);}inputStream.close();} catch (IOException e) {e.printStackTrace();}}
这种方式太麻烦,所以改为以下方式
上边的代码已经封装成工具类,参见:
上边的工具类中:
Mp4VideoUtil.java完成avi转mp4
HlsVideoUtil.java完成mp4转hls
分别测试每个工具类的使用方法。
@Testpublic void testProcessMp4() {//String ffmpeg_path, String video_path, String mp4_name, String mp4folder_path//ffmpeg的路径String ffmpeg_path = "E:\\java_soft\\ffmpeg-20180227-fa0c9d6-win64-static\\bin\\ffmpeg.exe";//video_path视频地址String video_path = "E:\\java_www\\ffmpeg_test\\lucene.avi";//mp4_name mp4文件名称String mp4_name = "1.mp4";//mp4folder_path mp4文件目录路径String mp4folder_path = "E:/java_www/ffmpeg_test/";Mp4VideoUtil mp4VideoUtil = new Mp4VideoUtil(ffmpeg_path, video_path, mp4_name, mp4folder_path);//开始编码,如果成功返回success,否则返回输出的日志String result = mp4VideoUtil.generateMp4();System.out.println(result);}
03-视频处理-视频处理技术方案相关推荐
- Android平台基于RTMP或RTSP的一对一音视频互动技术方案探讨
背景 随着智能门禁等物联网产品的普及,越来越多的开发者对音视频互动体验提出了更高的要求.目前市面上大多一对一互动都是基于WebRTC,优点不再赘述,我们这里先说说可能需要面临的问题:WebRTC的服务 ...
- 中小学、幼儿园远程视频监控系统技术方案
中小学.幼儿园远程视频监控系统技术方案 行业背景 近年来,随着我国教育事业的发展.高校扩招以及中小学合并等趋势,学校规模的扩张伴随着安全防范需求增大,科技的发展也推动着教学手段的更新,除了视频监控防范 ...
- 搭建视频网站的技术方案
一.视频网站和普通网站的区别 搭建视频网站和搭建普通网站,在技术实现方案上有很大的差别,因此,当有人问我是否可以采用搭建普通网站的方法搭建视频网站时,我会明确的告诉他们不可以,否者就贻笑大方了. 视频 ...
- 【技术方案】野外场景中的摄像头没有固定IP,如何联网实现视频监控需求?
TSINGSEE青犀视频平台的视频能力十分灵活,在实际项目中也经历过多种多样的监控场景与需求.较为常见的监控场景如工厂.校园.商场.楼宇.社区等等,摄像头在固定的场所,现场网络环境较好,摄像头有固定的 ...
- 在线公开课 | 5G时代的视频云服务关键技术与实践
课程概要 5G时代来临在即,视频技术将会如何发展呢?基于视频云服务的技术开发又有怎样的变化呢?为此,京东云视频云产品研发部高级总监魏伟为大家做出了详细解读. 魏伟拥有10多年视频行业研发经验,先后从事 ...
- 微信视频号聊天室技术介绍
之前介绍过微信红包系统的架构(参考:微信红包后台系统设计.微信红包设计方案). 微信作为国内在线用户最多的国民应用,其架构设计中的应对高流量.低延迟的一些技巧,在其他公司或团队解决高并发问题时一定有一 ...
- 周锦民:腾讯在线教育视频互动直播间技术实践
本文来自腾讯云技术沙龙,本次沙龙主题为在线教育个性化教学技术实践 演讲嘉宾:周锦民 | 2011年毕业进入腾讯, 现任在线教育部在线教育后台中心高级工程师,多年linux后台开发工作经验,目前主要负责 ...
- 高性能视频推理引擎优化技术
正文字数:9404 阅读时长:15分钟 本文整理自腾讯高级技术专家鲍金龙在LiveVideoStack线上分享上的演讲.他通过自身的实践经验,详细讲解了高性能视频推理引擎优化技术. 文 / 鲍金 ...
- 腾讯音视频实验室:基于音视频细分场景的技术创新探索
音视频通讯能力作为标配渗透到了各个行业,腾讯音视频实验室音频技术负责人郭亮在LiveVideoStackCon 2017上分享了腾讯音视频实验在流畅无卡顿.回声消除等音频前处理.网络部署与覆盖等各个技 ...
最新文章
- Java项目:在线婚纱摄影预定系统(java+javaweb+SSM+springboot+mysql)
- 用通配符解决mappingResources的繁琐配置
- anglarjs引入HTML头,请问怎么在html引入angularjs?
- Sublime Text编辑工具带有 PEP 8 格式检测插件
- char varchar java_在数据库中varchar与char的区别
- 深度linux 网络配置文件,solver及其配置 - Caffe 深度学习入门教程_Linux教程_Linux公社-Linux系统门户网站...
- dumpstack_Java Thread类的静态void dumpStack()方法(带示例)
- MyBatis框架 接口绑定、线程绑定
- mysql5.5.35编译安装_CentOS 6.5最小化编译安装mysql 5.5.35
- linux目录创立文件硬链接,在Linux中创建文件目录软链接、硬链接的方法
- 基于fpga的dds函数信号发生器的设计_低频信号发生器
- Atitit 人工智能体系树完整版 Atitit 人工智能体系培训列表 目录 1. 1.NLP自然语言处理文本处理	1 2. 知识图谱 知识处理系统	2 3. 2.机器视觉 图像处理	2 4.
- 加仓减仓口诀_加仓减仓口诀
- 让我带你一起了解一下 ls -l 命令输出的内容都有哪些意义,以及文件权限如何调整
- svg 动画_30个很棒的SVG动画
- 青花瓷的小鸟装饰蛋糕
- python图书管理实训报告总结_图书管理系统心得-总结报告模板
- 从零开始:小程序开发环境搭建详解
- entity 与dto 区别
- Towards End-to-End Lane Detection: an Instance SegmentationApproach