Eu tive uma tarefa muito semelhante recentemente e diria que ainda não há uma solução perfeita (a partir de outubro de 2018). Este é o efeito colateral da conversão de cores RGB para YUV para RGB de baixa precisão. Mesmo algumas variantes "sem perdas" de codecs (por exemplo, libvpx-vp9 -lossless
) produzem cores distorcidas devido ao espaço de cores YUV.
-
Se cores não exatas forem aceitáveis, o codec libvpx poderá fazer um bom trabalho:
ffmpeg -r 25 -i image%03d.png -c:v libvpx -crf 4 -b:v 0 output.webm
Com essas configurações, produziu uma quantidade insignificante de mudança de cor ou até mesmo as cores exatas para alguns conjuntos de quadros. Codecs VPx são amplamente suportado (todos os principais navegadores, exceto o IE eo Safari) e tamanho de arquivo razoável.
-
Se as cores exatas forem estritamente necessárias, precisamos evitar conversão de espaço de cores. A única solução entre navegadores que eu criei é usar imagens animado png .
ffmpeg
tem apenas muito básico suporte para apng, por isso é melhor usar outras ferramentas, por exemploapngasm
:apngasm output.png image001.png 1 25
funcionará em todos os lugares, exceto no IE e no Edge primeiro quadro estático). Os tamanhos dos arquivos são enormes, mas esse é o preço para a verdadeira codificação sem perdas.
- O codec libx264rgb também deve ser mencionado - usando vontade ser a maneira correta de codificar as cores RGB precisas quando / se navegadores suportarão isso.