ffmpeg学习

代码地址:https://gitee.com/panmingshuai/ffmpeg-demo.gitjava

代码荡下来后,resource目录下有一个ffmpeg.zip的压缩包,解压放到E:\ffmpeg下:git

而后咱们利用java调用ffmpeg的命令执行视频的相关操做:ui

将视频转为flv格式编码

public static void processFLV() throws IOException {
		List<String> commend = new ArrayList<String>();
		commend.add("E:\\ffmpeg\\ffmpeg"); // ffmpeg文件的位置
		commend.add("-i");
		commend.add("E:\\qwe.mp4");
		commend.add("-ab");
		commend.add("56");
		commend.add("-ar");
		commend.add("22050");
		commend.add("-qscale");
		commend.add("8");
		commend.add("-r");
		commend.add("15");
		commend.add("-s");
		commend.add("600x500");
		commend.add("E:\\qwenew.flv");

		ProcessBuilder builder = new ProcessBuilder();
		builder.command(commend);
		builder.start();
	}

这里的-i表示须要操做的文件的路径,命令最后的路径表示处理好的文件存放的路径和文件名,记得写上.flv。code

指定格式的转换视频

// 指定格式转换 可是这里没有设置其余参数,因此生成的文件以ffmpeg内置的生成
	// MP4转avi c:\ffmpeg\ffmpeg -i c:\ffmpeg\input\c.mp4 -f avi
	// c:\ffmpeg\output\a.avi
	public static void process() throws IOException {
		List<String> commend = new ArrayList<String>();
		commend.add("E:\\ffmpeg\\ffmpeg"); // ffmpeg文件的位置
		commend.add("-i"); // 指定要处理的文件
		commend.add("E:\\qwe.mp4");
		commend.add("-f"); // 指定转换格式
		commend.add("avi");
		commend.add("E:\\qwe2.avi"); // 最后指定文件输出的路径

		ProcessBuilder builder = new ProcessBuilder();
		builder.command(commend);
		builder.start();
	}

这里的-f表示指定什么格式进行强制转换,这里选了人见人爱的avi格式。ip

视频截图:ci

// 截图
	// ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg
	public static void cutScreen() throws IOException {
		List<String> commend = new ArrayList<String>();
		commend.add("E:\\ffmpeg\\ffmpeg"); // ffmpeg文件的位置
		commend.add("-i");
		commend.add("E:\\qwe.mp4");
		commend.add("-y");// 输出覆盖路径,即若是已存在下面指定路径的文件,则覆盖掉
		commend.add("-f");
		commend.add("image2");
		commend.add("-ss"); // 指定在哪截图
		commend.add("5");
		commend.add("-t"); // 指定要记录的时间,由于是截图因此是0.001s
		commend.add("0.001");
		commend.add("-s");
		commend.add("1920x1080");
		commend.add("E:\\qwe3.jpg");

		ProcessBuilder builder = new ProcessBuilder();
		builder.command(commend);
		builder.start();
	}

这里的-ss表示在视频的哪里截图,他的单位是秒,即也能够用HH:mm:ss的形式。还有一种按多少帧截图的,可是感受不实用,通常人都是说在多少时间截图,没听过谁要求在多少帧截图的。-t表示视频截得时间持续多久,单位也是秒,由于是截图因此设定为0.001秒。-s表示截图的长宽多少。get

截取视频段:input

// 截取视频
	public static void cutVedio() throws IOException {
		List<String> commend = new ArrayList<String>();
		commend.add("E:\\ffmpeg\\ffmpeg"); // ffmpeg文件的位置
		commend.add("-i");
		commend.add("E:\\qwe.mp4");
		commend.add("-vcodec");//视频使用原来同样的视频编解码器。
		commend.add("copy");
		commend.add("-acodec");//音频使用原来同样的音频编解码器。
		commend.add("copy");
		commend.add("-ss");
		commend.add("00:00:25");
		commend.add("-t");
		commend.add("10");
		commend.add("E:\\qwe563.mp4");
		commend.add("-y");

		ProcessBuilder builder = new ProcessBuilder();
		builder.command(commend);
		builder.start();
	}

这段出现的都是以前介绍过的,就很少说了

下面列出一些经常使用的ffmpeg的命令,能够像上面同样调用

-L license

-h 帮助

-fromats 显示可用的格式,编解码的,协议的。。。

-f fmt 强迫采用格式fmt

-I filename 输入文件

-y 覆盖输出文件

-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持

-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持

-title string 设置标题

-author string 设置做者

-copyright string 设置版权

-comment string 设置评论

-target type 设置目标文件类型(vcd,svcd,dvd) 

视频选项:

-b bitrate 设置比特率,缺省200kb/s

-r fps 设置帧频 缺省25

-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也能够直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576

-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777

-vn 不作视频记录

-bt tolerance 设置视频码率容忍度kbit/s

-vcodec codec 强制使用codec编解码方式。若是用copy表示原始编解码数据必须被拷贝。

-pass n 选择处理遍数(1或者2)。两遍编码很是有用。第一遍生成统计信息,第二遍生成精确的请求的码率

音频选项:

-ac channels 设置通道 缺省为1

-an 不使能音频纪录

-acodec codec 使用codec编解码

相关文章
相关标签/搜索