Некоторые мобильные телефоны способны компенсировать условия низкой освещенности, объединяя каждые два или более кадров в один. В результате получается видео с переменной частотой кадров, где каждое изображение имеет свою временную метку. На таких кадрах показаны правильно освещенные объекты, но вы замечаете падение частоты кадров, потому что движение не плавное, а также изображения становятся более шумными (потому что вы добавляете шум, создаваемый электроникой). Во всяком случае, мне это кажется технологическим чудом, учитывая, что входной зрачок таких приборов не может быть больше 1 мм в диаметре.
Но допустим, вы заставили телефон записывать с фиксированной частотой кадров (например, 1280x720p30 с OpenCamera в Android). Должна быть возможность конвертировать, например, 30p в 15p, добавляя значения, хранящиеся в соответствующих пикселях каждых двух кадров, в одно. Я знаю, что этот процесс возможен, потому что он обычен в других контекстах, например, при работе с астрономическими изображениями.
Моими инструментами являются ffmpeg и Blender. Я был бы признателен, если бы кто-то мог ограничить ответ этими инструментами, хотя другие решения также приветствуются, потому что они могут указать мне правильный путь для поиска подходящих альтернатив.
Как вы заметили, простое добавление (интегрирование) каждой пары соседних кадров для создания одного нового кадра снижает частоту кадров.
Но если все, что вы хотите сделать, это объединить соседние кадры, рассмотрите возможность дублирования видео на отдельную временную шкалу, сдвинутую ровно на один кадр. Интеграция этих двух потоков даст вам новое видео с той же частотой кадров, но в целом короче на один кадр.
Все остальные отмеченные проблемы могут проявиться, но, по крайней мере, частота кадров не изменится.
Мой собственный, не полностью удовлетворительный ответ, который может быть полезен:
Эта очень простая строка делает свое дело:
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
Я не приму свой собственный ответ, потому что результатом этого процесса является уродливое наложение движущихся объектов между последовательными кадрами , поэтому требуется какое-то адаптивное размытие, поэтому я оставляю вопрос открытым, чтобы кто-то дал лучшее решение.
С физикой! Все, что вам нужно сделать, это записать со скоростью 15 кадров в секунду и использовать выдержку 1/15 секунды (то есть угол затвора 360 градусов). Это фактически делает то же самое, что и объединение двух кадров 1/30 секунды, 30 кадров в секунду с программным обеспечением, просто позволяя свету попадать на датчик в два раза дольше. Нет необходимости в сложной математике или вычислениях!
пользователь 24601
Джим Мак