视频采集、截图多媒体处理工具FFmpeg

2012年01月13日    点击数: 20361    字体:           一键关注汇讯

  多媒体处理工具

  FFmpeg

  多媒体视频处理工具fmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水引等FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。

  视频采集功能:

  FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。这个项目是由Fabrice Bellard发起的,现在由Michael Niedermayer主持。

  ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

  ffmpeg在Linux下的视频采集

  在Linux平台上,ffmpeg对V4L2的视频设备提高了很好的支持,如:

  ./ffmpeg -t 10 -f video4linux2 -s 176*144 -r 8 -i /dev/video0 -vcodec h263 -f rtp rtp://192.168.1.105:5060 > /tmp/ffmpeg.sdp

  以上命令表示:采集10秒钟视频,对video4linux2视频设备进行采集,采集QCIF(176*144)的视频,每秒8帧,视频设备为/dev/video0,视频编码为h263,输出格式为RTP,后面定义了IP地址及端口,将该码流所对应的SDP文件重定向到/tmp/ffmpeg.sdp中,将此SDP文件上传到流媒体服务器就可以实现直播了。

  ffmpeg在windows下的视频采集

  在windows下关于ffmpeg视频采集的资料非常少,但是ffmpeg还是支持windows下视频采集的。ffmpeg支持windows下video for windows(VFW)设备的视频采集,不过VFW设备已经过时,正在被WDM的视频设备所取代,但是ffmpeg还没有支持WDM的计划,不过好像有将WDM转为VFW的工具,因此ffmpeg还是可以在windows下进行视频采集的。

  视频格式转换功能:

  ffmpeg视频转换功能。视频格式转换,比如可以将多种视频格式转换为flv格式,可不是视频信号转换 ,,

  ffmpeg可以轻易地实现多种视频格式之间的相互转换(wma,rm,avi,mod等),例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式。

  视频截图功能:

  对于选定的视频,截取指定时间的缩略图。视频抓图,获取静态图和动态图,不提倡抓gif文件;因为抓出的gif文件大而播放不流畅

  给视频加水引功能:使用ffmpeg 视频添加水印(logo)。

-----------------------------------------------------------------------------------------------------------------------

视频转码:

    List commend = newjava.util.ArrayList();

    commend.add(ffmpeg硬盘路径);

    commend.add("-i");

    commend.add(转码文件硬盘路径);

    commend.add("-y");

    commend.add("-ar");

    commend.add("22050");

    commend.add("-s");

    commend.add("480*360");

    commend.add("-b");

    commend.add("1000");

    commend.add("-qscale");

    commend.add("4");

    commend.add(输入文件路径);

    try{

        ProcessBuilder builder = newProcessBuilder();

        builder.command(commend);

        builder.redirectErrorStream(true);

        System.out.println("视频转码开始...");

        // builder.start();

        Process process = builder.start();

        InputStream in = process.getInputStream();

        byte[] re = newbyte[1024];

        System.out.print("正在进行转码,请稍候");

        while(in.read(re) != -1) {

        System.out.print(".");

        }

        System.out.println("");

        in.close();

        System.out.println("视频转码完成...");

    } catch(Exception e) {

        e.printStackTrace();

        System.out.println("视频转码失败!");

    }

-----------------------------------------------------------------------------------------------------------------------

视频截图:

    List commend = newjava.util.ArrayList();

    commend.add(ffmpeg文件硬盘路径);

    commend.add("-i");

    commend.add(待截图文件硬盘路径);

    commend.add("-y");

    commend.add("-f");

    commend.add("image2");

    commend.add("-ss");

    commend.add("8");

    commend.add("-t");

    commend.add("0.001");

    commend.add("-s");

    commend.add("350*240");

    commend.add(截图的图片保存路径);

    try{

        ProcessBuilder builder = newProcessBuilder();

        builder.command(commend);

        builder.redirectErrorStream(true);

        System.out.println("视频截图开始...");

        // builder.start();

        Process process = builder.start();

        InputStream in = process.getInputStream();

        byte[] re = newbyte[1024];

        System.out.print("正在进行截图,请稍候");

        while(in.read(re) != -1) {

        System.out.print(".");

        }

        System.out.println("");

        in.close();

        System.out.println("视频截图完成...");

    } catch(Exception e) {

        e.printStackTrace();

        System.out.println("视频截图失败!");

    }

  FFMpeg参数说明:

  1. 常用通用选项

  -i fileName : 输入文件-y : 覆盖输出文件-t 持续时间(秒) : 录制多久-ss 指定时间(秒) : 开始录制点-f 格式: 强迫采用格式(iamge2:jpg;gif:gif)

  2. 常用视频选项

  -b 比特率: 默认为200(kb/s)-r 帧频: 默认为25-s 帧大小: 宽x高(默认160x128)-aspect 设置横纵比: 4:3-vn : 不做视频记录

  3. 常用音频选项

  -ab 音频码率-ar 音频采样率-an 不使用音频记录

  windows下用ffmpeg.exe下载路径http://ffmpeg.zeranoe.com/builds/ 自己选择32位或64位 

 

 

上一篇:视频技术

下一篇:云计算来势汹汹 视频会议服务加速个性化发展

Copyright © 2007-2021 汇讯Wiseuc. 粤ICP备10013541号    
展开