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(二)相关推荐

  1. Java的新项目学成在线笔记-day14(四)

    1.2.3.5 视频处理生成m3u8 下边是完整的视频处理任务类代码,包括了生成m3u8及生成mp4的代码. [mw_shl_code=applescript,true]@Component publ ...

  2. Java的新项目学成在线笔记-day10(三)

    1.4 测试CMS一键发布接口 1.4.1 配置虚拟主机 在nginx配置课程详情页面的虚拟主机,实现访问:www.xuecheng.com/course/detail/.....html. #静态资 ...

  3. Java的新项目学成在线笔记-day13(九)

    6.2.2 创建媒资服务工程 媒资管理的相关功能单独在媒资服务中开发,下边创建媒资服务工程(xc-service-manage-media). 媒资服务的配置与cms类似,导入 "资料&qu ...

  4. Java的新项目学成在线笔记-day12(九)

    3.1.4 搜索页面 创建搜索页面如下: 页面文件参考:"资料"-->"search"-->index_1.vue,重要代码如下: nuxt.js支 ...

  5. Java的新项目学成在线笔记-day7(一)

    1.1需求分析 课程添加完成后可通过我的课程进入课程修改页面,此页面显示我的课程列表,如下图所示,可分页查询. 注意:由于课程图片服务器没有搭建,这里在测试时图片暂时无法显示. 上边的查询要实现分页. ...

  6. Java的新项目学成在线笔记-day13(八)

    6 媒资管理 前边章节完成在线视频播放,如何实现点击课程计划播放视频呢,课程视频如何管理呢? 本节开始将对课程视频进行管理. 6.1需求分析 媒资管理系统是每个在线教育平台所必须具备的,百度百科对它的 ...

  7. Java的新项目学成在线笔记-day10(二)

    1.3 课程发布接口 1.3.1 Api接口 此Api接口由课程管理提供,由课程管理前端调用此Api接口,实现课程发布. 在api工程下课程管理包下定义接口: [mw_shl_code=applesc ...

  8. Java的新项目学成在线笔记-day7(二)

    1.3 前端页面说明 我的课程列表使用element 的card组件,如下: 页面布局代码如下: <template> <section> <el‐row >< ...

  9. Java的新项目学成在线笔记-day8(三)

    1.1.3.1 需求 上传图片界面如下图: 点击"加号"上传图片,图片上传成功自动显示:点击"删除"将删除图片. 1.1.3.2 页面 使用Element-UI ...

  10. Java的新项目学成在线笔记-day12(六)

    3.6 获取数据 3.6.1 asyncData 方法 Nuxt.js 扩展了 Vue.js,增加了一个叫 asyncData 的方法, asyncData 方法会在组件(限于页面组件)每次加载 之前 ...

最新文章

  1. 2019如何学Python?这里有你需要的答案
  2. laravel 如何自定义全局的方法/类
  3. 求连通块个数(使用并查集)
  4. no python interpreter configured
  5. android json解析及简单例子
  6. linux字符设备开发
  7. case when 效率高不高_扬州效率高的拍摄抖音短视频平台
  8. makefile文件管理
  9. 【原创】MapReduce实战(一)
  10. BB-UNet:带有包围框先验的U-Net
  11. 设某链表中最常用的操作是在链表的尾部_面试官:“双向链表”都不会,谁给你跳槽的勇气?...
  12. java多线程读取分割的文件_java多线程批量读取文件(二)--读写分离
  13. c语言实现对矩阵进行行程编码,游程编码行程编码.pptx
  14. 51,AVR,PIC,MSP430,STM32单片机比较
  15. React源码之React.createElement
  16. 转铁蛋白(Tf)修饰去氢骆驼蓬碱磁纳米脂质体/香豆素-6脂质体/多柔比星脂质体
  17. JavaScript Core -- 不可小视的标点符号
  18. neovim图标显示乱码,utf8字体显示乱码(Windows10和Centos安装nerd-fonts)
  19. 云上省钱新玩法 教你如何优惠与灵活兼得
  20. FFmpeg下载及命令行使用

热门文章

  1. 重启mysql tomcat_linux下MySQL、Tomcat、Redis、Nginx停止和重启
  2. IMPORTANT: You may need to close and restart your shell after running ‘conda init‘.
  3. 常用测试用例设计方法
  4. 类的加载器ClassLoader及其示例
  5. python中转义符的用法_一篇文章搞懂python的转义字符及用法
  6. python 二维矩阵画三维图_python 二维矩阵转三维矩阵示例
  7. android studio for android learning (二十八) android基础知识
  8. 【BAPC 2017】Hoarse Horses【欧拉平面图公式】
  9. 【HDU - 4794】Arnold【斐波那契数列循环节】
  10. 【Codeforces Round #546 (Div. 2) E】Nastya Hasn't Written a Legend【线段树】