Работа над исследовательским проектом с цветовой системой, которая оповещает между красными (R) и зелеными (G) изображениями. Мы хотим попробовать разные способы, чтобы перенести этот материал в цифровую область. Для этого мы хотим попробовать различные выпадающие последовательности.

Мы хотим проецировать в 48 к / с или 60 к / с.

  • Тройной каждый кадр: R1 R1 R1 G1 G1 G1
  • Тройной каждый кадр2: R1 G1 R1 G1 R1 G1
  • Вставить черную рамку: R1 R1 R1 G1 G1 G1 BL
  • Вставить черную рамку2: R1 R1 R1 G1 G1 BL R2 R2 G2 G2 G2 BL
  • Вставка черная рамка3: R1 G1 BL R2 G2 BL
  • Вставить черную рамку4: R1 R1 BL G1 G1 BL

...и так далее

Это возможно в ffmpeg?

Альтернативой является написание простого сценария для копирования и перенумерации последовательности изображений. Очевидно, что было бы быстрее и проще сделать все это из ffmpeg.

Спасибо за помощь.

2 ответа2

1

Это может быть выполнено в рамках 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

Просто. Просто сделайте каждый третий кадр черным.

0

Это не только возможно, но и просто и эффективно: используйте файл concat

Предполагая, что у вас есть ваши кадры в r1.png, ... g2.png и т.д. И 48 Гц (то есть 20.8333 .. мс), фрагмент файла concat

file 'r1.png'
duration 0.0625
file 'g1.png'
duration 0.0625

даст 3 кадра red1, затем 3 кадра green1 (20.8333 ..* 3 = 62,5)

С помощью таких фрагментов вы можете создать любую нужную вам последовательность, а затем запустить

ffmpeg -i /path/to/concatfile -c.... /path/to/outfile

Создать свой клип.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .