赞
踩
上一篇,提到直接拼接是不行的哈。
这里呢,剪辑人面临的一个难点是如何整备自己的素材资源呢?
我也是想了很久,问度娘,很多人都说自己弄个素材库,再找就方便了。
我呢,也不打算找其他方法了,如果有,麻烦告知一下我哈,谢谢了,大佬!!!爱你么么哒
这么多视频,我不可能从头看完,再做笔记,记下第几集几分几秒开始是鸣人哈哈大笑,从几分几秒开始战斗,我的时间不允许这么干,这不是要肝死我嘛。心疼我的肝,我还是用java看看能不能解决吧。
百度了一下,是有的,叫FFMPEG,好像还很有名的样子,总算是给了我一点希望。。。
继续搜寻下去,各种奇葩指令,cmd执行。
灵机一动,去码云上找找,果然,有大佬贡献过此方面的代码,百度也有代码,比对了一下,直接上手重写了一下代码,大意就是通过java去执行cmd里的ffmpeg的各种命令,用java实现业务逻辑,用ffmpeg实现视频分割,拼接,好像还有很多功能,只可惜我不会用,啧啧
先实现的是,分割,指定时间3秒,将所有视频全部分割成3s一段的小视频,这个好处就是,一目了然,不用看视频了。
下面我随便切了一个视频哈,这样查看缩略图就能快速定位自己的视频素材了,感觉还可以吧,毕竟程序只能帮助解决一部分劳动力,要是那么完美,也不太现实,目前,只能采取半程序自动化半人工筛选的方式,快速组织自己的视频素材库。
接下来就是分类,比如:鸣人哭,笑,踢腿,出拳,战斗等,进行分类,
第一想到的就是图片识别自动分类,可是百度了一下,机器学习搞不了啊,估计是有难度的,只能花时间,人工上了,我亲自筛选了。
可能这种分割视频软件市面上也有,可是,不是收费就是试用,最后还是要让我掏MONEY,我兜比脸都干净,大爷们啊,饶了我吧。我只想挣点块八毛的,别糟蹋我了。所以,没办法,自己动手,自给自足,只能自己上代码了,好处就是,我专有,为我私人定制,哈哈,我也体验一下甲方,自己提需求,自己动手解决吧
/** * 截取 * @param newVideoTime//设置每个视频总时间,s秒 * @param chaVideoTime//设置每个视频上下浮动时间,s秒 */ public static void toclip(String inpath,String outpath) { int newtime=Integer.parseInt(PropertiesUtil.get("clip_newtime"));//设置每个切片视频的时间,s秒 int chatime=Integer.parseInt(PropertiesUtil.get("clip_chatime"));//设置每个视频上下浮动时间,s秒 System.out.println("********开始获取文件夹下所有文件********"); FileUtil.deleteEveryThing(outpath);//全部删除 FileUtil.mkDirs(outpath);//文件夹不存在则创建 File partsfile = new File(inpath); if (partsfile.isDirectory()) { File[] files = partsfile.listFiles(); for (int j = 0; j < files.length; j++) { String file_path=files[j].getAbsolutePath();// VideoParameters video=FormatConversion.getVideoParameters(file_path); if (null == video) { throw new RuntimeException("未解析到视频信息"); } File videoFile = new File(file_path);//视频源 //创建文件夹以part文件名命名 String video_name=videoFile.getName(); String part_name=video_name.substring(0,video_name.lastIndexOf(".")); String part_outpath=outpath+"/"+part_name; FileUtil.mkDirs(part_outpath);//文件夹不存在则创建 Long videoTimeL=video.getVideoLengthTime();//视频时长 ,单位:秒 int count=videoTimeL.intValue()/newtime;//newtime每个视频总时间,s秒 //System.out.println(count);//总个数 String numstr=""; for(int i=1;i<=count;i++) { numstr=CommonUtil.numtostr(i); //新视频路径==拼接新文件路径,拼接原文件名 String newFilePath=part_outpath+"/"+numstr+"_"+videoFile.getName(); File outputFile = new File(newFilePath);//剪切后视频 // int random=new Random().nextInt(videoTimeCha);//视频随机时间,目的生产不同时段的视频 int random=(int)(Math.random() * chatime);//视频随机时间,目的生产不同时段的视频 Long newVideoTime1=(newtime*i+random)*1000L;//计算剪切开始时间,毫秒 //计算时分秒 SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");//初始化Formatter的转换格式。 formatter.setTimeZone(TimeZone.getTimeZone("GMT+00:00")); String hms = formatter.format(newVideoTime1); //System.out.println(hms); String[] hmsarr = hms.split(":"); Time time= new Time(0); time.setHours(Integer.parseInt(hmsarr[0])); time.setMinutes(Integer.parseInt(hmsarr[1])); time.setSeconds(Integer.parseInt(hmsarr[2])); System.out.println(time.toString()); VideoService.cutVideo(videoFile, outputFile, time, newtime+random); } } } }
对你没看错,就是这么个代码,就能裁剪了,电脑配置高,贼快贼快,好了,先做第一步,裁剪,后面再和大家说哈,心急吃不了热豆腐,我也是边摸索边干吧。
对不起大家,我只是个菜鸡,宝宝心里苦啊。。。。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。