Po prostu zmiksuj obrazy
Możesz po prostu zmiksować obrazy JPG, aby utworzyć wideo:
ffmpeg -framerate 30 -i input%03d.jpg -codec copy output.mkv
Zauważ, że jeśli pominiesz, -framerate
wówczas -framerate 25
do danych wejściowych zostanie zastosowana wartość domyślna .
Bezstratna optymalizacja
Możesz użyć jpegtran
do bezstratnej optymalizacji każdej ramki, co może zapewnić znaczne oszczędności rozmiaru pliku:
mkdir outputdir
for f in *.jpg; do jpegtran -optimize -copy none -perfect -v "$f" > "outputdir/$f"; done
Teraz wymieszaj z ffmpeg
jak pokazano powyżej.
Sprawdzanie, czy faktycznie jest bezstratne
Framehash muxer mogą być wykorzystane w celu porównania unikalny hash każdej ramki, aby zapewnić, że wynik jest naprawdę bezstratne:
$ 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
...
W powyższych przykładach każda powiązana ramka dla wejścia i wyjścia ma ten sam skrót, zapewniając, że ramki są identyczne i że dane wyjściowe są bezstratne.
Zobacz także