java使用ffmpeg实现上传视频的转码提取视频的截图等功能(代码操作)

ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。ffmpeg能解析的格式和不能解析的格式都一一给大家说明了,具体内容详情跟随一起看看吧,

1.能支持的格式

ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)

2.不能支持的格式

对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.

实例是将上传视频转码为flv格式,该格式ffmpeg支持,所以我们实例中需要ffmpeg视频处理工具.

使用ffmpeg工具进行转码前应该做的准备工作:

1.下载ffmpeg,下载路径:

首先打开网址:http://ffmpeg.org/download.html#build-windows,然后点击 windows 对应的图标,再点击”Windows Build”,进入下图2所示的界面。

图1:

图2:

2)安装

进入解压后文件的bin目录下,可以看到相应的.exe文件。将bin目录添加到环境变量path中,注意以分号结尾。
验证是否安装成功:
运行cmd命令,在控制台输入命令:ffmpeg -version,结果如下所示:

安装成功!

安装成功之后,就可以在代码里引用了:

视频转码和视频截图代码如下:

public class VideoConvert {

 /**
  * 视频转码
  * @param ffmpegPath 转码工具的存放路径
  * @param upFilePath 用于指定要转换格式的文件,要截图的视频源文件
  * @param codcFilePath 格式转换后的的文件保存路径
  * @param mediaPicPath 截图保存路径
  * @return
  * @throws Exception
  */
 public static boolean executeCodecs(String ffmpegPath, String upFilePath, String codcFilePath,String mediaPicPath) throws Exception {
  // 创建一个List集合来保存转换视频文件为flv格式的命令
  List<String> convert = new ArrayList<String>();
  convert.add(ffmpegPath); // 添加转换工具路径
  convert.add("-i"); // 添加参数"-i",该参数指定要转换的文件
  convert.add(upFilePath); // 添加要转换格式的视频文件的路径
  convert.add("-qscale");  //指定转换的质量
  convert.add("6");
  convert.add("-ab");  //设置音频码率
  convert.add("64");
  convert.add("-ac");  //设置声道数
  convert.add("2");
  convert.add("-ar");  //设置声音的采样频率
  convert.add("22050");
  convert.add("-r");  //设置帧频
  convert.add("24");
  convert.add("-y"); // 添加参数"-y",该参数指定将覆盖已存在的文件
  convert.add(codcFilePath);

  // 创建一个List集合来保存从视频中截取图片的命令
  List<String> cutpic = new ArrayList<String>();
  cutpic.add(ffmpegPath);
  cutpic.add("-i");
  cutpic.add(upFilePath); // 同上(指定的文件即可以是转换为flv格式之前的文件,也可以是转换的flv文件)
  cutpic.add("-y");
  cutpic.add("-f");
  cutpic.add("image2");
  cutpic.add("-ss"); // 添加参数"-ss",该参数指定截取的起始时间
  cutpic.add("1"); // 添加起始时间为第1秒
  cutpic.add("-t"); // 添加参数"-t",该参数指定持续时间
  cutpic.add("0.001"); // 添加持续时间为1毫秒
  cutpic.add("-s"); // 添加参数"-s",该参数指定截取的图片大小
  cutpic.add("350*240"); // 添加截取的图片大小为350*240
  cutpic.add(mediaPicPath); // 添加截取的图片的保存路径

  boolean mark = true;
  ProcessBuilder builder = new ProcessBuilder();
  try {
   builder.command(convert);
   builder.redirectErrorStream(true);
   builder.start();

   builder.command(cutpic);
   builder.redirectErrorStream(true);
   // 如果此属性为 true,则任何由通过此对象的 start() 方法启动的后续子进程生成的错误输出都将与标准输出合并,
   //因此两者均可使用 Process.getInputStream() 方法读取。这使得关联错误消息和相应的输出变得更容易
   builder.start();
  } catch (Exception e) {
   mark = false;
   System.out.println(e);
   e.printStackTrace();
  }
  return mark;
 }
}

在需要进行视频转码和截图的位置调用该方法即可。

注意:

传给函数的fmpeg的路径必须写到bin/ffmpeg.exe才可以在函数中正常启动ffmpeg工具。

传给函数的原视频文件路径、转码后的视频文件路径以及视频截图的文件路径都必须写到文件名。

如果只需要视频转码或者视频截图,可以将在不同的函数中写,如下:

视频格式转换:

/**
  * 视频转码
  * @param ffmpegPath 转码工具的存放路径
  * @param upFilePath 用于指定要转换格式的文件,要截图的视频源文件
  * @param codcFilePath 格式转换后的的文件保存路径
  * @return
  * @throws Exception
  */
 public static boolean executeCodecs(String ffmpegPath, String upFilePath, String codcFilePath) throws Exception {
  // 创建一个List集合来保存转换视频文件为flv格式的命令
  List<String> convert = new ArrayList<String>();
  convert.add(ffmpegPath); // 添加转换工具路径
  convert.add("-i"); // 添加参数"-i",该参数指定要转换的文件
  convert.add(upFilePath); // 添加要转换格式的视频文件的路径
  convert.add("-qscale");  //指定转换的质量
  convert.add("6");
  convert.add("-ab");  //设置音频码率
  convert.add("64");
  convert.add("-ac");  //设置声道数
  convert.add("2");
  convert.add("-ar");  //设置声音的采样频率
  convert.add("22050");
  convert.add("-r");  //设置帧频
  convert.add("24");
  convert.add("-y"); // 添加参数"-y",该参数指定将覆盖已存在的文件
  convert.add(codcFilePath);
  boolean mark = true;
  ProcessBuilder builder = new ProcessBuilder();
  try {
   builder.command(convert);
   builder.redirectErrorStream(true);
   builder.start();
  } catch (Exception e) {
   mark = false;
   e.printStackTrace();
  }
  return mark;
 }

视频截图:

 /**
  *
  * @param ffmpegPath 转码工具的存放路径
  * @param upFilePath 要截图的视频源文件
  * @param mediaPicPath 添加截取的图片的保存路径
  * @param width   截图的宽
  * @param height  截图的高
  * @return
  */
 public static boolean screenImage(String ffmpegPath, String upFilePath, String mediaPicPath, String width, String height) {
  // 创建一个List集合来保存从视频中截取图片的命令
  List<String> cutpic = new ArrayList<String>();
  cutpic.add(ffmpegPath);
  cutpic.add("-i");
  cutpic.add(upFilePath); // 要截图的视频源文件
  cutpic.add("-y");
  cutpic.add("-f");
  cutpic.add("image2");
  cutpic.add("-ss"); // 添加参数"-ss",该参数指定截取的起始时间
  cutpic.add("1"); // 添加起始时间为第17秒
  cutpic.add("-t"); // 添加参数"-t",该参数指定持续时间
  cutpic.add("0.001"); // 添加持续时间为1毫秒
  cutpic.add("-s"); // 添加参数"-s",该参数指定截取的图片大小
  cutpic.add(width + "*" + height); // 添加截取的图片大小为350*240
  cutpic.add(mediaPicPath); // 添加截取的图片的保存路径
  ProcessBuilder builder = new ProcessBuilder();
  try {
   builder.command(cutpic);
   builder.redirectErrorStream(true);
   builder.start();
  } catch (Exception e) {
   e.printStackTrace();
   return false;
  }
  return true;
 }
 

总结

到此这篇关于java使用ffmpeg实现上传视频的转码提取视频的截图等功能(代码操作)的文章就介绍到这了,更多相关java ffmpeg实现上传视频的转码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java使用FFmpeg处理视频文件的方法教程

    前言 本文主要讲述如何使用Java + FFmpeg实现对视频文件的信息提取.码率压缩.分辨率转换等功能: 之前在网上浏览了一大圈Java使用FFmpeg处理音视频的文章,大多都讲的比较简单,楼主在实操过程中踩了很多坑也填了很多坑,希望这份详细的踩坑&填坑指南能帮助到大家: 1. 什么是FFmpeg 点我了解 2. 开发前准备 在使用Java调用FFmpeg处理音视频之前,需要先安装FFmpeg,安装方法分为两种: 引入封装了FFmpeg的开源框架 在系统中手动安装FFmpeg 2.1 引入封装

  • Java使用ffmpeg和mencoder实现视频转码

    本文为大家分享了Java使用ffmpeg和mencoder实现视频转码的具体代码,供大家参考,具体内容如下 准备: 需要下载ffmpeg和mencoder,百度一搜就有了,请自行下载. 不墨迹,上代码: 1)首先需要定义几个量:Contants.java public class Contants { public static final String ffmpegpath = "D:\\DevTools\\ffmpeg\\bin\\ffmpeg.exe";//ffmpeg的安装位置

  • Javacv使用ffmpeg实现音视频同步播放

    最近用javaCV的ffmpeg包的FFmpegFrameGrabber帧捕捉器对捕捉到的音频帧和视频帧做了同步的播放.采用的同步方法是视频向音频同步. 程序和源码 具体的思路如下: (1)首先介绍ffmpeg是如何捕捉视频文件的图像和声音的 FFmpegFrameGrabber fg = new FFmpegFrameGrabber("a video file path or a url); 得到帧捕捉器对象后,调用它的grab()方法就会返回捕捉到的Frame对象.这个Frame可以是视频帧

  • 使用Java和ffmpeg把音频和视频合成视频的操作方法

    FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的. FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.它包括了目前领先的音/视频编码库libavcodec. FFmpeg是在Linux下开发出来的,但它可以在包

  • Java实现对视频进行截图的方法【附ffmpeg下载】

    本文实例讲述了Java实现对视频进行截图的方法.分享给大家供大家参考,具体如下: 之前介绍过Java使用ffmpeg进行视频转换,这里演示一下ffmpeg进行视频截图的方法. 具体代码如下: import java.io.File; import java.util.List; //生成视频文件的首帧为图片 //windows下的版本 public class CreatePh { // public static final String FFMPEG_PATH = "E:/ffmpeg/ff

  • Java通过调用FFMPEG获取视频时长

    FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的. 由此看来FFmpeg很强大,很多主流的音频.视频处理软件都使用了FFmpeg. FFmpeg下载下来解压,cmd进入到FFmpeg.exe目录中,即可在命令行下进行各种操作,查看视频信息命令:f

  • java使用ffmpeg处理视频的方法

    FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案. 官网链接http://ffmpeg.org/ 1.下载并解压windows版本安装包 2.windows本地使用命令行测试 1.修改格式测试(转码) 将需要修改的视频A.avi 提前放在bin目录下 在bin目录下cmd进入命令行 输入命令完成转码成B.mp4 ffmpeg.exe -i A.avi -y B.mp4 2.视频音频结合

  • java使用ffmpeg实现上传视频的转码提取视频的截图等功能(代码操作)

    ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用.ffmpeg能解析的格式和不能解析的格式都一一给大家说明了,具体内容详情跟随一起看看吧, 1.能支持的格式 ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 2.不能支持的格式 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(menco

  • Java实现的图片上传工具类完整实例

    本文实例讲述了Java实现的图片上传工具类.分享给大家供大家参考,具体如下: package com.gcloud.common; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; /** * 图片上传工具类 * Created by charlin on 2017/9/10. */ public class UploadImageUtil { private String f

  • Java中实现文件上传下载的三种解决方案(推荐)

    java文件上传与文件下载是程序开发中比较常见的功能,下面通过本文给大家介绍Java中实现文件上传下载的三种解决方案,具体详情如下所示: 第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null; String fileAddre="/numUp"; try { InputStream stream = file.getInputStream(

  • Java FtpClient 实现文件上传服务

    一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /bin/bash uftp 3.设置用户密码 sudo useradd -d /home/uftp -s /bin/bash uftp 4.创建用户目录 sudo mkdir /home/uftp 5.设置用户密码 sudo passwd uftp 6.设置/etc/vsftpd.conf配置文件 s

  • java实现FTP文件上传与文件下载

    本文实例为大家分享了两种java实现FTP文件上传下载的方式,供大家参考,具体内容如下 第一种方式: package com.cloudpower.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import sun.net.TelnetInputStream; import sun.net.TelnetO

  • Java 发送http请求上传文件功能实例

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package wxapi.WxHelper; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputSt

  • java实现将文件上传到ftp服务器的方法

    本文实例讲述了java实现将文件上传到ftp服务器的方法.分享给大家供大家参考,具体如下: 工具类: package com.fz.common.util; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; imp

  • JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法

    废话不多说了,直接给大家贴代码了,具体代码如下所示: // 上传目标触发点 <input type="file" class="upvideo" name="upvideo" id="fileupload1" /> // 引入插件 <script type="text/javascript" src="{$IMG}/bstage/js/jquery.form.js" l

  • java后台接收app上传的图片的示例代码

    整理文档,搜刮出一个java后台接受app上传的图片的示例代码,稍微整理精简一下做下分享 package com.sujinabo.file; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; import javax.servlet.S

  • Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题

    废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String username,String password,String path,String filename,InputStream input) { boolean success=false; FTPClient ftp=new FTPClient();//org.apache.commons.net.ftp

随机推荐