一年前还是两年前使用手机在QB上看了“西游记之大闹天宫”电影,查看手机缓冲目录为n多个文件,copy到电脑上只有第一个能观看,其他的应该是没有视频文件头,记得当时好像用格式工厂也拼不到一块。于是就百度材料自己写了个小片段。现在快播青春已逝,将代码敲下来仅作纪念。
代码里面有个问题没有解决:再遍历文件的时候,如何才能按顺序读取?(就将源文件名字全改成一样的了,changeFileNameLength方法)

package utils.files_operate;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.io.FileUtils;public class FileCombine {/**
* 对于较小的文件可以使用字节来处理,当文件较大时需要使用IO流来处理文件
* 两个文件src1和src2合并后生成新的文件tar
* @param src1
* @param src2
* @param tar
* @throws IOException
*/
public static void TwoFilecombine(String src1,String src2,String tar) throws IOException{
File f1 = new File(src1);
File f2 = new File(src2);
File f3 = new File(tar);
byte[] f1_len = FileUtils.readFileToByteArray(f1);
byte[] f2_len = FileUtils.readFileToByteArray(f2);
int all_len = f1_len.length + f2_len.length;
byte[] in_all = new byte[all_len];
for(int i=0; i<f1_len.length;i++){
in_all[i] = f1_len[i];
}
for(int i=0; i<f2_len.length;i++){
in_all[i+f1_len.length] = f2_len[i];
}
FileUtils.writeByteArrayToFile(f3, in_all);
System.out.println(f3.length());
}/**
* 使用IO流来处理文件
* 两个文件src1和src2合并后生成新的文件tar
* @param src1
* @param src2
* @param tar
* @throws Exception
*/
public void CombineFile(String path,String tar) throws Exception{File dirFile = new File(path);
FileInputStream fis;
FileOutputStream fos = new FileOutputStream(tar);
byte buffer[] = new byte[1024*1024*2];
int len;
//如何才能按顺序读取?
for(File file:dirFile.listFiles()){
System.out.println(file.getAbsolutePath());
fis = new FileInputStream(file);
len = 0;
while((len = fis.read(buffer))!= -1){
fos.write(buffer,0,len);
}
fis.close();
}
fos.flush();
fos.close();
}public static void main(String[] args) throws Exception {
String path = "F:/Media/西游记之大闹天宫";
String tarPath = "F:/Media/西游记之大闹天宫.rmvb";
FileCombine fc = new FileCombine();
fc.changeFileNameLength(path, 3);  //是的文件读取时按照顺序执行
fc.CombineFile(path,tarPath);
}/**
* 更改文件名为三位,为什么要改文件名为三位呢,因为在指定目录下(比如:F:/Media/test)会按照文件名顺序读取文件。
* 如果不改成三位就会先读取01,然后010,文件拼接顺序不一致。
* 在这里已经把指定目录下的文件名全部变成了数字
*/
public void changeFileNameLength(String path,int length){
File dirFile = new File(path);
String fileName = null;
String extendName = null;
for(File file:dirFile.listFiles()){
fileName = file.getName().substring(0, file.getName().lastIndexOf("."));
extendName = file.getName().substring(file.getName().lastIndexOf("."));
while((fileName+"").length()<length){
fileName = "0"+fileName;
}
file.renameTo(new File(file.getParentFile().getAbsolutePath()+"\\"+fileName+extendName));
}
}
}

使用java进行视频文件拼接相关推荐

  1. java实现视频文件转换为flv(带文件缩略图)_java实现视频文件转换为flv(带文件缩略图)...

    在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRet ...

  2. Java 选择视频文件对话窗口

    // 默认存储路径final String VIDEOS_PATH = new File(USER_HOME + File.separator + "Videos").exists ...

  3. Android将多个视频文件拼接为一个文件

    正文 利用android的2个类MediaExtractor(抽取音/视频帧) + MediaMuxer (将音视频重新写入一个多媒体文件,完成封装). 合成文件为MP4.为啥是MP4? 因为andr ...

  4. 手机浏览器下载的m3u8格式的多个视频文件合并成一个视频(Java实现)

    最近手机下载了几个视频,在浏览器上播放无异常,但是当我想把视频复制到电脑上时,发现该视频格式为m3u8,仔细一看,原来还有一个以"."开头的隐藏文件夹,里面有好多大约10s的视频文 ...

  5. java获取视频第一帧工具类

    java获取视频文件第一帧,为了防止黑画面,此例取第五帧,本例子采用maven形式,可以获取视频的文件大小. 1. pom.xml 添加引用jar包 jdk采用1.8,日志自行添加即可,这里使用的是l ...

  6. java上传文件(java上传文件夹)

    Java如何删除文件? private void deleteFiles(List fileList, String path) { for (int index = 0; index fileLis ...

  7. Java中合并多个视频文件转换一个新的视频

    目录 一.概述 二..FFmpeg 1. 实现思路 2. 工具类 三.isoparser Jar解析方式 1. 依赖Jar 2. 工具类 如果发现本文有错误的地方,请大家毫不吝啬,多多指教,欢迎大家评 ...

  8. ffmpeg 合并小米云台视频文件 (java生成)

    1. 因为摄像头输出文件编码格式为 hevc 则需要把它转化为 h.264 格式在进行处理 命令: ffmpeg -i ./VID_20210818_201006.mp4 -map 0 -c:a co ...

  9. java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中

    java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中 配置完毕,接下来开始代码编写. 说明 总过程分为两步. 1.配置MinIO的环境. 2.代码编写. 下面 ...

最新文章

  1. IDEA热部署基于maven的web项目
  2. 你管这破玩意叫 RDB
  3. msvcr100.dll丢失原因及解决方法
  4. 8月14日 上课截图
  5. 项目中的模块剥离成项目_使用MCEBuddy 2从电视录制中剥离广告
  6. 线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析...
  7. Linux下mail服务器应用之邮件系统的安全性
  8. php中使用sftp教程,php 中的sftp 使用教程_PHP教程
  9. 解决网页内容无法复制的方法
  10. npm 清理缓存命令 【最新的】
  11. 智能指针的标准之争:Boost vs. Loki(转载)
  12. linux查看wifi信号命令_linux无线网络命令
  13. kaggle点赞最多的 泰坦尼克号数据竞赛模型融合方法(附代码)
  14. google登陆失败问题解决
  15. 华硕天选1隐藏盘恢复系统
  16. STM32读取旋钮编码器
  17. 主数据建设的挑战与发展
  18. 计算机毕业设计Python+uniapp驾校预约系统小程序(小程序+源码+LW)
  19. 1. 查询全部学生的学号、姓名、课程名称、成绩。
  20. matlab中mag 是什么,MATLAB中显示幅频特性语句plot(f(1:N/2),mag(1:N/2)*2/N);为什么mag(1:N/2)后面要乘以2/N?...

热门文章

  1. NPOI操作Word插入段落
  2. 面试必问之-SQL调优
  3. Day 30:HTML和CSS在Java项目中常用语法
  4. WiFi - AP 隔离
  5. LISP绘制草地_六枝仿真草隔热图纸博翔远人造草坪公司
  6. Lua 面向对象基础-类和对象(一)
  7. linux符号链接命名,Linux文件属性及软链接
  8. 开学了,复旦老师教你如何玩转“0”“1”浪漫!| 人物志
  9. 小说里的编程 【连载之二十六】元宇宙里月亮弯弯
  10. 服务器负载均衡是什么意思?