Você precisa especificar as opções no filtro por nome, para que as configurações originais do filtro precisem ser alteradas para ...
-filter_complex "[0:v]eq=contrast=1:brightness=0:saturation=1:gamma=1:
gamma_r=1:gamma_g=1:gamma_b=1:gamma_weight=1[outv]"
... se você quiser definir todos esses parâmetros. Caso contrário, o filtro vai ignorar suas configurações e aplicar os valores padrão, ou pode interpretar erroneamente o valor de uma opção pretendida para outra (não não deve , mas coisas estranhas aconteceram com os filtros do FFmpeg).
No que se refere aos valores selecionados e aos resultados finais, o código slhck apontado mostra que os conjuntos de valor um por opção são executados por meio de uma série de cálculos internos; em seguida, os resultados são usados para avaliar e fazer ajustes no nível do pixel . Parece que o cálculo "base" para contrast
é ...
(param->contrast * 256 * 16)
... então o valor padrão de 0
resultaria em 0, um valor especificado de 1
resultaria em 4096, um valor de -0.00275
resultaria em -11.264, etc, e esses valores base são usado em outros cálculos abaixo da linha. Em outras palavras, seria melhor considerar o tratamento desses parâmetros como único, então passe algum tempo brincando com eles para ver como eles funcionam. Para ter uma ideia verdadeira dos efeitos, você pode ajustar e pesquisar a saída das configurações de eq
usando o FFplay, por exemplo:
ffplay -i input.jpg -vf "eq=contrast=1.5:brightness=-0.05:saturation=0.75"
No que diz respeito ao seu script original, como você estava usando apenas uma entrada (seu jpeg), um filtro (eq) e todas as opções, exceto contrast
, estavam carregando valores padrão, você pode reduzir o script para o seguinte para obter o seu MP4 de 3 segundos, desde que eq=contrast=1
produza resultados desejáveis:
ffmpeg -y -loop 1 -i input.jpg -vf "eq=contrast=1" -c:v libx264 \
-pix_fmt yuv420p -t 3 out.mp4
divulgação completa: pós-edição de 2016/06/19 para maior esclarecimento e informações estendidas