我开始学习java编码,我想分割视频文件,所以在这里我从youtube
获得了代码。代码将文件拆分为必需的部分mb我做了一些修改希望它将文件拆分为所需的部件数。此原始代码将文件拆分为16 mb
:
if(e==1024*1024*16) // split the file to 16 mb for each part
{
e =0L;
fout.close();
doPart();
}
所以,如果我把想要的值放在kb中,例如。每个部分300kb,程序只是不为我分割文件。
package fsplit;
import java.io.File;
import java.io.RandomAccessFile;
public class SplitVid {
public static void main(String args[])
{
try {
new SplitVid();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // end main
File f=new File("thisfile.mp4");
long fsize = f.length()/1024; // file size in bytes
long parts = 9; // Divide the file into how many parts?
long fsizeOfEachinkB = fsize/parts;
int readInt;
RandomAccessFile fin, fout;
byte b[] = new byte[2048];
long e = 0L;
int j = 1;
public SplitVid() throws Exception
{
fin=new RandomAccessFile(f, "r");
doPart();
}
public void doPart() throws Exception
{
fout = new RandomAccessFile(f.getPath() + "Part"+j++, "rw");
while((readInt = fin.read(b))!= -1)
{
fout.write(b, 0, readInt);
e+= readInt;
**if(e==1024*fsizeOfEachinkB)//divide each file into fsize/parts per file**
{
e =0L;
fout.close();
doPart();
}
}
System.out.println("The size of this file is " + f.length()/1024 + " kb");
System.out.println("The file is divided into " + parts + " parts");
System.out.println("Each part has " + fsizeOfEachinkB + " kb");
fout.close();
fin.close();
f.delete(); // deletes the original file after the split is done
}
} //end class
现在,如果我增加'部分'在fsizeOfEachinkB
小于1 mb
之前,程序根本不会拆分文件。有人请帮我看看吗?
答案 0 :(得分:13)
将文件Despicable Me 2 - Trailer (HD) - YouTube.mp4拆分为二十个相等的部分
注意:将文件Despicable Me 2 - Trailer (HD) - YouTube.mp4
粘贴到Documents
文件夹下。
使用java将视频文件拆分为多个视频文件的示例。
<强>代码:强>
package com.uk.mysqlmaven.jsf.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
*
* @author uday.p
*
*/
public class SplitVideoFile {
public static void main(String[] args) {
try {
File file = new File("C:/Documents/Despicable Me 2 - Trailer (HD) - YouTube.mp4");//File read from Source folder to Split.
if (file.exists()) {
String videoFileName = file.getName().substring(0, file.getName().lastIndexOf(".")); // Name of the videoFile without extension
File splitFile = new File("C:/Documents/Videos_Split/"+ videoFileName);//Destination folder to save.
if (!splitFile.exists()) {
splitFile.mkdirs();
System.out.println("Directory Created -> "+ splitFile.getAbsolutePath());
}
int i = 01;// Files count starts from 1
InputStream inputStream = new FileInputStream(file);
String videoFile = splitFile.getAbsolutePath() +"/"+ String.format("%02d", i) +"_"+ file.getName();// Location to save the files which are Split from the original file.
OutputStream outputStream = new FileOutputStream(videoFile);
System.out.println("File Created Location: "+ videoFile);
int totalPartsToSplit = 20;// Total files to split.
int splitSize = inputStream.available() / totalPartsToSplit;
int streamSize = 0;
int read = 0;
while ((read = inputStream.read()) != -1) {
if (splitSize == streamSize) {
if (i != totalPartsToSplit) {
i++;
String fileCount = String.format("%02d", i); // output will be 1 is 01, 2 is 02
videoFile = splitFile.getAbsolutePath() +"/"+ fileCount +"_"+ file.getName();
outputStream = new FileOutputStream(videoFile);
System.out.println("File Created Location: "+ videoFile);
streamSize = 0;
}
}
outputStream.write(read);
streamSize++;
}
inputStream.close();
outputStream.close();
System.out.println("Total files Split ->"+ totalPartsToSplit);
} else {
System.err.println(file.getAbsolutePath() +" File Not Found.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
控制台输出:
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/01_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/02_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/03_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/04_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/05_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/06_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/07_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/08_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/09_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/10_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/11_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/12_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/13_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/14_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/15_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/16_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/17_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/18_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/19_Despicable Me 2 - Trailer (HD) - YouTube.mp4
File Created Location: C:\Documents\Videos_Split\Despicable Me 2 - Trailer (HD) - YouTube/20_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Total files Split ->20
Windows 8中保存的视频文件的屏幕截图:
以下是将视频分割为多个视频文件后,将所有视频文件作为单个视频文件加入的代码。
注意:必需的jar文件commons-io-2.2.jar
<强>代码:强>
package com.uk.mysqlmaven.jsf.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
/**
*
* @author uday.p
*
*/
public class JoinVideoFile {
public static void main(String[] args) {
try {
File splitFiles = new File("C:/Documents/Videos_Split/Despicable Me 2 - Trailer (HD) - YouTube/");// get all files which are to be join
if (splitFiles.exists()) {
File[] files = splitFiles.getAbsoluteFile().listFiles();
if (files.length != 0) {
System.out.println("Total files to be join: "+ files.length);
String joinFileName = Arrays.asList(files).get(0).getName();
System.out.println("Join file created with name -> "+ joinFileName);
String fileName = joinFileName.substring(0, joinFileName.lastIndexOf("."));// video fileName without extension
File fileJoinPath = new File("C:/Documents/Videos_Join/"+ fileName);// merge video files saved in this location
if (!fileJoinPath.exists()) {
fileJoinPath.mkdirs();
System.out.println("Created Directory -> "+ fileJoinPath.getAbsolutePath());
}
OutputStream outputStream = new FileOutputStream(fileJoinPath.getAbsolutePath() +"/"+ joinFileName);
for (File file : files) {
System.out.println("Reading the file -> "+ file.getName());
InputStream inputStream = new FileInputStream(file);
int readByte = 0;
while((readByte = inputStream.read()) != -1) {
outputStream.write(readByte);
}
inputStream.close();
}
System.out.println("Join file saved at -> "+ fileJoinPath.getAbsolutePath() +"/"+ joinFileName);
outputStream.close();
} else {
System.err.println("No Files exist in path -> "+ splitFiles.getAbsolutePath());
}
} else {
System.err.println("This path doesn't exist -> "+ splitFiles.getAbsolutePath());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
控制台输出:
Total files to be join: 20
Join file created with name -> 01_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 01_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 02_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 03_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 04_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 05_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 06_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 07_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 08_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 09_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 10_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 11_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 12_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 13_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 14_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 15_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 16_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 17_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 18_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 19_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Reading the file -> 20_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Join file saved at -> C:\Documents\Videos_Join\01_Despicable Me 2 - Trailer (HD) - YouTube/01_Despicable Me 2 - Trailer (HD) - YouTube.mp4
Windows 8中保存的加入视频文件的屏幕截图
答案 1 :(得分:2)
对于特定拆分,您必须做以下事情..
1]计算此文件可以进行分区。
表示你想要300KB的每个部分而不是......
calculeteParts=(long)(fsize/(300));//As fsize already in KB in your program.(FOR FILE IN MB)
2]如果没有零件从文件f说,我们可以制作30个大小为300KB的版本。
while((readInt = fin.read(b))!= -1)
{
fout.write(b, 0, readInt);
e+= readInt;
if(e==300*1024)//if Read 300 Upcoming KBs done
{
e =0L;
fout.close();
doPart();
}
}
但最重要的是
问题需要解决
假设您有一个大小为9.04MB的文件,并且您希望将其划分为300KB分区。 因此,以编程方式执行此操作,您将不得不使其成为300KB的倍数。
实施例
9.04*1024=9256.46KB
So total of 9256KB approximately
Now Divide it with your needed size
9256/300=30.85 so approximately 30 parts.
So 0.85 will be lost
Or if you take **31**:
300*31=9300 which is greater than 9256
递归调用的 doParts();
方法,因此在最后一部分,它可能不会达到300KB的大小,它将读取到可能的值,但之后它将生成Stream Closed:IOEXception
尽管它对你来说并不重要。比它还好。
答案 2 :(得分:2)
视频已成功分割,但视频未播放(播放器可能不支持该文件类型,或者可能不支持用于压缩文件的编解码器。)
onCreateView