ffmpeg使用调色板将mp4转换为gif会导致视频被截断

ffmpeg使用调色板将mp4转换为gif会导致视频被截断,ffmpeg,gif,Ffmpeg,Gif,我想用ffmpeg(ffmpeg版本2.8.15-0ubuntu0.16.04.1)通过调色板从我的mp4电影生成gif。如果不使用调色板,一切正常: $ ffmpeg -i in.mp4 -filter_complex "scale=160:-1" out.gif ... frame= 2003 fps=251 q=-0.0 Lsize= 21172kB time=00:01:20.12 bitrate=2164.7kbits/s video:21155kB audio:0kB s

我想用ffmpeg(
ffmpeg版本2.8.15-0ubuntu0.16.04.1
)通过调色板从我的mp4电影生成gif。如果不使用调色板,一切正常:

$ ffmpeg -i in.mp4 -filter_complex "scale=160:-1" out.gif
...
frame= 2003 fps=251 q=-0.0 Lsize=   21172kB time=00:01:20.12 bitrate=2164.7kbits/s    
video:21155kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.077667%
但是使用这样的调色板会导致
缓冲队列溢出,丢弃
消息和截断视频

$ ffmpeg -i in.mp4 -filter_complex "[0:v] scale=160:-1, split [a][b];[a] palettegen [p];[b][p] paletteuse" out.gif
....
[Parsed_paletteuse_3 @ 0xc56de0] [framesync @ 0xd1af08] Buffer queue overflow, dropping.
Last message repeated 36 times
[Parsed_paletteuse_3 @ 0xc56de0] [framesync @ 0xd1af08] Buffer queue overflow, dropping.
Last message repeated 106 times
...
[Parsed_palettegen_2 @ 0xc56d40] 255(+1) colors generated out of 1347441 colors; ratio=0.000189
frame=   65 fps=5.4 q=-0.0 Lsize=    1036kB time=00:01:20.12 bitrate= 105.9kbits/s    
video:1035kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.124664%

与此同时,我发现了如何规避这种行为。我只需要在用于转换的流中包含fifo,以便它等待调色板生成:

$ ffmpeg -i in.mp4 -filter_complex "[0:v] scale=160:-1 [r];[r] split [a][b];[b]fifo[bb]; [a] palettegen [p];[bb][p] paletteuse" out.gif
...
frame= 2003 fps=7.8 q=-0.0 Lsize=  804608kB time=00:01:20.12 bitrate=82268.4kbits/s    
video:804591kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.002042%

是的。最终输出显示只处理了
frame=65
frame=2003
在第一个示例中已处理。如果使用ffmpeg的现代版本,则不需要使用fifo。