使用ffmpeg将.avi转换为.gif,质量和字幕质量都很好

时间:2015-12-01 18:25:35

标签: ffmpeg gif avi subtitle

我想使用ffmpeg将.avi转换为优质字幕的.gif文件。

现在,我使用此脚本将.avi转换为.gif,质量好

ffmpeg -v warning -ss 10:00 -t 5 -i input.avi -vf "fps=15,scale=420:-1:flags=lanczos,palettegen" -y palette.png
ffmpeg -v warning -ss 10:00 -t 5 -i input.avi -i palette.png -lavfi "fps=15,scale=420:-1:flags=lanczos [x]; [x][1:v] paletteuse" -y output.gif

我生成一个调色板,然后用它来输出gif。

然后我使用此脚本将字幕添加到 gif

ffmpeg -v warning -i output.gif -vf "ass=subtitles.ass" -y outputWithSubs.gif

一切正常。问题是第一个脚本给了我没有字幕的高质量,第二个脚本给了我没有高质量的字幕

当我尝试将它们与此脚本合并时:

ffmpeg -v warning -ss 10:00 -t 5 -i input.avi -vf "fps=15,scale=420:-1:flags=lanczos,palettegen" -y palette.png
ffmpeg -v warning -ss 10:00 -t 5 -i input.avi -i palette.png -vf "ass=subtitles.ass" -lavfi "fps=15,scale=420:-1:flags=lanczos [x]; [x][1:v] paletteuse" -y output.gif

我收到此错误:

Filtergraph 'ass=subtitles.ass' was specified through the -vf/-af/-filter option for output stream 0:0, which is fed from a complex filtergraph. -vf/-af/-filter and -filter_complex cannot be used together for the same stream.

有没有什么方法可以同时将优质和字幕结合起来?

1 个答案:

答案 0 :(得分:3)

使用-filter_complex, not -vf,并在一个filtergraph中完成所有过滤。

ffmpeg -y -ss 10:00 -t 5 -i input.avi -filter_complex "fps=15,scale=420:-1:flags=lanczos,ass=subtitles.ass,palettegen" palette.png

ffmpeg -y -ss 10:00 -t 5 -i input.avi -i palette.png -filter_complex "fps=15,scale=420:-1:flags=lanczos,ass=subtitles.ass[x];[x][1:v]paletteuse" output.gif