Java的新项目学成在线笔记-day14(二)
1.2.2 视频处理技术方案
如何通过程序进行视频处理?
ffmpeg是一个可行的视频处理程序,可以通过Java调用ffmpeg.exe完成视频处理。
在java中可以使用Runtime类和Process Builder类两种方式来执行外部程序,工作中至少掌握一种。 本项目使用Process Builder的方式来调用ffmpeg完成视频处理。
关于Process Builder的测试如下:
[mw_shl_code=applescript,true]@Test public void testProcessBuilder(){ ProcessBuilder processBuilder = new ProcessBuilder(); // processBuilder.command("ping","127.0.0.1"); processBuilder.command("ipconfig"); //将标准输入流和错误输入流合并,通过标准输入流读取信息 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(); } }
@Test public void testFFmpeg(){ ProcessBuilder processBuilder = new ProcessBuilder(); //定义命令内容 List<String> command = new ArrayList<>(); command.add("D:\\Program Files\\ffmpeg‐20180227‐fa0c9d6‐win64‐static\\bin\\ffmpeg.exe"); command.add("‐i"); command.add("E:\\ffmpeg_test\\1.avi"); command.add("‐y");//覆盖输出文件 command.add("‐c:v");command.add("libx264");
command.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:\\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(); }
}
[/mw_shl_code]
上边的代码已经封装成工具类,参见:
上边的工具类中:
Mp4VideoUtil.java完成avi转mp4
HlsVideoUtil.java完成mp4转hls
分别测试每个工具类的使用方法。
[mw_shl_code=applescript,true]public static void main(String[] args) throws IOException { //ffmpeg的路径
String ffmpeg_path = "D:\\Program Files\\ffmpeg‐20180227‐fa0c9d6‐win64static\\bin\\ffmpeg.exe";//ffmpeg的安装位置
//源avi视频的路径 String video_path = "E:\\ffmpeg_test\\1.avi"; //转换后mp4文件的名称 String mp4_name = "1.mp4";
//转换后mp4文件的路径 String mp4_path = "E:\\ffmpeg_test\\"; //创建工具类对象
Mp4VideoUtil videoUtil = new Mp4VideoUtil(ffmpeg_path,video_path,mp4_name,mp4_path); //开始视频转换,成功将返回success String s = videoUtil.generateMp4(); System.out.println(s); }[/mw_shl_code]
转载于:https://blog.51cto.com/13517854/2409068
Java的新项目学成在线笔记-day14(二)相关推荐
- Java的新项目学成在线笔记-day14(四)
1.2.3.5 视频处理生成m3u8 下边是完整的视频处理任务类代码,包括了生成m3u8及生成mp4的代码. [mw_shl_code=applescript,true]@Component publ ...
- Java的新项目学成在线笔记-day10(三)
1.4 测试CMS一键发布接口 1.4.1 配置虚拟主机 在nginx配置课程详情页面的虚拟主机,实现访问:www.xuecheng.com/course/detail/.....html. #静态资 ...
- Java的新项目学成在线笔记-day13(九)
6.2.2 创建媒资服务工程 媒资管理的相关功能单独在媒资服务中开发,下边创建媒资服务工程(xc-service-manage-media). 媒资服务的配置与cms类似,导入 "资料&qu ...
- Java的新项目学成在线笔记-day12(九)
3.1.4 搜索页面 创建搜索页面如下: 页面文件参考:"资料"-->"search"-->index_1.vue,重要代码如下: nuxt.js支 ...
- Java的新项目学成在线笔记-day7(一)
1.1需求分析 课程添加完成后可通过我的课程进入课程修改页面,此页面显示我的课程列表,如下图所示,可分页查询. 注意:由于课程图片服务器没有搭建,这里在测试时图片暂时无法显示. 上边的查询要实现分页. ...
- Java的新项目学成在线笔记-day13(八)
6 媒资管理 前边章节完成在线视频播放,如何实现点击课程计划播放视频呢,课程视频如何管理呢? 本节开始将对课程视频进行管理. 6.1需求分析 媒资管理系统是每个在线教育平台所必须具备的,百度百科对它的 ...
- Java的新项目学成在线笔记-day10(二)
1.3 课程发布接口 1.3.1 Api接口 此Api接口由课程管理提供,由课程管理前端调用此Api接口,实现课程发布. 在api工程下课程管理包下定义接口: [mw_shl_code=applesc ...
- Java的新项目学成在线笔记-day7(二)
1.3 前端页面说明 我的课程列表使用element 的card组件,如下: 页面布局代码如下: <template> <section> <el‐row >< ...
- Java的新项目学成在线笔记-day8(三)
1.1.3.1 需求 上传图片界面如下图: 点击"加号"上传图片,图片上传成功自动显示:点击"删除"将删除图片. 1.1.3.2 页面 使用Element-UI ...
- Java的新项目学成在线笔记-day12(六)
3.6 获取数据 3.6.1 asyncData 方法 Nuxt.js 扩展了 Vue.js,增加了一个叫 asyncData 的方法, asyncData 方法会在组件(限于页面组件)每次加载 之前 ...
最新文章
- 2019如何学Python?这里有你需要的答案
- laravel 如何自定义全局的方法/类
- 求连通块个数(使用并查集)
- no python interpreter configured
- android json解析及简单例子
- linux字符设备开发
- case when 效率高不高_扬州效率高的拍摄抖音短视频平台
- makefile文件管理
- 【原创】MapReduce实战(一)
- BB-UNet:带有包围框先验的U-Net
- 设某链表中最常用的操作是在链表的尾部_面试官:“双向链表”都不会,谁给你跳槽的勇气?...
- java多线程读取分割的文件_java多线程批量读取文件(二)--读写分离
- c语言实现对矩阵进行行程编码,游程编码行程编码.pptx
- 51,AVR,PIC,MSP430,STM32单片机比较
- React源码之React.createElement
- 转铁蛋白(Tf)修饰去氢骆驼蓬碱磁纳米脂质体/香豆素-6脂质体/多柔比星脂质体
- JavaScript Core -- 不可小视的标点符号
- neovim图标显示乱码,utf8字体显示乱码(Windows10和Centos安装nerd-fonts)
- 云上省钱新玩法 教你如何优惠与灵活兼得
- FFmpeg下载及命令行使用
热门文章
- 重启mysql tomcat_linux下MySQL、Tomcat、Redis、Nginx停止和重启
- IMPORTANT: You may need to close and restart your shell after running ‘conda init‘.
- 常用测试用例设计方法
- 类的加载器ClassLoader及其示例
- python中转义符的用法_一篇文章搞懂python的转义字符及用法
- python 二维矩阵画三维图_python 二维矩阵转三维矩阵示例
- android studio for android learning (二十八) android基础知识
- 【BAPC 2017】Hoarse Horses【欧拉平面图公式】
- 【HDU - 4794】Arnold【斐波那契数列循环节】
- 【Codeforces Round #546 (Div. 2) E】Nastya Hasn't Written a Legend【线段树】