Costumo criar animações digitais preparando todos os quadros em formato .png (com compressão mínima), que preciso converter para formato de vídeo para upload em sites como reddit, instagram, gfycat.
Conheço muito pouco sobre todos os diferentes padrões de compactação e esses sites não são muito claros quanto ao formato que aceitam, mas encontrei uma receita que geralmente funciona para mim e que cria arquivos que são aceitos por esses sites :
# step 1
mencoder mf://frame*.png -mf w=$WIDTH:h=$HEIGHT:fps=$FPS:type=png \
-ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=16000:keyint=15:mbd=2:trell \
-oac copy -o step1.avi
# step 2
mencoder step1.avi -o step2.mp4 -of lavf -lavfopts format=mp4 -ovc x264 -sws 9 \
-x264encopts nocabac:level_idc=30:bframes=0:bitrate=2048:threads=auto:turbo=1:global_header:threads=auto:subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh
No entanto, não tenho certeza do que ele faz *, portanto não sou capaz de:
torná-lo uma única instrução
ajuste a taxa de compressão.
Na verdade, muitas vezes prefiro um resultado menos compactado.
Que rota posso seguir para passar de quadros PNG para um arquivo de vídeo compatível com a Web (que acredito ser um H.264/MPEG-4 MP4 ) que me permite ajustar a compactação?
* por exemplo: este é um quadro de exemplo
(nota: honestamente, parece-me que parece muito pior ao assistir no VLC do que ao tirar um instantâneo através da ferramenta VLC - isso torna muito difícil tornar a pergunta compreensível e os resultados comparáveis)
Mesmo que no passo 1 eu tenha especificado $WIDTH
e $HEIGHT
correspondido aos da imagem original, aparentemente alterou ambos e não preservou a proporção. Há também mais desfoque na imagem final, que pode ser apenas um efeito desse redimensionamento.
editar: veja a captura de tela real do sistema da janela do mplayer abaixo (seria o mesmo com o VLC). As argamassas dos ladrilhos estão muito desfocadas em comparação com a fonte PNG e o recurso de captura de tela "interno" do VLC
Detalhe:
ffmpeg
Conforme apontado nos comentários,
ffmpeg
oferece uma boa solução de uma etapa com um parâmetro simples de "qualidade":crf
, ou "fator de taxa constante" (leia este post explicando o crf).Veja este post para obter instruções simples para passar de PNG para H.264 usando ffmpeg.
Resumidamente:
$CRF
é 23 por padrão; valores menores que 23 dão melhor qualidade e arquivos maiores, valores maiores que 23 aumentam a compressão.