java使用ffmpeg处理视频的方法

 更新时间:2020年03月01日 13:37:40   作者:XlikeQ  
这篇文章主要介绍了java使用ffmpeg处理视频的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。

官网链接http://ffmpeg.org/    

1.下载并解压windows版本安装包

2.windows本地使用命令行测试

1.修改格式测试(转码)

  1. 将需要修改的视频A.avi 提前放在bin目录下
  2. 在bin目录下cmd进入命令行
  3. 输入命令完成转码成B.mp4

ffmpeg.exe -i A.avi -y B.mp4

2.视频音频结合测试

  1. 将需要修改的视频A.avi和bgm.mp3 提前放在bin目录下
  2. 在bin目录下cmd进入命令行
  3. 输入命令完成合并成8秒的new.avi

 ffmpeg.exe -i A.avi -i bgm.mp3 -t 8 -y new.avi

3.java中建立工具测试类

package com.xc.utils;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class FFMpegTest {
	private String ffmpegEXE;
	
	public FFMpegTest(String ffmpegEXE) {
		super();
		this.ffmpegEXE = ffmpegEXE;
	}
	
	public void convertor(String videoInputPath, String videoOutputPath) throws Exception {
//		ffmpeg -i input.mp4 -y output.avi
		List<String> command = new ArrayList<>();
		command.add(ffmpegEXE);
		
		command.add("-i");
		command.add(videoInputPath);
		command.add("-y");
		command.add(videoOutputPath);
		
		for (String c : command) {
			System.out.print(c + " ");
		}
		
		ProcessBuilder builder = new ProcessBuilder(command);
		Process process = builder.start();
		
		InputStream errorStream = process.getErrorStream();
		InputStreamReader inputStreamReader = new InputStreamReader(errorStream);
		BufferedReader br = new BufferedReader(inputStreamReader);
		
		String line = "";
		while ( (line = br.readLine()) != null ) {
		}
		
		if (br != null) {
			br.close();
		}
		if (inputStreamReader != null) {
			inputStreamReader.close();
		}
		if (errorStream != null) {
			errorStream.close();
		}
		
	}
	public static void main(String[] args) {
		FFMpegTest ffmpeg = new FFMpegTest("C:\\ffmpeg\\bin\\ffmpeg.exe");
		try {
			ffmpeg.convertor("C:\\a.mp4", "C:\\b.avi");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
package com.xc.utils;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class MergeVideoMp3 {
	private String ffmpegEXE;
	
	public MergeVideoMp3(String ffmpegEXE) {
		super();
		this.ffmpegEXE = ffmpegEXE;
	}
	
	public void convertor(String videoInputPath, String mp3InputPath,
			double seconds, String videoOutputPath) throws Exception {
//		ffmpeg.exe -i A.avi -i bgm.mp3 -t 7 -y new.avi
		List<String> command = new ArrayList<>();
		command.add(ffmpegEXE);
		
		command.add("-i");
		command.add(videoInputPath);
		
		command.add("-i");
		command.add(mp3InputPath);
		
		command.add("-t");
		command.add(String.valueOf(seconds));
		
		command.add("-y");
		command.add(videoOutputPath);
		
//		for (String c : command) {
//			System.out.print(c + " ");
//		}
		
		ProcessBuilder builder = new ProcessBuilder(command);
		Process process = builder.start();
		
		InputStream errorStream = process.getErrorStream();
		InputStreamReader inputStreamReader = new InputStreamReader(errorStream);
		BufferedReader br = new BufferedReader(inputStreamReader);
		
		String line = "";
		while ( (line = br.readLine()) != null ) {
		}
		
		if (br != null) {
			br.close();
		}
		if (inputStreamReader != null) {
			inputStreamReader.close();
		}
		if (errorStream != null) {
			errorStream.close();
		}
		
	}
	public static void main(String[] args) {
		MergeVideoMp3 ffmpeg = new MergeVideoMp3("C:\\ffmpeg\\bin\\ffmpeg.exe");
		try {
			ffmpeg.convertor("C:\\a.avi", "C:\\bgm.mp3", 7.1, "C:\\javaNew.mp4");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 总结

到此这篇关于java使用ffmpeg处理视频的方法的文章就介绍到这了,更多相关java ffmpeg处理视频内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java编程多线程并发处理实例解析

    java编程多线程并发处理实例解析

    这篇文章主要介绍了java编程多线程并发处理实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • mybatis新增save结束后自动返回主键id详解

    mybatis新增save结束后自动返回主键id详解

    这篇文章主要介绍了mybatis新增save结束后自动返回主键id详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 快速排序的原理及java代码实现

    快速排序的原理及java代码实现

    网上关于快速排序的算法原理和算法实现都比较多,不过java是实现并不多,而且部分实现很难理解,和思路有点不搭调。所以整理了这篇文章。如果有不妥之处还请建议。
    2016-02-02
  • Struts2修改上传文件大小限制方法解析

    Struts2修改上传文件大小限制方法解析

    这篇文章主要介绍了Struts2修改上传文件大小限制的相关内容,包括决定Struts2上传文件大小的因素,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • 使用JMX监控Zookeeper状态Java API

    使用JMX监控Zookeeper状态Java API

    今天小编就为大家分享一篇关于使用JMX监控Zookeeper状态Java API,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Java中PrintWriter使用方法介绍

    Java中PrintWriter使用方法介绍

    这篇文章主要介绍了Java中PrintWriter使用方法介绍,文章围绕主题展开PrintWriter使用方法的详细介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06
  • Java Assert.assertEquals案例详解

    Java Assert.assertEquals案例详解

    这篇文章主要介绍了Java Assert.assertEquals案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java使用POI导出Excel(二):多个sheet

    Java使用POI导出Excel(二):多个sheet

    这篇文章介绍了Java使用POI导出Excel的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • Java流式操作之Collectors工具类操作指南

    Java流式操作之Collectors工具类操作指南

    Collectors是Collector的工具类,类中提供了很多流收集、归约、分组、分区等方法,方便我们直接使用,下面这篇文章主要给大家介绍了关于Java流式操作之Collectors工具类操作的相关资料,需要的朋友可以参考下
    2023-05-05
  • Java测试题 实现一个注册功能过程解析

    Java测试题 实现一个注册功能过程解析

    这篇文章主要介绍了Java测试题 实现一个注册功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论