裁剪视频主要是要安装 ffmpeg 然后使用Java代码控制它对视频进行裁剪
核心代码:
//finalPath就是你的视频位置加视频名称
//outPath就是你视频的输出位置
//fileName就是你视频输出后的名称
//crop=1920:960:0:0 里面的前两个参数为你要裁剪后的视频大小,后两个参数为裁剪起始的xy分辨率
//crop=a:b:c:d a为裁剪后的长度,b为裁剪后的宽度,c为开始裁剪的那个点的x坐标,d为开始裁剪的那个点的y坐标
ffmpeg -i finalPath -vf crop=1920:960:0:0 outPath\fileName -y;
ffmpeg安装包和环境配置
链接:https://pan.baidu.com/s/16mxXgqIRoh6Ssh8uT2eHEg
提取码:znjl
下载下来之后找个位置将它解压就能直接用了,懂不?直接用,不用安装,选的位置不要太随意。
环境直接写到bin层就行了。
环境配置完了,windows+R,cmd,回车,输入ffmpeg -version,显示相关信息就成了。
使用Java控制cmd操作ffmpeg进行视频裁剪
核心代码都在这里了,但是不是完整代码,你们自己拾到拾到就能用了。
package sample;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.PrintStream;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
public class Controller
{
@FXML
private TextField But1Text1;
@FXML
private TextField bth2text2;
File filepatelist;
String getfilepath;
String[] flashname;
String[] finalpath;
File[] flashpath;
File[] flashpath2;
File[] flashpath3;
File[] flashpath4;
File[] flashpath5;
File[] flashpath6;//自定义
String getfilepatelist;
String zidingyiCanShu="1920:960";
public void getFilePathDemo()
throws Exception
{
System.out.println(this.flashpath6);
DirectoryChooser directoryChooser = new DirectoryChooser();
//默认打开的路径
directoryChooser.setInitialDirectory(new File("C:\\"));
Stage stage = new Stage();
//页面传入的路径
this.getfilepath = directoryChooser.showDialog(stage).toString();
File file = new File(this.getfilepath);
//获取路径中的文件和文件夹路径(返回数组)
this.flashpath = file.listFiles();
System.out.println(this.flashpath);
//循环数组中的路径(第二层)
for (int i = 0; i < this.flashpath.length; i++) {
//判断是否为文件夹
if (this.flashpath[i].isDirectory())
{
//获取路径中的文件和文件夹路径(返回数组)
this.flashpath2 = this.flashpath[i].listFiles();
//循环数组中的路径(第三层)
for (int j = 0; j < this.flashpath2.length; j++) {
//判断是否为文件夹
if (this.flashpath2[j].isDirectory())
{
//获取路径中的文件和文件夹路径(返回数组)
this.flashpath3 = this.flashpath2[j].listFiles();
for (int k = 0; k < this.flashpath3.length; k++) {
if (this.flashpath2[j].isDirectory()) {
if (this.flashpath3[k].getName().equals("aaa")) {
//获取路径中的文件和文件夹路径(返回数组)
this.flashpath4 = this.flashpath3[k].listFiles();
}else if(this.flashpath3[k].getName().equals("bbb")){
//获取路径中的文件和文件夹路径(返回数组)
this.flashpath5 = this.flashpath3[k].listFiles();
}else if(this.flashpath3[k].getName().equals("自定义")){
//获取路径中的文件和文件夹路径(返回数组)
this.flashpath6 = this.flashpath3[k].listFiles();
}else{
System.out.println(this.flashpath3[k]+"不是 aaa 、 bbb 或 自定义 文件夹");
}
}
}
if(this.flashpath4!=null){
// 循环可见光文件夹
for (int x = 0; x < this.flashpath4.length; x++)
{
String filePath = this.flashpath2[j].getPath() + "\\剪切aaa\\";
File outFileDirec = new File(filePath);
if (!outFileDirec.exists()) {
outFileDirec.mkdir();
}
splitVideo(this.flashpath4[x].getPath(), filePath, this.flashpath4[x].getName(),"aaa");
}
}
if(this.flashpath5!=null){
// 循环红外文件夹
for (int x = 0; x < this.flashpath5.length; x++)
{
String filePath = this.flashpath2[j].getPath() + "\\剪切bbb\\";
File outFileDirec = new File(filePath);
if (!outFileDirec.exists()) {
outFileDirec.mkdir();
}
splitVideo(this.flashpath5[x].getPath(), filePath, this.flashpath5[x].getName(),"bbb");
}
}
if(this.flashpath6!=null){
// 循环自定义文件夹
for (int x = 0; x < this.flashpath6.length; x++)
{
String filePath = this.flashpath2[j].getPath() + "\\剪切自定义\\";
File outFileDirec = new File(filePath);
if (!outFileDirec.exists()) {
outFileDirec.mkdir();
}
splitVideo(this.flashpath6[x].getPath(), filePath, this.flashpath6[x].getName(),"zidingyi");
}
}
}
}
}
}
// this.But1Text1.setText(this.getfilepatelist);
System.out.println("程序结束,请查看结果");
}
public void getUpdateFliePathDemo()
{
DirectoryChooser directoryChooser = new DirectoryChooser();
directoryChooser.setInitialDirectory(new File("C:\\"));
Stage stage = new Stage();
this.getfilepatelist = directoryChooser.showDialog(stage).toString();
this.filepatelist = new File(this.getfilepatelist);
this.bth2text2.setText(this.getfilepatelist);
}
public void splitVideo(String finalPath, String outPath, String fileName,String type)
throws Exception
{
System.out.println(finalPath+" 裁剪开始");
System.out.println("正在裁剪,请勿操作或中断");
String cmd = "";
if(type == "aaa"){
cmd = "ffmpeg -i " + finalPath + " -vf crop=1920:960:0:0 " + outPath + "\\" + fileName + " -y";
}else if(type == "bbb"){
cmd = "ffmpeg -i " + finalPath + " -vf crop=720:520:0:0 " + outPath + "\\" + fileName + " -y";
}else if(type == "zidingyi"){
cmd = "ffmpeg -i " + finalPath + " -vf crop="+zidingyiCanShu+":0:0 " + outPath + "\\" + fileName + " -y";
}
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line;
while ((line = br.readLine()) != null) {
// System.out.println(line);
}
boolean btnSet = true;
process.waitFor();
System.out.println(finalPath+" 裁剪结束");
System.out.println();
}
}