Итак, у меня есть скрипт, который я использую для преобразования видеоклипов в 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
и используйте метод дизеринга с 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, но я просто упростил его до простого ввода вывода для файлов без дополнительных флагов аргументов.
Эти флаги и параметры ДОЛЖНЫ работать, но это глупо и не делает то, что предполагается.