заменить черные кадры предыдущими кадрами

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

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

Я думаю, что мог бы получить все соответствующие позиции с помощью фильтров черного кадра и т. д., но какие действия я бы использовал, чтобы заменить эти кадры интерполяцией или дубликатом предыдущего кадра полностью автоматическим способом (поэтому я передавать только мой файл фильма в сценарий)?

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

Демонстрационные кадры с подробным описанием проблемы можно посмотреть здесь .

Ответы (1)

Можно удалить черные кадры и продублировать более ранние кадры.

ffmpeg -i in.mp4 -vf blackframe=0,metadata=select:key=lavfi.blackframe.pblack:value=50:function=less -vsync cfr -c:a copy out.mp4

Фильтр черного кадра анализирует и регистрирует долю пикселей кадра, которые являются черными. Фильтр метаданных сохраняет все кадры, которые имеют не более 50% пикселей черного цвета. Удаленные кадры создают разрыв в видеопотоке. Таким образом, установив метод синхронизации видео на постоянную частоту кадров, ffmpeg дублирует более ранние (не черные) кадры, чтобы заполнить эти пробелы.

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

Это потрясающе. Это в значительной степени достигает того, чего я хотел (я думаю). Интересно, как это а) обрабатывает случаи, когда есть несколько непосредственно следующих черных кадров б) почему выходные файлы постоянно длиннее, чем входные файлы (по продолжительности)
почему выход имеет большую продолжительность, чем вход?
Поделитесь полным логом. О какой разнице мы говорим?
Привет, извините за задержку с ответом. Разница уже несколько секунд, например здесь pastebin.com/NfTVtEC0 исходный файл: cl.ly/qSfM ffmpeged файл: cl.ly/qSMr
Не вижу разницы. Mediainfo показывает продолжительность формата для исходного: 3 s 532 msи для нового файла3 s 534 ms
Хм, я выровнял их в Final Cut, и верхний — перекодированный, и он длиннее. cl.ly/qSQr И это только 3s видео... И аудио линии тоже выглядят иначе cl.ly/qRvs 🤔
Ваш источник имеет переменную частоту кадров. Судя по всему, FCP не может этого уважать — он приводит клипы в соответствие с постоянной частотой кадров. Это уменьшит продолжительность клипа, если есть кадры с индивидуальной продолжительностью более 1/fpsсекунд.
Вместо замены самым последним нечерным кадром можно ли интерполировать отсутствующие кадры? [Изменить] Теперь я задал новый вопрос для этого