Java转换视频格式或者分辨率
功能如题
前提:本⽂是在windows下测试可⽤,linux还未尝试
需提前准备好第三⽅软件ffmpeg,
且被操作的视频必须为ffmpeg⽀持的视频格式(ffmpeg⽀持⼤部分主流格式)
可直接复制尝试使⽤,当然路径要改成⾃⼰的
(注释配合main⽅法⾥的调⽤,应该能看懂)
更多ffmpeg的命令(如:视频纵横⽐)参考、
视频分辨率:720p 1280×720
1080p 1920x1080
package com.founder.util.video;
import java.util.ArrayList;
import java.util.List;
public class TransferUtil {
public static void main(String[] args) throws FFmpegException {
boolean flag = transform("D:\\ffmpeg\\ffmpeg2016\\bin\\", "d:\\ys\\StoryBrooke.mp4", "d:\\ys\\480p.flv", "480x320");
System.out.println(flag);
盲人过桥
}
/**
* 视频转换
巨嘴鸟* @param ffmpegPath ffmpeg路径
* @param oldPath 原视频地址
* @param newPath 新视频存放地址(包含视频格式)
* @param resolution 分辨率
* @return
* @throws FFmpegException
*/
public static Boolean transform(String ffmpegPath, String oldPath, String newPath, String resolution) throws FFmpegException {
List<String> command = getFfmpegCommand(ffmpegPath, oldPath, newPath, resolution);
if (null != command && command.size() > 0) {
return process(command);
}
return fal;
}
private static boolean process(List<String> command) throws FFmpegException {
try {
lbjif (null == command || command.size() == 0)
return fal;
Process videoProcess = new ProcessBuilder(command).redirectErrorStream(true).start();
int exitcode = videoProcess.waitFor();
if (exitcode == 1)
return fal;
return true;
} catch (Exception e) {
throw new FFmpegException("file transfer failed", e);
}
}
private static List<String> getFfmpegCommand(String ffmpegPath, String oldfilepath, String outputPath, String resolution) throws FFmpegException { List<String> command = new ArrayList<String>();
排骨萝卜汤>玉米饼子的做法command.add(ffmpegPath); // 添加转换⼯具路径
command.add("-i"); // 添加参数"-i",该参数指定要转换的⽂件
command.add(oldfilepath); // 添加要转换格式的视频⽂件的路径
command.add("-qscale"); // 指定转换的质量
command.add("4");
/*command.add("-ab"); //设置⾳频码率
command.add("64");
command.add("-ac"); //设置声道数
command.add("2");
Tiptip
command.add("-ar"); //设置声⾳的采样频率
command.add("22050");*/
command.add("-r"); // 设置帧速率
command.add("24");
command.add("-s"); // 设置分辨率
command.add(resolution);
command.add("-y"); // 添加参数"-y",该参数指定将覆盖已存在的⽂件 command.add(outputPath);
return command;
}
}
class FFmpegException extends Exception {
private static final long rialVersionUID = 1L;
public FFmpegException() {
super();
}
public FFmpegException(String message) {
super(message);
}
public FFmpegException(Throwable cau) {普通业务
super(cau);
}
可以用香皂洗脸吗
public FFmpegException(String message, Throwable cau) {
super(message, cau);
}
}