Как *интегрировать* каждые два кадра существующего видео в один, чтобы компенсировать низкую освещенность?

Некоторые мобильные телефоны способны компенсировать условия низкой освещенности, объединяя каждые два или более кадров в один. В результате получается видео с переменной частотой кадров, где каждое изображение имеет свою временную метку. На таких кадрах показаны правильно освещенные объекты, но вы замечаете падение частоты кадров, потому что движение не плавное, а также изображения становятся более шумными (потому что вы добавляете шум, создаваемый электроникой). Во всяком случае, мне это кажется технологическим чудом, учитывая, что входной зрачок таких приборов не может быть больше 1 мм в диаметре.

Но допустим, вы заставили телефон записывать с фиксированной частотой кадров (например, 1280x720p30 с OpenCamera в Android). Должна быть возможность конвертировать, например, 30p в 15p, добавляя значения, хранящиеся в соответствующих пикселях каждых двух кадров, в одно. Я знаю, что этот процесс возможен, потому что он обычен в других контекстах, например, при работе с астрономическими изображениями.

Моими инструментами являются ffmpeg и Blender. Я был бы признателен, если бы кто-то мог ограничить ответ этими инструментами, хотя другие решения также приветствуются, потому что они могут указать мне правильный путь для поиска подходящих альтернатив.

Ответы (3)

Как вы заметили, простое добавление (интегрирование) каждой пары соседних кадров для создания одного нового кадра снижает частоту кадров.

Но если все, что вы хотите сделать, это объединить соседние кадры, рассмотрите возможность дублирования видео на отдельную временную шкалу, сдвинутую ровно на один кадр. Интеграция этих двух потоков даст вам новое видео с той же частотой кадров, но в целом короче на один кадр.

Все остальные отмеченные проблемы могут проявиться, но, по крайней мере, частота кадров не изменится.

Это умная идея, но вы проверяли ее? Я бы лучше поинтересовался, если есть какие-то неожиданные результаты.
@DigiVisionMedia - Нет, я не проверял. Если бы у меня были средства для проверки, я бы это сделал, как и любой другой. Как я уже сказал, могут возникнуть любые другие упомянутые проблемы, и я уверен, что «успех» будет зависеть от содержания. Но это позволит достичь заявленной цели без изменения частоты кадров.

Мой собственный, не полностью удовлетворительный ответ, который может быть полезен:

Эта очень простая строка делает свое дело:

ffmpeg -i input vf "tblend=addition,framestep=2" {параметры кодирования} вывод

Например

ffmpeg -i input.mp4 -vf "tblend=добавление,framestep=2" -c:v libx264 -crf 16 -c:a копировать output.mp4

input.mp4 имел переменную частоту кадров <=30, а output.mp4 — 15 кадров в секунду. Я мог бы указать постоянную частоту кадров для выходного файла, например

ffmpeg -i input.mp4 -vf "tblend=добавление,framestep=2" -c:v libx264 -r 30 -crf 16 -c:a копировать output.mp4

Я не приму свой собственный ответ, потому что результатом этого процесса является уродливое наложение движущихся объектов между последовательными кадрами , поэтому требуется какое-то адаптивное размытие, поэтому я оставляю вопрос открытым, чтобы кто-то дал лучшее решение.

Вы просили добавить значения, хранящиеся в соответствующих пикселях каждых двух кадров , и это то, что делает ваш метод. Это приведет к «уродливой суперпозиции». Вы можете просто использовать фильтр для увеличения яркости.
Мульвья является постоянным экспертом по ffmpeg. -- Уменьшенная частота кадров позволяет затвору дольше оставаться открытым, собирая больше света, а астрономическое наложение изображений зависит от чрезвычайно медленного движения рассматриваемых объектов. --- С существующим видео и движением каждый кадр должен быть достаточно качественным, чтобы нечего было добавлять или накладывать друг на друга. Вы можете использовать кривые, чтобы осветлить только темные участки, оставив только яркие пиксели. Этот ответ работает для вас: video.stackexchange.com/a/13110/18314 ?
@Mulvya Увеличение яркости дает очень уродливые результаты из-за шума дискретизации. Должно быть какое-то решение, в том числе что-то похожее на интерполяцию кадров или какой-то направленный адаптивный фильтр или что-то в этом роде.
@Rob Ммм, я думаю, ты прав. Вероятно, телефон не добавляет кадры, а интегрирует больше времени в каждый кадр (и снимает меньше кадров в секунду).
Вы можете попробовать улучшить метод tblend, стабилизировав изображение. Но не ожидайте многого, ваш «низкий сигнал на нескольких изображениях» искажается при сжатии (квантование и т. д.).

С физикой! Все, что вам нужно сделать, это записать со скоростью 15 кадров в секунду и использовать выдержку 1/15 секунды (то есть угол затвора 360 градусов). Это фактически делает то же самое, что и объединение двух кадров 1/30 секунды, 30 кадров в секунду с программным обеспечением, просто позволяя свету попадать на датчик в два раза дольше. Нет необходимости в сложной математике или вычислениях!

Обратите внимание на слова « существующее видео» в заголовке вопроса. Это значит, что я не могу ничего снимать. Он приходит таким, какой он есть. Кроме того, в нескольких местах текста вопроса ясно, что это видео, записанное на телефон. Никаких причудливых опций, кроме частоты кадров, и только после установки отдельного приложения (о котором также упоминается в тексте вопроса) под названием OpenCamera.
Мне было неясно, действительно ли вы спрашивали о телефоне или использовали его в качестве примера. В частности, формулировки «некоторые мобильные телефоны» и «скажем, вы» звучат гипотетически. На самом деле, я совершенно не согласен с тем, что "по нескольким пунктам в тексте вопроса ясно, что это видео, записанное с телефона" из-за этой расплывчатости. Может быть, список смартфонов с инструментами? Я признаю, что, возможно, упустил из виду слово «существующий» в заголовке, но, поскольку больше нет акцента на уникальности, критичности, подлинности или чем-то еще в ваших кадрах, я предположил, что их можно просто переснять.
Кроме того, единственной «причудливой опцией», которую я предложил вам изменить, была частота кадров. Если ваша комбинация камеры (телефона) и программного обеспечения запрещает вам изменять настройки камеры, вы должны упомянуть об этом в вопросе, а не предполагать, что все знают, что такое OpenCamera, или заставлять всех угадывать, какая у вас модель телефона (потому что вы не упомянули ). Но если это действительно так, что вы не можете изменить эти настройки без установки отдельного приложения, возможно, в любом случае пришло время для нового телефона.