H.264 / MPEG-4 de quadros PNG: como e como ajustar a compactação

0

Eu geralmente crio animações digitais preparando todos os quadros no formato .png (com compactação mínima), que eu preciso converter em formato de vídeo para carregar em sites como reddit, instagram, gfycat.

Conheço muito pouco de todos os diferentes padrões de compactação, e esses sites não são muito claros sobre o formato que aceitam, mas encontrei uma receita que normalmente 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 faz *, portanto, não sou capaz de:

  • faça uma única instrução

  • ajuste a taxa de compactação.

Na verdade, muitas vezes prefiro um resultado menos compactado.

Qual rota posso seguir para ir de quadros PNG para um arquivo de vídeo compatível com a web (que eu acredito ser um H.264 / MPEG-4 MP4 ) que me dá a capacidade de ajustar a compressão?

* por exemplo: este é um quadro de exemplo

(nota:honestamente,parece-mequeparecemuitopiorquandoassistidoemVLCdoquequandosefazuminstantâneoatravésdaferramentaVLC-istotornamuitodifíciltornaraquestãocompreensíveleosresultadoscomparáveis)

Mesmoquenaetapa1eutenhaespecificado$WIDTHe$HEIGHTparacorresponderaosdaimagemoriginal,aparentementeelamudouenãopreservouaproporção.Hátambémmaisdesfoquenaimagemfinal,quepodeserapenasumefeitodetalredimensionamento.

edit:vejaacapturadetelarealdosistemadajaneladomplayerabaixo(seriaomesmocomoVLC).AsjuntasdecerâmicaestãomuitodesfocadasemcomparaçãocomafontePNGeafuncionalidadedecapturadeimagens"interna" do VLC

Detalhe:

    
por Nicola Sap 07.01.2018 / 19:06

1 resposta

0

ffmpeg

Como apontado nos comentários, ffmpeg oferece uma boa solução de uma etapa com um simples parâmetro de "qualidade": crf ou "fator de taxa constante" (leia este post explicando o crf).

Veja este post para instruções simples para ir de PNG para H.264 usando ffmpeg.

Resumindo:

# Assuming the frames are called frame0000.png, frame0001.png ...
# 
# set $FPS, $WIDTH, $HEIGHT, $FIRSTFRAME, 
# $CRF (see above) to the desired value, then run:

ffmpeg -r $FPS -f image2 -s ${WIDTH}x$HEIGHT -start_number $FIRSTFRAME \
       -i frame%04d.png -vcodec libx264 -crf $CRF -pix_fmt yuv420p output.mp4

$CRF é 23 por padrão; valores menores que 23 dão melhor qualidade e arquivos maiores, valores maiores que 23 aumentam a compressão.

    
por 09.01.2018 / 10:21