主要用ffmpeg,将视频拆分成一帧帧图片,然后分别修改图片,再重新合成视频

断断续续搞了几个月,先记录一下。

public static void makeVideos(String videoPath,List<List<String>> txs, String srcmusic,String targetPath){String tem="c:/temspace/"+FileUtil.getFileNameWithoutSuffix(videoPath);//生成每一帧FfmpegUtil.video2Images(videoPath, tem);List<String> imgs = FileUtil.orderNameByNumber(FileUtil.getAllSubPath(tem));//修改帧数Map<String, Object> info = FfmpegUtil.getVideoInfo(videoPath);int totalframe=Integer.parseInt(info.get("totalframe").toString());int fps=Integer.parseInt(info.get("fps").toString());int newfps=fps-1;List<String> newimgs=new ArrayList<String>();for (int i = 0; i < (totalframe/fps); i++) {Map<Integer, Integer> position = VideoImageUtil.setPosition(newfps, fps);for(int key:MapUtil.orderMapKey(position)){int v=position.get(key);newimgs.add(imgs.get(i*fps+v-1));}}   for (int i = (totalframe/fps)*fps; i < totalframe; i++) {newimgs.add(imgs.get(i));}imgs.removeAll(newimgs);FileUtil.delFile(imgs);FileUtil.rename_ordernum(newimgs,1);imgs = FileUtil.orderNameByNumber(FileUtil.getAllSubPath(tem));//每一帧加上特效List<Integer> idxs=new ArrayList<>();for (int i = 0; i < txs.size(); i++) {idxs.add(1);}for (int i = 0; i < imgs.size(); i++) {for (int j = 0; j < idxs.size(); j++) {if(idxs.get(j)>=txs.get(j).size()) idxs.set(j, 0);}for (int j = 0; j < txs.size(); j++) {List<String> tx = txs.get(j);ImageBorderUtil.screen(imgs.get(i), tx.get(idxs.get(j)), imgs.get(i));idxs.set(j, idxs.get(j)+1);}ImageUtil.gaussian(imgs.get(i), 0, 990, 576, 34, 20, imgs.get(i));ImageUtil.gaussian_gradual(imgs.get(i), 0, 0, 576, 30, false,20, imgs.get(i));}//生成视频String temvideo="c:/temspace/"+System.currentTimeMillis()+".mp4";String usemusic="c:/temspace/"+System.currentTimeMillis()+".wav";boolean issrcmusic=false;FfmpegUtil.images2Video(tem, newfps,temvideo);Map<String, Object> teminfo = FfmpegUtil.getVideoInfo(temvideo);long len=1000*Long.parseLong(teminfo.get("milstimelen").toString());//视频长度 微秒long microsecond = WavUtil.getMicrosecond(srcmusic);//音乐长度 微秒if(len>microsecond){//音乐太短,重复补足到视频长度int time=(int) (len/microsecond);List<String> subfiles=new ArrayList<String>();for (int i = 0; i < time; i++) {subfiles.add(srcmusic);}long cutlen=len%microsecond;String temleftaudio="";if(cutlen>0){temleftaudio="c:/temspace/"+System.currentTimeMillis()+".wav";WavUtil.cut(srcmusic, temleftaudio, 0, cutlen);subfiles.add(temleftaudio);}WavUtil.mergeAudio(subfiles,usemusic);if(!"".equals(temleftaudio)) FileUtil.del(temleftaudio);}else if(len<microsecond){//音乐太长,截取WavUtil.cut(srcmusic, usemusic, 0, len);}else{usemusic=srcmusic;issrcmusic=true;}FfmpegUtil.combineVideoAndAudio(temvideo, usemusic, targetPath);FileUtil.del(temvideo);if(!issrcmusic) FileUtil.del(usemusic);FileUtil.del(tem);}

Java加视频特效,实现伪原创相关推荐

  1. 视频怎么用伪原创手机 抖音短视频如何去水印

             视频怎么用伪原创手机 抖音短视频如何去水印        文章只能显示文字,视频可以显示文字,图像,声音甚至特效,这些都是文字中没有的..              视频自媒体最主要 ...

  2. 西瓜视频怎么做伪原创

             西瓜视频怎么做伪原创          帐户的累计读取/累计金额越高,转移越大.有两个中心点可以提高你的注意力:1.账户速度快,注意力高,粉丝有更多评论和高度关注.,无论是历史,娱乐 ...

  3. 视频消重伪原创版 怎么修改视频的MD5值

             视频消重伪原创版 怎么修改视频的MD5值          其实,在这流量横飞的抖音里,引流.变现也无非就是通过以下两种方式.                      在短视频操作 ...

  4. 手机怎么去掉视频水印,伪原创视频 怎么去视频logo批量处理去重消重去水印去logo软件...

    手机怎么去掉视频水印,伪原创视频 怎么去视频logo批量处理去重消重去水印去logo软件 头条号视频重复修改md5批量处理去重消重去水印去logo软件 视频去重方法批量处理去重消重去水印去logo软件 ...

  5. 短视频搬运如何伪原创 手机小视频用去水印用改md5

             短视频搬运如何伪原创 手机小视频用去水印用改md5         视频伪原创是进行短视频引流的无论是历史,娱乐还是体育,这都是一个技巧,这是读者的相关性..        核心基础 ...

  6. 抖音火山视频怎么做伪原创

             抖音火山视频怎么做伪原创          更多关注同事的信息将帮助您更好地找到灵感.,那么,我们如何制作这些材料呢!只有一种技能,这是特别好的方法.,短视频具有更高的性能,更容易积 ...

  7. 视频消重伪原创下载安装 视频的md5值是什么意思

             视频消重伪原创下载安装 视频的md5值是什么意思          电视剧成就了一波人.订阅号成就了一波人.微博成就了一波人.网大网综成就了一波人.短视频又成就了一波人...     ...

  8. 自媒体短视频搬运如何伪原创上热门!老司机教你伪原创短视频的做法

    都知道现在短视频市场很火爆,吸粉.变现,容易赚钱等等.但是不是每个人都有自己的团队,也不是每个人都可以去做原创视频,那么怎么去用别人的视频成为我们的原,伪原创视频需要改什么,创视频,这个给大家详细的说 ...

  9. 伪原创视频的处理技巧

    现在自媒体行业,在没有师傅带的情况下是很难做的起来的,文章还好,如果有点文采,就可以参看网络中的爆文,根据自己的话语,写出很不错的文章 可是现在呢,众所周知的,视频的单价和流量都要比文章高,但是要想做 ...

最新文章

  1. mysql-5.7.24-winx64忘记密码该咋解决
  2. Python基础知识详解
  3. JVM参数调优,无停滞实践
  4. python学会后月薪-零基础python培训后薪资有多少?
  5. 链路层的封装方式与IP选路 (二)
  6. 训练作用_不同振幅的振动训练对身体的作用
  7. 电力自动化及继电保护实验室规章制度
  8. 领域驱动设计学习心得
  9. 防止链接和二维码被微信拦截(被封锁、被屏蔽、被和谐)的最新方法——MaxJump
  10. Linux命令之设置普通用户具有超级管理员权限sudo
  11. Android - 跳转系统网络设置
  12. 有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
  13. Chrome浏览器配置阿里云DNS方法
  14. 单目标优化、多目标优化
  15. 如果别人不相信你的CAE分析结果怎么办?
  16. 音频有噪音怎么办?不如试试这款软件。
  17. Downie4许可证代码 MacOS上最好的在线视频下载工具
  18. PHP Web项目部署记录(一)
  19. Docker安装的Nginx无法访问静态资源|nginx 容器静态资源无法访问
  20. 基于FPGA的线阵CCD实时图像采集系统

热门文章

  1. 直播 NO.5 | Facebook 田渊栋:用深度(强化)学习为组合优化寻找更好的启发式搜索策略...
  2. 收藏!!如何 Get 机器学习必备的算法技能? | 逻辑回归
  3. 新论文推荐:Auto-Keras:自动搜索深度学习模型的网络架构和超参数
  4. 武大上交发布首篇「图像匹配」大领域综述!涵盖 8 个子领域,汇总近 20年经典方法
  5. 开源|如何开发一个高性能的redis cluster proxy?
  6. 网易云推出了一组程序猿の真实写照【文末有彩蛋】
  7. 再来一波PHP程序员必看书籍
  8. 软件开发中IT用语-日文和英文对照版
  9. 为终端服务连接配置网络级身份验证
  10. MySQL数据库管理(二)单机环境下MySQL Cluster的安装