Można to zrobić w ffmpeg za pomocą szeregu filtrów.
Istnieją dwa czynniki:
a) zmiana liczby ramek oraz
b) sekwencjonowanie ramek
Użyjemy filtra fps, aby zwiększyć liczbę klatek. Filtr wykona w tym celu regularne powielanie. Następnie filtr shuffleframe, aby osiągnąć wymaganą zmianę kolejności sekwencji. W razie potrzeby będziemy również potrzebować filtra drawbox, aby wygenerować czarne ramki. Sekwencje te można wyprowadzać z dowolną częstotliwością klatek.
Będziemy spożywać każdą sekwencję obrazów z prędkością 1 kl./s, ponieważ to upraszcza obliczenia.
Dla
Potrójna każda ramka: R1 R1 R1 G1 G1 G1
ffmpeg -framerate 1 -i frames%04d.jpg -vf "fps=3,settb=AVTB,setpts=N/48/TB" -r 48 -y out.mp4
Filtr fps służy do trzykrotnego zliczania każdej klatki. Ze względu na to, jak działa filtr fps, musimy zresetować bazę czasu strumienia, aby uzyskać wystarczającą rozdzielczość dla kolejnych kroków. Jest ustawiony na AVTB, tj 1/1000000
. Sekundy. Następnie ramki są numerowane w odstępach 1/48 sekundy. Wreszcie wyjściowa liczba klatek na sekundę jest ustawiona na 48.
Potrójna każda ramka2: R1 G1 R1 G1 R1 G1
ffmpeg -framerate 1 -i frames%04d.jpg -vf "fps=3,shuffleframes=0 3 0 3 0 3,settb=AVTB,setpts=N/48/TB" -r 48 -y out.mp4
Fps trzykrotnie każdą ramkę, więc 0 3 0 3 0 3
wysyła sześć klatek przy użyciu pierwszej kopii R1 i G1.
Wstaw czarną ramkę: R1 R1 R1 G1 G1 G1 BL
ffmpeg -framerate 1 -i frames%04d.jpg -vf "fps=4,shuffleframes=0 0 0 4 4 4 4 -1,drawbox=t=fill:enable=not(mod(n+1\,7)),settb=AVTB,setpts=N/48/TB" -r 48 -y out.mp4
Tutaj czterokrotnie każdą klatkę, a następnie użyj losowego, aby zachować 7 z każdej 8 klatek, upuszczając ostatnią. Następnie użyj drawbox za pomocą, enable
aby każda 7. ramka była czarna ( t=fill
rysuje jednolite pudełko. Domyślnym kolorem jest czarny).
Wstaw czarną ramkę2: R1 R1 R1 G1 G1 BL R2 R2 G2 G2 G2 BL
ffmpeg -framerate 1 -i frames%04d.jpg -vf "fps=3,shuffleframes=0 0 3 3 3 3:enable='mod(floor(n/6),2)',drawbox=t=fill:enable=not(mod(n+1\,6)),settb=AVTB,setpts=N/48/TB" -r 48 -y out.mp4
Nieco trudniejsze. shguffleframes wystarczy zastosować do każdego alternatywnego zestawu 6 ramek. Używamy do tego edycji osi czasu, tj. enable
Opcji.
Wstaw czarną ramkę3: R1 G1 BL R2 G2 BL
ffmpeg -framerate 1 -i frames%04d.jpg -vf "fps=2,shuffleframes=0 2 2 -1,drawbox=t=fill:enable=not(mod(n+1\,3)),settb=AVTB,setpts=N/48/TB" -r 48 -y out.mp4
Podwoj liczbę klatek i zachowaj 3 klatki, rysując czarny na 3, a upuszczając na 4.
Wstaw czarną ramkę 4: R1 R1 BL G1 G1 BL
ffmpeg -framerate 1 -i frames%04d.jpg -vf "fps=3,drawbox=t=fill:enable=not(mod(n+1\,3)),settb=AVTB,setpts=N/48/TB" -r 48 -y out.mp4
Prosty. Po prostu spraw, aby każda trzecia ramka była czarna.