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) 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM