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]

      

    在线交谈

  • 相关阅读:
    PAT 1010. 一元多项式求导 (25)
    PAT 1009. 说反话 (20) JAVA
    PAT 1009. 说反话 (20)
    PAT 1007. 素数对猜想 (20)
    POJ 2752 Seek the Name, Seek the Fame KMP
    POJ 2406 Power Strings KMP
    ZOJ3811 Untrusted Patrol
    Codeforces Round #265 (Div. 2) 题解
    Topcoder SRM632 DIV2 解题报告
    Topcoder SRM631 DIV2 解题报告
  • 原文地址:https://www.cnblogs.com/dennisit/p/2837936.html
Copyright © 2011-2022 走看看