使用java进行视频文件拼接
一年前还是两年前使用手机在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进行视频文件拼接相关推荐
- java实现视频文件转换为flv(带文件缩略图)_java实现视频文件转换为flv(带文件缩略图)...
在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRet ...
- Java 选择视频文件对话窗口
// 默认存储路径final String VIDEOS_PATH = new File(USER_HOME + File.separator + "Videos").exists ...
- Android将多个视频文件拼接为一个文件
正文 利用android的2个类MediaExtractor(抽取音/视频帧) + MediaMuxer (将音视频重新写入一个多媒体文件,完成封装). 合成文件为MP4.为啥是MP4? 因为andr ...
- 手机浏览器下载的m3u8格式的多个视频文件合并成一个视频(Java实现)
最近手机下载了几个视频,在浏览器上播放无异常,但是当我想把视频复制到电脑上时,发现该视频格式为m3u8,仔细一看,原来还有一个以"."开头的隐藏文件夹,里面有好多大约10s的视频文 ...
- java获取视频第一帧工具类
java获取视频文件第一帧,为了防止黑画面,此例取第五帧,本例子采用maven形式,可以获取视频的文件大小. 1. pom.xml 添加引用jar包 jdk采用1.8,日志自行添加即可,这里使用的是l ...
- java上传文件(java上传文件夹)
Java如何删除文件? private void deleteFiles(List fileList, String path) { for (int index = 0; index fileLis ...
- Java中合并多个视频文件转换一个新的视频
目录 一.概述 二..FFmpeg 1. 实现思路 2. 工具类 三.isoparser Jar解析方式 1. 依赖Jar 2. 工具类 如果发现本文有错误的地方,请大家毫不吝啬,多多指教,欢迎大家评 ...
- ffmpeg 合并小米云台视频文件 (java生成)
1. 因为摄像头输出文件编码格式为 hevc 则需要把它转化为 h.264 格式在进行处理 命令: ffmpeg -i ./VID_20210818_201006.mp4 -map 0 -c:a co ...
- java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中
java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中 配置完毕,接下来开始代码编写. 说明 总过程分为两步. 1.配置MinIO的环境. 2.代码编写. 下面 ...
最新文章
- IDEA热部署基于maven的web项目
- 你管这破玩意叫 RDB
- msvcr100.dll丢失原因及解决方法
- 8月14日 上课截图
- 项目中的模块剥离成项目_使用MCEBuddy 2从电视录制中剥离广告
- 线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析...
- Linux下mail服务器应用之邮件系统的安全性
- php中使用sftp教程,php 中的sftp 使用教程_PHP教程
- 解决网页内容无法复制的方法
- npm 清理缓存命令 【最新的】
- 智能指针的标准之争:Boost vs. Loki(转载)
- linux查看wifi信号命令_linux无线网络命令
- kaggle点赞最多的 泰坦尼克号数据竞赛模型融合方法(附代码)
- google登陆失败问题解决
- 华硕天选1隐藏盘恢复系统
- STM32读取旋钮编码器
- 主数据建设的挑战与发展
- 计算机毕业设计Python+uniapp驾校预约系统小程序(小程序+源码+LW)
- 1.	查询全部学生的学号、姓名、课程名称、成绩。
- matlab中mag 是什么,MATLAB中显示幅频特性语句plot(f(1:N/2),mag(1:N/2)*2/N);为什么mag(1:N/2)后面要乘以2/N?...