zoukankan      html  css  js  c++  java
  • ffmpeg实现视频转gif及gif缩放(ffmpeg4.2.2)

    一,为什么选择ffmpeg处理gif?

    1,ffmpeg可以从视频中截取gif

    2,ffmpeg在缩放gif时出错的机率较低,

    而imagemagick在缩放gif时容易出错

    我们在后面的例子中可以看到

    说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

             对应的源码可以访问这里获取: https://github.com/liuhongdi/

    说明:作者:刘宏缔 邮箱: 371125307@qq.com

    二,用ffmpeg实现视频转gif及gif转视频

    1,截取5秒长度生成gif

    #-ss 00:00:02: 从第二秒开始

    #-t 5:   持续5秒

    #-f gif: 指定文件格式为gif(因为输出文件名的后缀是gif,所以这个参数可以不添加)

    [root@blog 1]# ffmpeg -t 5 -ss 00:00:02  -f gif -i 8_9f6fa300bacded7b.mp4 /data/dev/think_file/html/8.gif

    2,生成指定宽高的gif

    #-v quiet:  不显示版本和处理过程等log信息

    #-s 320x180: 指定生成的gif图的宽高

    #-y : 文件存在时自动覆盖,不再询问

    [root@blog 1]# ffmpeg -v quiet -t 5 -ss 00:00:02 -i 8_9f6fa300bacded7b.mp4 -s 320x180 -y /data/dev/think_file/html/8_2.gif  

    3,生成gif时指定fps

    查看原视频的fps:

    [root@blog 1]# ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate 8_9f6fa300bacded7b.mp4
    30000/1001

    原视频的fps并不高,值为30

    # -r: 指定fps

    [root@blog 1]# ffmpeg -v quiet -t 5 -ss 00:00:02 -i 8_9f6fa300bacded7b.mp4 -f gif -r 15 -y /data/dev/think_file/html/8_3.gif

    查看文件大小:

    [root@blog 1]# ll /data/dev/think_file/html/8*
    -rw-r--r-- 1 root root 3849280 Apr 30 17:08 /data/dev/think_file/html/8_2.gif
    -rw-r--r-- 1 root root 2862304 Apr 30 17:39 /data/dev/think_file/html/8_3.gif

    说明:fps值缩小后,gif文件也变小了

    4,gif转mp4

    [root@blog html]# ffmpeg -i 8_2.gif 8_2.mp4

    三,缩放gif,并与ImageMagick处理gif比较

    1,

    查看原gif的宽高及大小:

    [root@blog img]$ file dog.gif
    dog.gif: GIF image data, version 89a, 250 x 250
    [root@blog img]$ ll -h dog.gif
    -rw-r--r-- 1 webop webop 880K May  2 10:59 dog.gif

    缩放gif的命令:

    [root@blog img]# ffmpeg -i dog.gif -s 120x120 dog_tmb.gif

    查看生成预览gif的宽高及大小

    [root@blog img]$ file dog_tmb.gif
    dog_tmb.gif: GIF image data, version 89a, 120 x 120
    [root@blog img]$ ll -h dog_tmb.gif
    -rw-r--r-- 1 root root 383K May  2 11:08 dog_tmb.gif

    2,我们不建议使用imagemagick处理gif,

       因为有可能会报文件损坏的错误

    以相同的文件为例:

    [root@blog img]$ identify dog.gif 
    ...
    identify: corrupt image `dog.gif' @ error/gif.c/PingGIFImage/965.

    如果报出此类错误,则convert时会出错:

    我们看一下使用convert:

    [root@blog img]$ convert -resize 120x120 dog.gif dog_tmb2.gif
    convert: corrupt image `dog.gif' @ error/gif.c/DecodeImage/513.
    convert: corrupt image `dog.gif' @ error/gif.c/ReadGIFImage/1389.
    convert: no images defined `dog_tmb2.gif' @ error/convert.c/ConvertImageCommand/3226.

    四,查看ffmpeg的版本

    [root@blog img]$ ffmpeg --version
    ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
      built with gcc 8 (GCC)

    五,查看centos的版本

    [root@blog img]$ cat /etc/redhat-release
    CentOS Linux release 8.0.1905 (Core) 
  • 相关阅读:
    三道趣味题目
    iOS开发中使用静态库 .a 文件
    java Graphics2D 画图
    堆和栈的区别
    iOS开发中KVC、KVO简介
    GPUImage的简单使用
    OC中 self.view.frame.size.height = 100; 不能通过编译的原因
    Xcode7 低版本iOS系统上下有黑边的问题
    c语言数组赋值
    ELF interpreter /libexec/ld-elf32.so.1 not found
  • 原文地址:https://www.cnblogs.com/architectforest/p/12817313.html
Copyright © 2011-2022 走看看