#ffmpeg #image-compression #openh264
#ffmpeg #сжатие изображения #openh264
Вопрос:
Допустим, у меня есть 5 изображений, которые очень похожи. Я хотел бы сжать изображения 2, 3, 4 и 5 на основе первого изображения, что несколько похоже на то, как P-кадры генерируются из I-кадра.
- В общем, каков наилучший способ / инструмент для этого?
- Например, с помощью FFMPEG возможно ли генерировать P-фреймы и сохранять их в отдельном файле?
Редактировать: хотя и похоже, я не ищу простого создания разницы между двумя изображениями. Моя цель — каким-то образом использовать информацию в первом изображении, чтобы сделать последовательные изображения намного меньше. Если я просто выполняю diff, сам diff имеет примерно тот же размер (примерно на 10% меньше), что не так много, как я ожидаю. Если я создам видео mp4, включающее эти 5 кадров, размер видео будет намного меньше, чем при размещении 5 кадров в файле, что, вероятно, связано с предикациями кадров на основе I-кадров. Есть ли способ генерировать эти предсказанные кадры один за другим и сохранять их по отдельности?
Комментарии:
1. Вы можете использовать фильтр наложения в ffmpeg в режиме различий и сохранить результат. Это не будет строго P-кадрами, но вы можете сгенерировать оригинал, выполнив смешивание в режиме сложения.
2. Я проверил фильтр наложения. Похоже, он используется для наложения кадров, а не для последовательных кадров. Не могли бы вы привести пример?
3. Наложение кадров является одной из утилит фильтра наложения. Вычисление различий в пикселях — это другое. Здесь уже поздно, так что завтра я приведу пример.
4. Я подожду до завтра. Я ценю это 🙂
Ответ №1:
Вот основной синтаксис:
Допустим I.png
, это ваш базовый кадр и P1.png
кадр, который вы хотите уменьшить до его отличия от I.png
Затем
ffmpeg -i P1.png -i I.png -lavfi blend=all_expr='A-B' D1.png
создает разностный кадр D1.png
.
Чтобы восстановить P1 из I и D1, выполните
ffmpeg -i D1.png -i I.png -lavfi blend=all_expr='A B' P1-r.png
PI-r.png
будет идентично P1.png
.
Комментарии:
1. Спасибо за код, но, похоже, это простое различие изображений, которое я также мог бы достичь с помощью ImageMagick. Я отредактирую вопрос, чтобы объяснить, что я ищу.
2. ДА. Вы также хотели прогноз intra inter?
3. Вероятно, да, если предсказания intra inter приводят к тому, что видеофайлы становятся намного меньше, чем просто объединение нескольких кадров. Есть ли способ добиться этого с помощью ffmpeg? Я отредактировал вопрос, чтобы лучше объяснить это. Спасибо.
4. Я сохраню первый кадр, который в основном является I-кадром. Затем каждый раз, когда я получаю данные P-кадра, я хотел бы вычислить фактический кадр, используя P-кадр и I-кадр, с которым он был закодирован. Моя проблема в том, что у меня нет всех кадров при их кодировании. Я получал их один за другим с регулярным интервалом времени, и я не хочу ждать, чтобы получить их все, чтобы закодировать весь фильм и передать их дальше. Скорее, я хочу закодировать отдельный кадр и немедленно передать его.
5. Итак, вы будете писать код для декодирования, используя API ffmpeg?