视频截图Util
2018-09-18 06:36:29来源:博客园 阅读 ()
1 package com.zhwy.util; 2 3 import java.io.File; 4 import java.util.ArrayList; 5 import java.util.Calendar; 6 import java.util.List; 7 /** 8 * 视频转码_截图 9 */ 10 public class VideoToPicUtil { 11 12 public static void main(String[] args) { 13 String videoPathURL = "D:/ffmpeg_mencoder_File/sourceVideos/短视频.mp4";//源视频文件路径 14 VideoToPic(videoPathURL); 15 } 16 /** 17 * 视频截图工具 18 * @param videoPath 源视频文件路径 19 * @return 20 */ 21 public static String VideoToPic(String videoPath){ 22 if (!is_File(videoPath)) { //判断路径是不是一个文件 23 System.out.println(videoPath + " is not file"); 24 } 25 String VideoToPicResult=executeCodecs(videoPath); 26 return VideoToPicResult; 27 } 28 29 /** 30 * 判断路径是不是一个文件 31 * 32 * @param file 33 * 源视频文件路径 34 */ 35 private static boolean is_File(String path) { 36 File file = new File(path); 37 if (!file.isFile()) { 38 return false; 39 } 40 return true; 41 } 42 43 /** 44 * 判断视频格式 45 */ 46 private static int is_VideoType(String srcFilePath) { 47 String type = srcFilePath.substring(srcFilePath.lastIndexOf(".") + 1, srcFilePath.length()).toLowerCase(); 48 // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 49 if (type.equals("avi")) { 50 return 0; 51 } else if (type.equals("mpg")) { 52 return 0; 53 } else if (type.equals("wmv")) { 54 return 0; 55 } else if (type.equals("3gp")) { 56 return 0; 57 } else if (type.equals("mov")) { 58 return 0; 59 } else if (type.equals("mp4")) { 60 return 0; 61 } else if (type.equals("asf")) { 62 return 0; 63 } else if (type.equals("asx")) { 64 return 0; 65 } else if (type.equals("flv")) { 66 return 0; 67 } 68 // 对ffmpeg.exe无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder.exe)转换为.avi(ffmpeg能解析的格式). 69 else if (type.equals("wmv9")) { 70 return 1; 71 } else if (type.equals("rm")) { 72 return 1; 73 } else if (type.equals("rmvb")) { 74 return 1; 75 } 76 return 9; 77 } 78 /** 79 * 源视频转换成AVI格式 80 * 81 * @param type 82 * 视频格式 83 */ 84 // 对ffmpeg.exe无法解析的文件格式(wmv9,rm,rmvb等), 可以先用别的工具(mencoder.exe)转换为avi(ffmpeg能解析的)格式. 85 private static String convertToAVI(int type,String srcFilePath) { 86 String mencoderPath = "D:\\ffmpeg_mencoder_File\\Tools\\mencoder.exe"; // 转换工具路径 87 String fileNameWithoutSuffix=getFileNameWithoutSuffix(srcFilePath); 88 String codcFilePath ="D:\\ffmpeg_mencoder_File\\targetVideos\\"+fileNameWithoutSuffix+".avi";//【存放转码后视频的路径,记住一定是.avi后缀的文件名】 89 List<String> commend = new ArrayList<String>(); 90 commend.add(mencoderPath); 91 commend.add(srcFilePath); 92 commend.add("-oac"); 93 commend.add("lavc"); 94 commend.add("-lavcopts"); 95 commend.add("acodec=mp3:abitrate=64"); 96 commend.add("-ovc"); 97 commend.add("xvid"); 98 commend.add("-xvidencopts"); 99 commend.add("bitrate=600"); 100 commend.add("-of"); 101 commend.add("avi"); 102 commend.add("-o"); 103 commend.add(codcFilePath); 104 try { 105 //调用线程命令启动转码 106 ProcessBuilder builder = new ProcessBuilder(); 107 builder.command(commend); 108 builder.start(); 109 return codcFilePath; 110 } catch (Exception e) { 111 e.printStackTrace(); 112 return null; 113 } 114 } 115 116 /** 117 * 源视频转换成FLV格式 118 * @param srcFilePathParam 119 * 源:用于指定要转换格式的文件,要截图的源视频文件路径 120 */ 121 // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 122 private static String convertToFLV(String srcFilePathParam) { 123 if (!is_File(srcFilePathParam)) { 124 System.out.println(srcFilePathParam + " is not file"); 125 } 126 // 文件命名 127 String fileNameWithoutSuffix=getFileNameWithoutSuffix(srcFilePathParam); 128 String codcFilePath ="D:\\ffmpeg_mencoder_File\\targetVideos\\"+fileNameWithoutSuffix+".flv";//【存放转码后视频的路径,记住一定是.flv后缀的文件名】 129 String mediaPicPath ="d:\\ffmpeg_mencoder_File\\cutPicture\\"+ fileNameWithoutSuffix+".jpg"; 130 System.out.println("fileNameWithoutSuffix:"+fileNameWithoutSuffix); 131 Calendar c = Calendar.getInstance(); 132 String savename = String.valueOf(c.getTimeInMillis())+ Math.round(Math.random() * 100000); 133 String ffmpegPath = "D:\\ffmpeg_mencoder_File\\Tools\\ffmpeg.exe"; 134 List<String> commend = new ArrayList<String>(); 135 commend.add(ffmpegPath); 136 commend.add("-i"); 137 commend.add(srcFilePathParam); 138 commend.add("-ab"); 139 commend.add("56"); 140 commend.add("-ar"); 141 commend.add("22050"); 142 commend.add("-qscale"); 143 commend.add("8"); 144 commend.add("-r"); 145 commend.add("15"); 146 commend.add("-s"); 147 commend.add("600x500"); 148 commend.add(codcFilePath); 149 String cutPicPath =null; 150 try { 151 Runtime runtime = Runtime.getRuntime(); 152 Process proce = null; 153 cutPicPath = " D:\\ffmpeg_mencoder_File\\Tools\\ffmpeg.exe -i " 154 + srcFilePathParam 155 + " -y -f image2 -ss 2 -t 0.001 -s 600x500 "+ mediaPicPath; //截图文件的保存路径 156 proce = runtime.exec(cutPicPath); 157 //调用线程命令进行转码 158 ProcessBuilder builder = new ProcessBuilder(commend); 159 builder.command(commend); 160 builder.start(); 161 } catch (Exception e) { 162 e.printStackTrace(); 163 } 164 String tempFile= codcFilePath; 165 boolean status=deleteAVIFile(tempFile);//删除转码后的目标文件 166 System.out.println("是否删除成功呢"+status); 167 return cutPicPath; 168 } 169 /** 170 * 获取不带后缀名的文件名 171 * @param fileUrl 源视频文件路径 172 */ 173 public static String getFileNameWithoutSuffix(String fileUrl){ 174 File file=new File(fileUrl); 175 String fileNameWithoutSuffix=file.getName().replaceAll("[.][^.]+$", ""); 176 System.out.println("获取不带后缀名的文件名方法中输出:"+fileNameWithoutSuffix); 177 return fileNameWithoutSuffix; 178 } 179 /** 180 * 删除转换后的单个目标视频文件 181 * @param tempFile 转换后的目标视频文件 182 * @return 单个文件删除成功返回true,否则返回false 183 */ 184 public static boolean deleteAVIFile(String tempFile) { 185 File file = new File(tempFile); 186 if (file.exists()==true) { 187 if (file.delete()==true) { 188 return true; 189 }else{ 190 return false; 191 } 192 }else{ 193 return false; 194 } 195 } 196 197 /** 198 * 视频转码(mencoder.exe或ffmpeg.exe执行编码解码) 199 */ 200 private static String executeCodecs(String videoPath) { 201 // 判断视频的类型 202 int type = is_VideoType(videoPath); 203 String picResult = null; 204 //如果是ffmpeg可以转换的类型直接转码,否则先用mencoder转码成AVI 205 if (type == 0) { 206 System.out.println("直接将文件转为flv文件"); 207 picResult = convertToFLV(videoPath);// 直接将文件转为flv文件 ,并返回截图路径 208 } else if (type == 1) { // 209 String codcFilePath = convertToAVI(type,videoPath); //视频格式转换后的目标视频文件路径 210 211 if (codcFilePath == null){ 212 String message="avi文件没有得到"; 213 return message;// avi文件没有得到 214 } 215 picResult = convertToFLV(codcFilePath);// 将avi转为flv,并返回截图路径 216 } 217 return picResult; 218 } 219 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- idea使用小技巧(一) 2020-06-05
- Java中常用的包、类、接口以及util包下的常用类和方法(附: 2020-05-13
- 单元测试中使用Spring的ReflectionTestUtils更方便 2020-05-08
- 模块(类)之间解耦利器:EventPublishSubscribeUtils 事件 2020-05-07
- Java学习视频资源 2020-04-30
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash