Вот мой сценарий:
- Загрузите avi-фильм из Интернета.
- Открыть растровый ресурс
- Наложение этого растрового изображения в нижней части фильма на все кадры в фоновом режиме
- Сохранение видео в хранилище extarnal
- Продолжительность видео составляет 15 секунд.
Можно ли это использовать MediaMuxer? Любая информация по этому поводу с радостью получена
Я искал http://bigflake.com/mediacodec/#DecodeEditEncodeTest (спасибо @fadden), и там говорится:
"Декодирование кадра и его копирование в ByteBuffer с
glReadPixels()
занимает около 8 мс на Nexus 5, достаточно быстро, чтобы идти в ногу с 30fps вход, но дополнительные шаги, необходимые для сохранения он на диск, поскольку PNG дороги (примерно полсекунды)"
Так что почти 1 сек/фрейм неприемлемо. Из того, что я думаю, один из способов заключается в том, чтобы сохранить каждый фрейм как PNG, открыть его, добавить на него наложение растрового изображения и затем сохранить его. Однако для этого потребуется огромное количество времени.
Интересно, есть ли способ сделать что-то вроде этого:
- Открыть видеофайл с внешнего хранилища
- Запустить его декодирование
- Каждый декодированный кадр будет изменен с наложением растрового изображения в памяти
- Кадр отправляется кодеру.
В iOS я увидел, что есть способ взять исходное аудио + оригинальное видео + изображение и добавить его в контейнер, а затем просто закодировать все это...
Должен ли я переключиться на ffmpeg? Насколько стабильным и совместимым является ffmpeg? Я рискую проблемы совместимости с устройствами Android 4.0+? Есть ли способ использовать ffmpeg для этого? Я новичок в этом домене и все еще занимаюсь исследованиями.
Через годы редактирование:
Годы прошли с тех пор, как вопрос и ffmpeg на самом деле нелегко добавить в коммерческое программное обеспечение с точки зрения лицензии. Как это произошло? Более новые версии android более способны на это со стандартным sdk?