截取视频第一帧——使用ffmpeg

来源:互联网 发布:淘宝卖家给买家差评 编辑:程序博客网 时间:2024/06/03 21:33

1. 环境准备(以Linux环境为例)

1.1 下载:

       wget http://ffmpeg.org/releases/ffmpeg-2.8.1.tar.bz2

1.2 解压:tar xvfj ffmpeg-2.8.1.tar.bz2

1.3 配置:

      #cd ffmpeg-2.8.1

      #./configure --prefix=/usr/local/ffmpeg --enable-shared

      第二条命令解释:--prefix指定ffmpeg的安装目录,--enabl-shared表示允许其编译产生动态链接库

      此命令输出的最后一行如果是“config.h is unchanged”,表示配置并未成功,原因可以参加下一条命令的输出。

1.4 编译并安装

      #make

      #make install

     此步的第一步可能会报错“grab.c:26:28: fatal error: linux/videodev.h: No such file or directory”。

     ls /usr/include/linux可以发现确实不存在该文件,而ffmpeg-2.8.1/libavformat/grab.c的第26行又引用了该文件。

    解决方案:

     #apt-get install libv4l-dev

     #ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h
    然后再重新重1.3步骤开始执行。

    步骤1.4执行成功后,会在/usr/local/ffmpeg下生产三个文件夹:lib,include和bin

1.5 设置环境变量

     1.5.1 在/etc/profile末尾加上如下两行:

       export FFMPEG_HOME=/usr/local/ffmpeg
       export PATH=$FFMPEG_HOME/bin:$PATH

     1.5.2 是上述修改生效

        #source /etc/profile

1.6 尝试执行ffmpeg命令

      1.6.1 如果出现如下错误

ffmpeg: error while loading shared libraries: libavformat.so: cannot open shared object file: No such file or directory
ffmpeg: error while loading shared libraries: libavdevice.so.52

则修改/etc/ld.so.conf文件,在最后一行加上“/usr/local/ffmpeg/lib”,
并执行ldconfig -v使修改有效,
然后赋予权限:chmod 777 /usr/local/ffmpeg/lib/*

      1.6.2 如果出现的是命令的参数说明,则表示ffmpeg安装及配置成功

2. 程序集成

<span style="font-family: Arial, Helvetica, sans-serif;">public static void get1stImgOfVideo(String video, String firstImg) throws IOException, InterruptedException</span>
    {        ProcessBuilder processBuilder = new ProcessBuilder("ffmpeg","-ss","00:00:00","-t","00:00:01","-i",video,"-an","-f","image2","-s","218*318",firstImg);        Process process = processBuilder.start();//异步进程        InputStream stderr = process.getErrorStream();        InputStreamReader isr = new InputStreamReader(stderr);        BufferedReader br = new BufferedReader(isr);        String line = null;        while ((line = br.readLine()) != null)        {}                if(br != null)        {            br.close();        }        if(isr != null)        {            isr.close();        }    }
      上述代码中,参数video为视频路径,firstImg为第一帧图片的保存路径。
      注意,ffmpeg默认只支持生成jpg格式的图片,所以firstImg参数的后缀请指定成jpg,否则图片可能生成不了。

3. 参考

更多请参考:
http://blog.chinaunix.net/uid-16974460-id-295979.html

http://blog.sina.com.cn/s/blog_6eea02c50101629j.html

http://www.cnblogs.com/dwdxdy/p/3240167.html

0 0
原创粉丝点击