Apenas mux as imagens
Você pode simplesmente compactar as imagens JPG para criar um vídeo:
ffmpeg -framerate 30 -i input%03d.jpg -codec copy output.mkv
Observe que, se você omitir -framerate
, um padrão de -framerate 25
será aplicado à entrada.
Otimização sem perdas
Você pode usar jpegtran
para executar a otimização sem perdas em cada quadro, o que pode proporcionar uma economia significativa no tamanho do arquivo:
mkdir outputdir
for f in *.jpg; do jpegtran -optimize -copy none -perfect -v "$f" > "outputdir/$f"; done
Agora mux com ffmpeg
como mostrado acima.
Verificando se está realmente sem perdas
O framehash muxer pode ser usado para comparar o hash exclusivo de cada quadro para garantir que o resultado seja realmente sem perdas:
$ ffmpeg -i input%03d.jpg -f framehash -
stream_index, packet_dts, packet_pts, packet_duration, packet_size, hash
0, 0, 0, 1, 460800, 29bcc2db3726c7dfec1826c5740f603f
0, 1, 1, 1, 460800, b5fdc23d93cbd043dc2b9290dc8378f0
0, 2, 2, 1, 460800, ee0709942f24b458fd2380d134dcb59d
...
$ ffmpeg -i output.mkv -map 0:v -f framehash -
stream_index, packet_dts, packet_pts, packet_duration, packet_size, hash
0, 0, 0, 1, 460800, 29bcc2db3726c7dfec1826c5740f603f
0, 1, 1, 1, 460800, b5fdc23d93cbd043dc2b9290dc8378f0
0, 2, 2, 1, 460800, ee0709942f24b458fd2380d134dcb59d
...
Nos exemplos acima, cada quadro associado à entrada e saída compartilha o mesmo hash, garantindo que os quadros sejam idênticos e que a saída seja sem perdas.
Veja também