第四篇——胡咧咧之动漫素材如何快速分类?

本文探讨了如何利用FFmpeg进行视频素材的快速分割与初步分类,通过Java代码实现裁剪功能,解决动漫素材整理的痛点。作者分享了从需求到解决方案的详细过程,包括使用FFmpeg进行3秒片段切割,并计划后续进行更细致的类别划分如角色表情和动作识别。
摘要由CSDN通过智能技术生成

第四篇——胡咧咧之动漫素材如何快速分类?

上一篇,提到直接拼接是不行的哈。

这里呢,剪辑人面临的一个难点是如何整备自己的素材资源呢?
我也是想了很久,问度娘,很多人都说自己弄个素材库,再找就方便了。

我呢,也不打算找其他方法了,如果有,麻烦告知一下我哈,谢谢了,大佬!!!爱你么么哒
在这里插入图片描述

这么多视频,我不可能从头看完,再做笔记,记下第几集几分几秒开始是鸣人哈哈大笑,从几分几秒开始战斗,我的时间不允许这么干,这不是要肝死我嘛。心疼我的肝,我还是用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);
        		}
        	}
        }
	}

对你没看错,就是这么个代码,就能裁剪了,电脑配置高,贼快贼快,好了,先做第一步,裁剪,后面再和大家说哈,心急吃不了热豆腐,我也是边摸索边干吧。

对不起大家,我只是个菜鸡,宝宝心里苦啊。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值