Это может быть выполнено в рамках ffmpeg с использованием ряда фильтров.
Есть два соображения:
а) изменение количества кадров, и
б) последовательность кадров
Мы будем использовать фильтр fps для увеличения количества кадров. Фильтр будет выполнять регулярное дублирование для этого. Затем фильтр случайных кадров для достижения требуемой перегруппировки последовательности. Нам также понадобится фильтр Drawbox для генерации черных рамок, если это необходимо. Эти последовательности могут быть выведены с любой частотой кадров.
Мы будем принимать каждую последовательность изображений со скоростью 1 кадр / с, так как это упрощает вычисления.
За
Тройной каждый кадр: 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
Фильтр fps используется для тройного подсчета каждого кадра. Из-за того, как работает фильтр fps, нам нужно сбросить временную базу потока, чтобы получить достаточное разрешение для следующих шагов. Он установлен в AVTB, т.е. 1/1000000
секунд. Затем кадры перенумеровываются с интервалом 1/48 секунды. Наконец, выходная частота кадров установлена на 48.
Тройной каждый кадр2: 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 утраивает каждый кадр, поэтому 0 3 0 3 0 3
выводит шесть кадров, используя первую копию R1 и G1.
Вставить черную рамку: 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
Здесь мы удваиваем каждый кадр, а затем используем shuffle, чтобы оставить 7 из каждых 8 кадров, отбрасывая последний. Затем используйте drawbox with enable
чтобы сделать каждый 7-й кадр черным (t=fill
рисует сплошную рамку. Цвет по умолчанию черный).
Вставить черную рамку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
Немного сложнее. shguffleframes нужно применять только к каждому альтернативному набору из 6 кадров. Мы используем временную шкалу редактирования т.е. enable
опцию для этого.
Вставка черная рамка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
Удвойте количество кадров и сохраняйте 3 кадра, рисуя черным на третьем и опуская 4
Вставить черную рамку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
Просто. Просто сделайте каждый третий кадр черным.