Diferença entre ffmpeg eq (brilho / contraste / saturação) e filtros CSS?

2

Eu tenho um vídeo e estou tentando replicar alguns filtros CSS para um vídeo com o FFMPEG.

Aqui está uma captura de tela de um vídeo em CSS com a propriedade filter: contrast(150%) :

EutenteirecriaresseefeitonoFFMPEGcomo filtro eq , definindo contraste para 1,5

ffmpeg -y -i ./input.mp4 -vf "eq=contrast=1.5:brightness=0:saturation=1" -pix_fmt yuv420p ./filtered_input.mp4

E minha saída é assim:

Aquiestáumaimagemdessasduascapturasdetelaladoalado:

Vocêpodeverqueaimagemàesquerda(filtradacomCSS)éumpoucomaisbranca/azulsevocêobservaraneveentreasimagens.

Aquiestáumlinkparaovídeooriginal: link

Também encontrei este comentário que discute a relação entre contraste e saturação, mas descobri que ainda havia uma diferença, mesmo se eu ajustei a saturação, ou mesmo apenas ajustei a saturação por si só.

Meu meta ponto é que os filtros eq do FFMPEG geram resultados muito diferentes dos filtros CSS correspondentes. Alguém sabe por que isso pode estar acontecendo e como posso fazer com que eles se encaixem?

    
por justswim 21.01.2018 / 09:05

2 respostas

3

My meta point is that the eq filters by FFMPEG yield very different results from the corresponding CSS filters. Does anyone know why this might be happening

Não existe um consenso entre todos os provedores de software sobre como o brilho, o contraste e a saturação devem funcionar.

Os filtros CSS terão definições matemáticas precisas, determinadas pelo W3C. Eles precisam ser precisos para que diferentes navegadores de diferentes fornecedores possam exibir a mesma imagem renderizada. A especificação atual para filtros CSS está aqui: link

Por outro lado, os filtros ffmpeg são implementados de maneira "ad hoc" por uma coleção de engenheiros (muito inteligentes) e não precisam obedecer a nenhum padrão. Eles meramente precisam ser úteis na visão dos desenvolvedores do ffmpeg.

and how I can get them to match up?

Espero que a única maneira de saber exatamente o que um filtro ffmpeg faz é ler o código-fonte (em outras palavras, o código-fonte é a especificação). Ao fazer isso, você poderá determinar os parâmetros de entrada que fornecerão o mesmo resultado matemático dos filtros CSS. Ou talvez não.

Como os filtros do ffmpeg não precisam estar em conformidade com nenhum padrão, existe o risco de que uma futura atualização do ffmpeg possa alterar o resultado.

EDIT : Outra coisa que deve ser cautelosa é que, mesmo que os valores numéricos de cores em ambos os arquivos de vídeo sejam os mesmos, eles podem ser exibidos de maneira diferente quando reproduzidos. Um dos motivos é se os metadados sobre o espaço de cores foram perdidos ou alterados durante o processamento, de modo que a saída do ffmpeg esteja em um espaço de cores diferente do vídeo original, fazendo com que o player interprete os valores de cores numéricas de maneira diferente. Outra razão é se um jogador suporta conversões de espaço de cores que o outro não suporta. Com base nas capturas de tela acima, parece que elas estão sendo visualizadas em diferentes players (um navegador versus outra coisa). Seria melhor visualizar os dois vídeos no mesmo player.

    
por 25.02.2018 / 13:26
0

De outro tópico

filter: contrast(c) saturate(s);

is equivalent to

eq=contrast=c:saturation=c*s

Não tenho certeza sobre o parâmetro de brilho.

    
por 16.03.2018 / 13:32