我正在尝试将.mov转换为.gif,但没有成功。

这里是错误:

ffmpeg -pix_fmt rgb24 -i yesbuddy.mov output.gif
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
  built on Jun 12 2012 17:47:34 with clang 2.1 (tags/Apple/clang-163.7.1)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/0.11.1 --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-libfreetype --cc=/usr/bin/clang --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libvo-aacenc --disable-ffplay
  libavutil      51. 54.100 / 51. 54.100
  libavcodec     54. 23.100 / 54. 23.100
  libavformat    54.  6.100 / 54.  6.100
  libavdevice    54.  0.100 / 54.  0.100
  libavfilter     2. 77.100 /  2. 77.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Option pixel_format not found.


如果我忽略了-pix_fmt rgb24部分,则会抱怨。有关如何解决的想法?

评论

仅供参考,此处提供了一种出色的高质量转换解决方案。

#1 楼

命令行参数的顺序很重要。此命令行应该可用,但会生成一个巨大的文件:

ffmpeg -i yesbuddy.mov -pix_fmt rgb24 output.gif


请注意,您可能希望在转换时降低帧速率和大小,并指定一个开始时间和持续时间。您可能不想以其原始分辨率和帧频转换整个文件。

ffmpeg -ss 00:00:00.000 -i yesbuddy.mov -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif


文件大小仍然很大。您也许可以使用ImageMagick的GIF优化器来减小尺寸:

convert -layers Optimize output.gif output_optimized.gif


评论


太棒了,谢谢:) GIF是一种疯狂的格式...原始.mov文件为250k,从ffmpeg转换后的.gif为8mb,而经过转换优化的版本则为惊人的10k!令人印象深刻!

– TooTallNate
13年1月22日在1:37

ffmpeg抱怨像素格式,并从rgb24切换到pal8;答案中的命令是否应该更新?

–user1071136
2014年3月17日20:39

编解码器'gif'的像素格式'rgb24'不兼容

–本·阿弗莱克
2014年7月18日在10:15

@Andy在我的ffmpeg版本中自动修复为rgb8。

–詹姆斯·坎贝尔
17年9月6日在22:46

在Android中怎么做?

–阿贾伊·什雷斯塔(Ajay Shrestha)
17年3月3日在23:18

#2 楼

转换后:

ffmpeg -i input.mp4 input.gif 


尝试优化帧:

convert input.gif -verbose -coalesce -layers OptimizeFrame input_optframe.gif


并使用gifsicle进行最终优化:

gifsicle -O2 input_optframe.gif -o optimized.gif


来自12.2mb视频的6.8mb GIF具有几乎相同的质量!

评论


介意解释这些步骤如何工作以及它们在做什么?

–雷斯塔法里安
2014年11月5日19:31

对我来说,质量太糟糕了。 superuser.com/a/1061409/376651取得了不错的成绩,但文件大小有所增加

–减少活动
19年12月1日在15:05

#3 楼

我制作了一个将FFmpeg,ImageMagick和giflossy捆绑到一个易于使用的命令行程序中的工具,可以将其安装在一行中:https://github.com/vvo/gifify

我推荐任何人愿意打开视频=>使用GIF,而不是花大量时间浏览3个文档网站来了解如何调整GIF大小或更改开始/结束时间。

评论


如果您的计算机上运行了Docker,则只需执行以下别名即可:alias gifify ='docker run -it --rm -v $ {pwd):/ data maxogden / gifify'然后将其用于gifify screencast.mkv -o screencast.gif-调整大小800:-1

–安全
18年5月28日在6:38



“如果您要维护该项目,请再给我ping一下,我不再使用该项目或对其提供任何支持”

–减少活动
19/12/1在14:29



仍然运行良好-只需运行docker run -it --rm -v $(pwd):/ data maxogden / gifify my.mov -o my.gif --speed 1.5 --resize 1000:-1 --colors 255-每秒6帧

–艾哈迈德·法西(Ahmed Fasih)
20-11-02在20:47



#4 楼

ffmpeg -y -i input.mp4 -f image2pipe -vcodec ppm - | convert -delay 2 -loop 0 -layers Optimize - gif:- | gifsicle -d 3 -O3 -o optimized.gif


首先使用ffmpeg通过管道将mp4文件转换为图像
,然后使用imagemagick将其压缩为gif
,最后用gifsicle优化它

我不知道为什么直接使用gifscicle无法使用。

或者您可以通过以下方式缩小gif

convert -dither none -matte -depth 8 -deconstruct -layers optimizePlus -colors 32 in.gif out.gif


#5 楼

ffmpeg -i <input source> -filter_complex "[0:v] fps=12,scale=<width>:-1,split [a][b];[a] palettegen [p];[b][p] paletteuse" <output file>


在此命令中,您需要插入3个令牌。<input source>将类似于your-recording.mov<width>应该是您想要最终gif的宽度,而<output file>将类似于recording.gif

此命令分解为:



filter_complex我们将把一些过滤器链接在一起

[0:v] fps=12以每秒12帧的速度获取容器中的第一个视频流

scale=1024:-1调整为1024的宽度,并保持高度的长宽比

split [a][b]获取当前流并将其分成两部分(基本上是克隆它)

;传入新过滤器

[a] palettegen [p]取“ a”流并生成一个名为“ p”的调色板

;传入新的过滤器

[b][p] paletteuse接收“ b”流并应用“ p”调色板

并非总是要在屏幕记录中使用调色板的内容,但绝对需要b录制的视频具有更好的颜色。

如果要剪辑,也可以根据需要插入-ss 00:00:00.000-t 00:00:00.000