По сути, я хочу ускорить видео (обычно некоторые математические вещи, такие как пример "Прыгающих шаров" при обработке с исходным кодом - YouTube); однако я не хочу просто отбрасывать кадры, а вместо этого хочу "объединить" (из-за отсутствия лучшего термина) кадры, как показано на диаграмме:
+----------+----------+----------+----------+----------+----------+
| Frame 01 | Frame 02 | Frame 03 | Frame 04 | Frame 05 | Frame 06 |
+---+------+-----+----+----+-----+-----+----+-----+----+----------+
| | | | |
| +---+ | | | |
| | +<--+ | | |
+--->+ + +<------------+ | |
| +<------------------------+ |
++--+<-----------------------------------+
|
+-----v-----+
| NFrame 01 |
+-----------+
Другими словами: если я хочу ускорить видео в 5 раз, вместо того, чтобы просто "прореживать", беря каждый 5-й кадр (так, чтобы за первым кадром 01 следовал кадр 06 в новом выходном потоке), я бы хотел новый кадр ( в новом выходном потоке) быть "суммой" кадров от 01 до 05:
NFrame01 = k*(Frame01 + Frame02 + Frame03 + Frame04 + Frame05)
Поскольку цветовой диапазон ограничен, мне понадобится постоянная k для управления значениями цвета: скажем, мы работаем с пикселями RGBA, с диапазонами от 0,0 до 1,0; затем, если в позиции x, y каждого оригинального Frame01-Frame05 полностью красного цвета (1,0,0,1), мне пришлось бы умножить альфа каждого входного пикселя на 1/5 = 0,2, чтобы обеспечить выходной пиксель (сумма) также полностью красный (1,0,0,1), не переходя цветовой диапазон; грубо говоря:
NFrame01(x,y) = [1.0, 1.0, 1.0, 0.2]*(Frame01(x,y) + Frame02(x,y) + Frame03(x,y) + Frame04(x,y) + Frame05(x,y))
(С другой стороны, предполагая, что пиксели RGB не имеют альфа-канала, нам придется умножить каждый из каналов RGB на 0,2)
Если у нас есть математическое видео, такое как пример прыгающего шара, в котором нет естественного размытия в движении, я думаю, это приведет к некоторому виду "размытия в движении" (т.е. вместо одного шарика на кадр у меня будет пять шариков на кадр, отслеживающий движение).
Я думаю, что я мог бы сделать это, извлекая кадры в виде изображений, и иметь свой собственный код, генерировать новые кадры и, наконец, создавать новое выходное видео из новых кадров - но так как это может занять у меня "навсегда", мне было интересно: Может быть, ffmpeg
(или другие инструменты с открытым исходным кодом) сделать это в "одну строку"?