FFMPEG:用于编解码器'gif'的不兼容像素格式'rgb24',自动选择格式'rgb8'

时间:2017-08-18 18:10:04

标签: ffmpeg rgb gif recording video-recording

我使用ffmpeg记录具有24位颜色深度的xvfb桌面并将其保存为gif格式(然后我将其传输到AWS,以便您可以用替换' - '符号filename.gif 在命令的最后,它不会影响这个问题):

ffmpeg -f x11grab -video_size 800x600 -r 30 -i :99.0 -f gif -pix_fmt rgb24 -t 5 -

但是,我总是收到警告:

  

用于编解码器'gif'的像素格式'rgb24'不兼容,自动选择   格式'rgb8'

导致不正确的色彩再现。我在Windows和Ubuntu Docker容器上都尝试了它,包括预编译和源代码,从最后一次提交的存储库,但没有运气。此外,我在其他人的日志中看到他们使用 - -pix_fmt rgb24 bgr24 ,它的工作正常。

所以问题是:为了将rgb24与gif编码器一起使用,我需要安装或配置什么?或者可能有一种解决方法,比如首先将其转换为另一种格式?

以下是我的输出部分:

ffmpeg version git-2017-08-18-f386dd7 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
  configuration: --enable-gpl --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-version3 --enable-libxcb
  libavutil      55. 74.100 / 55. 74.100
  libavcodec     57.102.100 / 57.102.100
  libavformat    57. 76.100 / 57. 76.100
  libavdevice    57.  7.100 / 57.  7.100
  libavfilter     6. 99.100 /  6. 99.100
  libswscale      4.  7.102 /  4.  7.102
  libswresample   2.  8.100 /  2.  8.100
  libpostproc    54.  6.100 / 54.  6.100


Input #0, x11grab, from ':99.0':
  Duration: N/A, start: 1503077459.413864, bitrate: N/A
    Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1024x768, 30 fps, 1000k tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> gif (native))
Press [q] to stop, [?] for help
Incompatible pixel format 'bgr24' for codec 'gif', auto-selecting format 'rgb8'


Output #0, gif, to 'pipe:':
  Metadata:
    encoder         : Lavf57.76.100
    Stream #0:0: Video: gif, rgb8, 1024x768, q=2-31, 200 kb/s, 30 fps, 100 tbn, 30 tbc
    Metadata:
      encoder         : Lavc57.102.100 gif
PS:我发现的唯一解决方法是将输入视频分成jpeg并将它们传输到ImageMagick,然后将jpegs连接到gif。这是一个非常缓慢的过程,并且渲染时间增加了x20倍。

2 个答案:

答案 0 :(得分:0)

对我来说,一个解决方案是在Mac上安装 ffmpeg imagemagick

brew install ffmpeg
brew install imagemagick 

然后cd .mov 文件所在的目录,并运行以下命令。

mkdir output
ffmpeg -i myvideo.mov -vf scale=1024:-1 -r 10 output/ffout%3d.png
convert -delay 8 -loop 0 output/ffout*.png output/animation.gif

第一个创建一个output目录。第二个命令为每帧(由-r标志指定,表示10 fps)创建一个 .png 文件。第三个命令使用imagemagick从先前创建的图像文件创建gif文件,延迟为8ms。最终的gif是output/animation.gif文件。

答案 1 :(得分:0)

因此(如评论部分中的Gyan所述)仅是警告ffmpeg正在从此编解码器不支持的像素格式切换为默认格式。 可以通过使用逐帧优化的调色板解决色彩准确性问题,这是palettegenpaletteuse的文档,这里是example