所以我有一个脚本用于将视频剪辑制作到GIF中,但是我的脚本出现了问题,它以前用于工作,现在它无法正常工作。
在我的脚本中,我有预定义的变量和标志,但它在AVFilterGraph上出错No such filter: 'dither'
,但我检查了FFMPEG的文档并且有一个dither
过滤器标志,但由于某种原因,它是以前工作时没有工作。
#!/bin/sh
start_time=00:00 # start time of GIF
duration=5 # duration of GIF
palette="/tmp/palette.png" # temporary palette
filters="fps=20,scale=440:-1:flags=lanczos,dither=bayer:bayer_scale=1" # FPS and Scale of GIF
ffmpeg -v warning -ss $start_time -t $duration -i $1 -vf "$filters,palettegen" -y $palette
ffmpeg -v warning -ss $start_time -t $duration -i $1 -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y $2
这个
filters="fps=20,scale=440:-1:flags=lanczos,dither=bayer:bayer_scale=1"
抖动应该算作旗帜,即; flags=lanczos
并使用dither方法和bayer_scale。
我不明白为什么它在以前工作时不再起作用了。我的ffmpeg软件包没有任何改变,我的系统上安装了ffmpeg version 3.3.3-2~ubuntu16.04.1~ppa1
软件包,之前运行正常。我在这里开始了http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html
所以基本上使用我的脚本就是这样;
$ ./makegif.sh input_file.mp4 output_file.gif
然后它应该将转换后的视频生成为GIF格式,如果我想要剪辑中的特定部分我只需要更改脚本中的开始时间和持续时间。理想情况下,我想在CLI上手动输入开始时间和持续时间,但我只是将其简化为只输入文件而没有附加参数标志。
这些标志和选项应该提供,但它是愚蠢的,而不是按照它想要的那样做。
答案 0 :(得分:2)
您正在使用dither
,就好像它是一个独立的过滤器,但它是paletteuse的一个选项。将其更改为:
#!/bin/sh
start_time=00:00 # start time of GIF
duration=5 # duration of GIF
palette="/tmp/palette.png" # temporary palette
filters="fps=20,scale=440:-1:flags=lanczos" # FPS and Scale of GIF
ffmpeg -y -v warning -ss "$start_time" -t "$duration" -i "$1" -vf "$filters,palettegen" "$palette"
ffmpeg -y -v warning -ss "$start_time" -t "$duration" -i "$1" -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse=dither=bayer:bayer_scale=1" "$2"