java利用ffmpeg追加合并视频文件

  1. 首先要用到ffmpeg,可以根据操作系统自行下载
  2. 每个视频格式要一样,分辨率要一样
  3. 多个视频地址以list存放,直接上代码
 /*** 合并视频文件* @param videoPathList*/public void mergeVideo(List<String> videoPathList) {if (videoPathList.size() > 1){String ffmpegPath = CaptureConfig.getFfmpegPath();// 此处是配置地址,可自行写死如“D:\\ffmpeg\\ffmpeg.exe”String txtPath = "";try {int index = videoPathList.get(0).lastIndexOf(".");String newMergePath = videoPathList.get(0).substring(0, index) + "new" + videoPathList.get(0).substring(index, videoPathList.get(0).length());txtPath = videoPathList.get(0).substring(0, index) + ".txt";FileOutputStream fos = new FileOutputStream(new File(txtPath));for (String path : videoPathList){fos.write(("file '" + path + "'\r\n").getBytes());}fos.close();StringBuffer command = new StringBuffer("");command.append(ffmpegPath);command.append(" -f");command.append(" concat");command.append(" -safe");command.append(" 0");command.append(" -i ");command.append(txtPath);command.append(" -c");command.append(" copy ");// -c copy 避免解码,提高处理速度command.append(newMergePath);start(command.toString());// 删除产生的临时用来存放每个视频文件路径的txt文件File txtFile = new File(txtPath);txtFile.delete();// 删除原视频文件for (String filePath : videoPathList){File file = new File(filePath);file.delete();}// 合成的新视频文件重命名为原视频文件的第一个文件名File newFile = new File(newMergePath);File oldFile = new File(videoPathList.get(0));newFile.renameTo(oldFile);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}private void start(String command){try {final Process process = Runtime.getRuntime().exec(command);LOGGER.info("start run cmd {}", command);//⚠️此处代码是因为如果合并大视频文件会产生大量的日志缓存导致线程阻塞,最终合并失败,所以加两个线程处理日志的缓存,之后再调用waitFor方法,等待执行结果。new Thread(){@Overridepublic void run (){BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));String line = null;try {while ((line = in.readLine()) != null){System.out.println("output:" + line);}} catch (IOException e) {e.printStackTrace();} finally {try {in.close();} catch (IOException e) {e.printStackTrace();}}}}.start();new Thread(){@Overridepublic void run (){BufferedReader err = new BufferedReader(new InputStreamReader(process.getErrorStream()));String line = null;try {while ((line = err.readLine()) != null){System.out.println("err:" + line);}} catch (IOException e) {e.printStackTrace();} finally {try {err.close();} catch (IOException e) {e.printStackTrace();}}}}.start();// 等待命令子线程执行完成process.waitFor();process.destroy();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}
  1. 测试类
public static void main(String[] args) {long begin = System.currentTimeMillis();FileOperateServiceImpl impl = new FileOperateServiceImpl();// 合并视频文件List videoPathList = new ArrayList<>();videoPathList.add("E:\\111.flv");videoPathList.add("E:\\222.flv");videoPathList.add("E:\\333.flv");impl.mergeVideo(videoPathList);long end = System.currentTimeMillis();System.out.println(end - begin);}

java利用ffmpeg追加合并视频文件相关推荐

  1. Java 利用ffmpeg工具实现视频MP4转m3u8

    Java 利用ffmpeg工具实现视频MP4转m3u8(一) 前言 (一)ffmpeg工具转码 1.如何安装ffmpeg工具 2.如何使用ffmpeg工具进行视频转码 (二)播放m3u8文件 1.vi ...

  2. 使用 ffmpeg 快速合并视频文件

    1. 下载安装 ffmpeg 在官网上下载 ffmpeg 链接: Download FFmpeg windos 下下载 .ZIP 格式的 ffmpeg 直接解压即可,无需安装,之后配置好环境变量就好了 ...

  3. 利用ffmpeg来合并视频

    因为最近要求AcDown加入视频合并功能的呼声非常高(几乎一半多的反馈都在说这个问题),所以下午花了些时间来研究怎样用最方便(不需要最快)的方法来进行视频合并. AcDown之前的版本使用的是某个第三 ...

  4. Shell脚本利用ffmpeg批量处理视频文件

    最近遇到一个问题,对一个文件下所有视频文件进行切割处理,类似于把每个长30分钟视频文件截取其中的第10分钟到第20分钟的内容,截取出来的视频生成一个新的视频文件.当然在Linux底下我们有好用的工具f ...

  5. 使用ffmpeg合并视频文件的三种方法

    ffmpeg合并视频的方法有三种.国内大多数仅介绍了其中之一.于是觉得有必要翻译一下.其实在ffmpeg的 FAQ文档中有比较详细的说明. 使用concat协议进行视频文件的合并 这种方式的适用场景是 ...

  6. ffmpeg合并视频文件

    ffmpeg合并视频文件 创建列表文件filelist.txt,将需要合并的文件按顺序加入,内容如下所示: ffconcat version 1.0 file path/test_1.mp4 file ...

  7. Ubuntu下使用ffmpeg分割和合并视频文件

    1.ffmpeg的安装 sudo apt install ffmpeg 2.裁剪视频文件 ffmpeg -ss 00:00:00 -i input_file.mp4 -vcodec copy -aco ...

  8. FFMPEG 合并视频文件(无损)

    FFMPEG 合并视频文件(无损) 前言 最近在做视频转码相关业务,但是片源商给了一些DVD的零散视频片段,需要自己去合并片段并进行业务转码,本篇文章主要记录视频合并的过程及常见的合并方式. 环境 F ...

  9. 通过ffmpeg合并视频文件

    1. 生成将要合并的视频文件列表. 通过以下脚本生成将要合并的视频文件列表mylist.txt: (for %i in (*.mp4) do @echo file '%i') > mylist. ...

最新文章

  1. 代码规范之华为公司代码规范
  2. 新京报快评:浙大设“新生高额奖学金”,为何就成了“抢生源”?
  3. scjp考试准备 - 4 - 关于数组
  4. pyecharts第十节、地图(二、中国地图)
  5. MySql索引原理与使用大全
  6. java基础经典面试题10道
  7. 判断拐点_一文教你“如何寻找拐点”——拐点判断,简单易懂,建议收藏
  8. 为什么Kaggle不会让你成为一名出色的数据科学家?
  9. 用户扫描二维码进入公众号后自动发送指定消息_wetool的封杀、企业微信的崛起,我们要怎么利用企业微信进行用户增长?...
  10. NYOJ--12--喷水装置(二)
  11. android基于开源网络框架asychhttpclient,二次封装为通用网络请求组件
  12. csrss.exe介绍
  13. Win10+Ubuntu双系统修复Ubuntu系统引导
  14. 斯科特.H.杨:MIT 课程挑战者 __转
  15. 详解 Python 中的 filter() 函数
  16. python中import re_python中re模块
  17. 文件查找,打包压缩,解压相关分享
  18. Android获取通讯录信息
  19. 码农被3年资深程序员狂喷:根本不懂代码!
  20. 上海58同城区域小区请清单(数据)

热门文章

  1. Java注释说明以及IDEA中的快捷键
  2. android 重新开始服务,安卓系统梦想城镇如何删除数据重新开始 | 手游网游页游攻略大全...
  3. R语言apply系列函数
  4. 点击a标签不跳转链接
  5. (六)创建并调试SPFx字段扩展解决方案
  6. java使用递归迭代实现流程图展示(仅供参考)
  7. changyan main.php,织梦dedecms商业教程 dedecms5.7二次开发之常用函数列表及所在文件位置...
  8. 华为交换机命令 端口速率_附录5:如何设置交换机的端口速率、双工模式.doc
  9. 从零开始,教你如何安装、配置Python开发环境,Python入门安装教程,超级详细
  10. 网站流量日志分析系统