zoukankan      html  css  js  c++  java
  • windows下使用ffmpeg进行视频转码,图片拉取的Java测试代码

     

    什么是FFmpeg

    FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。

     

    FFmpeg的功能

    多媒体视频处理工具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能解析的)格式.

     

    Windows下测试ffmpeg实例代码与教程

    1.下载windows下的ffmpeg工具,解压,笔者解压到D盘,路径[D:\ffmpeg.exe]

     

    2.因为实例是通过调用批处理文件来进行windows下转码的,这样测试比较简单,所以建立对应的bat文件,

     

    3.分别进行图片拉取和视频转码

    编写视频图片拉取的批处理文件ffmpegPic.bat,文件存放目录[D:\ffmpegPic.bat]

    内容如下:

     

    start
    
    D:\ffmpeg.exe -i %1 -ss 15 -vframes 1 -r 1 -ac 1 -ab 2 -s 160*120 -f  image2 %2 
    
    exit

     

    参数说明

    D:/ffmpeg.exe 是ffmpeg应用程序的存放路径

    %1  %2 和C语言有点相似是为传参数保留位置

    15 为要截取多少秒后的图片

    160*120 是截图后的图片大小为宽160高120

     

    编写视频转码的批处理文件ffmpegVod.bat,文件存放目录[D:\ffmpegVod.bat]

    内容如下:

    start
    
    D:\ffmpeg.exe -i %1 -ar 22050 -ab 56 -f flv -y %2
    
    exit

    参数说明

    22050 是音频采样率

    56 是音频码率

    -f 是强制使用某种格式

    flv是转码后的视频格式

    -y 覆盖输出文件,即如果文件已经存在的话,不经提示就覆盖掉了

     

    Ffmpeg参数说明 http://www.cnblogs.com/dennisit/archive/2012/12/29/2838297.html

     

    然后运行下面的代码,即可分别实现视频图片拉取和转码的功能.

     1 package org.dennisit.ffmpegutil;
     2 
     3 /**
     4  *
     5  *  @version : 1.1
     6  *  
     7  *  @author  : 苏若年    <a href="mailto:DennisIT@163.com">发送邮件</a>
     8  *    
     9  *  @since      : 1.0        创建时间:    2012-12-28        下午08:02:21
    10  *     
    11  *  @function: TODO
    12  *
    13  */
    14 
    15 public class FfmpegTranscoding {
    16     
    17     public static void main(String[] args) {
    18         
    19         String videoPath = "D:/ffmpegvod/Wildlife.wmv";          //待处理的源视频文件(输入路径)
    20         String imageDistPath = "D:/ffmpegdemo/demo5.jpg";         //转码后的视频文件(输出路径)
    21         String videoDistPath = "D:/ffmpegdemo/dem5.flv";         //截图的路径(输出路径) 
    22         
    23         //ffmpegdemo文件夹必须物理存在
    24         
    25         System.out.println("开始进行视频转码...");
    26         try {
    27             getVodTranscode(videoPath, videoDistPath);
    28         } catch (Exception e) {
    29             e.printStackTrace();
    30         }
    31         System.out.println("视频转码结束");
    32         
    33         
    34         System.out.println("开始进行图片拉取...");
    35         try {
    36             getVodScreenshot(videoPath, imageDistPath);
    37         } catch (Exception e) {
    38             e.printStackTrace();
    39         }
    40         System.out.println("图片截图结束");
    41         
    42         
    43     }
    44     
    45     /**
    46      * 通过ffmpeg进行视频截图
    47      * 
    48      * @param input
    49      *                 视频文件地址
    50      * @param output
    51      *                 截图的视频文件地址
    52      * @throws Exception
    53      */
    54     public static void getVodScreenshot(String input,String output)throws Exception{
    55         try {
    56             Runtime.getRuntime().exec("cmd /c start D:/ffmpegPic.bat " + input + " " + output);
    57         } catch (Exception e) {
    58             throw new RuntimeException("图片拉取出现异常");
    59         }
    60     }
    61     
    62     
    63     /**
    64      * 通过ffmpeg进行视频转码
    65      * 
    66      * @param input
    67      *                 视频文件地址
    68      * @param output
    69      *                 输出文件地址
    70      * @throws Exception
    71      */
    72     public static void getVodTranscode(String input, String output) throws Exception{
    73         try {
    74             Runtime.getRuntime().exec("cmd /c start D:/ffmpegVod.bat " + input + " " + output);
    75         } catch (Exception e) {
    76             throw new RuntimeException("转码出现异常");
    77         }
    78     }
    79 
    80 }

    欲行后,会在ffmpeg目录下看到对应的转码后视频和拉取的图片.

    Ffmpeg官网: http://ffmpeg.org/index.html

    转载请注明出处[http://www.cnblogs.com/dennisit/archive/2012/12/28/2837936.html]

      

    在线交谈

  • 相关阅读:
    JS调用App方法及App调用JS方法
    提升用户体验之 选用合适的鼠标光标
    js仿QQ拖拽删除
    Linux下安装 mongodb
    QQ分享-定制分享卡片
    js判断浏览器语言实现网站国际化
    js复制内容到剪切板
    为什么会有堆内存和栈内存之分
    Avro实现RPC
    zookeeper学习day01
  • 原文地址:https://www.cnblogs.com/dennisit/p/2837936.html
Copyright © 2011-2022 走看看